Final commit (hopefully)

- I'll be switching over to a more organized tree ASAP
- This will fix several problems this config has
- I'll keep you posted :wave:
diff --git a/.sops.yaml b/.sops.yaml
new file mode 100644
index 0000000..99051e3
--- /dev/null
+++ b/.sops.yaml
@@ -0,0 +1,9 @@
+keys:
+    - &skyler D520 AC8D 7C96 9212 5B2B  BD3A 1AFD 1025 6B3C 714D
+    - &python_laptop 2a81f40686eccb845b763c438a8cf3c0fff331b6
+creation_rules:
+    - path_regex: secrets/.*
+      key_groups:
+          - pgp:
+              - *skyler
+              - *python_laptop
diff --git a/flake.lock b/flake.lock
index c067a83..4b20649 100644
--- a/flake.lock
+++ b/flake.lock
@@ -144,6 +144,37 @@
         "type": "github"
       }
     },
+    "nixpkgs-22_05": {
+      "locked": {
+        "lastModified": 1660410996,
+        "narHash": "sha256-arkfX1YYFmwMyDTCguzoOI4epABC41FGQU4J1/G3/9M=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "70b6236f3cbc815f2cae8d597418c714cf83d1c8",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "release-22.05",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "nixpkgs-minion": {
+      "locked": {
+        "lastModified": 1654036137,
+        "narHash": "sha256-9qB2rqwRRTWF6QESxhJA9Xs+f9F91CjAddbOS19Khv8=",
+        "owner": "minion3665",
+        "repo": "nixpkgs",
+        "rev": "44aa79022d197f21d1b584a2b445065e5c08fecd",
+        "type": "github"
+      },
+      "original": {
+        "owner": "minion3665",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
     "nixpkgs-unstable": {
       "locked": {
         "lastModified": 1658290795,
@@ -215,9 +246,33 @@
         "home-manager": "home-manager",
         "nixpkgs": "nixpkgs_2",
         "nixpkgs-21-11": "nixpkgs-21-11",
+        "nixpkgs-minion": "nixpkgs-minion",
         "nixpkgs-unstable": "nixpkgs-unstable",
         "nurpkgs": "nurpkgs",
-        "registry": "registry"
+        "registry": "registry",
+        "sops-nix": "sops-nix",
+        "vim-ctrlspace": "vim-ctrlspace"
+      }
+    },
+    "sops-nix": {
+      "inputs": {
+        "nixpkgs": [
+          "nixpkgs"
+        ],
+        "nixpkgs-22_05": "nixpkgs-22_05"
+      },
+      "locked": {
+        "lastModified": 1660540143,
+        "narHash": "sha256-oqeOdJH0ey/UyG1G31BV6Lk8qjI+VKboTpTJB317OhM=",
+        "owner": "Mic92",
+        "repo": "sops-nix",
+        "rev": "773365016f5202a199f5aff72cac75c64add4528",
+        "type": "github"
+      },
+      "original": {
+        "owner": "Mic92",
+        "repo": "sops-nix",
+        "type": "github"
       }
     },
     "utils": {
@@ -234,6 +289,22 @@
         "repo": "flake-utils",
         "type": "github"
       }
+    },
+    "vim-ctrlspace": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1649840914,
+        "narHash": "sha256-wQuQTNmU1qujQJ3oU2pSTQaVDa4ZChr1fkjFbILLt+w=",
+        "owner": "vim-ctrlspace",
+        "repo": "vim-ctrlspace",
+        "rev": "05b58e916cea62577462d36bbb88933e8454f2d3",
+        "type": "github"
+      },
+      "original": {
+        "owner": "vim-ctrlspace",
+        "repo": "vim-ctrlspace",
+        "type": "github"
+      }
     }
   },
   "root": "root",
diff --git a/flake.nix b/flake.nix
index c3936cb..9542af5 100644
--- a/flake.nix
+++ b/flake.nix
@@ -12,6 +12,7 @@
         home-manager.url = "github:nix-community/home-manager/release-22.05";
         nurpkgs.url = "github:nix-community/NUR";
         comma.url = "github:nix-community/comma";
+        nixpkgs-minion.url = "github:minion3665/nixpkgs";
         fzf-tab = {
             url = "github:Aloxaf/fzf-tab";
             flake = false;
@@ -20,12 +21,18 @@
             url = "github:pimterry/git-confirm";
             flake = false;
         };
+        vim-ctrlspace = {
+            url = "github:vim-ctrlspace/vim-ctrlspace";
+            flake = false;
+        };
+        sops-nix.url = "github:Mic92/sops-nix";
 
         # Make sure flakes we depend on use the same version of nixpkgs as we do
         home-manager.inputs.nixpkgs.follows = "nixpkgs";
+        sops-nix.inputs.nixpkgs.follows = "nixpkgs";
     };
 
-    outputs = extraInputs@{ self, nixpkgs, nixpkgs-unstable, nixpkgs-21-11, home-manager, ... }:
+    outputs = extraInputs@{ self, nixpkgs, nixpkgs-unstable, nixpkgs-21-11, nixpkgs-minion, home-manager, ... }:
     let
         system = "x86_64-linux";  # TOOD: Add options for MacOS
 
@@ -50,6 +57,12 @@
             config = { allowUnfree = true; };
         };
 
+        pkgs-minion = import nixpkgs-minion {
+            inherit system;
+
+            config = { allowUnfree = true; };
+        };
+
         variables = import ./src/common/variables.nix;
     in {
         nixosConfigurations = {
@@ -57,11 +70,12 @@
                 inherit system;
 
                 specialArgs = extraInputs // {
-                  inherit nixpkgs nixpkgs-unstable home-manager pkgs-unstable pkgs-21-11 system;
+                  inherit nixpkgs nixpkgs-unstable home-manager pkgs-unstable pkgs-21-11 pkgs-minion system;
                 };
 
                 modules = [
                     src/system.nix
+                    extraInputs.sops-nix.nixosModules.sops
                 ];
             };
         };
@@ -70,7 +84,7 @@
             "${variables.username}" = home-manager.lib.homeManagerConfiguration rec {
                 inherit system pkgs;
 
-                extraSpecialArgs = extraInputs // { inherit nixpkgs nixpkgs-unstable home-manager pkgs-unstable pkgs-21-11 system; };
+                extraSpecialArgs = extraInputs // { inherit nixpkgs nixpkgs-unstable home-manager pkgs-unstable pkgs-21-11 pkgs-minion system; };
 
                 username = variables.username;
                 homeDirectory = "/home/${username}";
diff --git a/secrets/secrets.json b/secrets/secrets.json
new file mode 100644
index 0000000..863ed81
--- /dev/null
+++ b/secrets/secrets.json
@@ -0,0 +1,26 @@
+{
+	"collabora-password": "ENC[AES256_GCM,data:/pQqX2DJutNwWVUo6aCq6SRc/0lEfvEj,iv:LZ3RMxzCpY8dsSlmj/G+0yFG3Blp7aJ4vWF0eQi7I2Y=,tag:CR6E2nDcLg3rz88lE5Zj3A==,type:str]",
+	"sops": {
+		"kms": null,
+		"gcp_kms": null,
+		"azure_kv": null,
+		"hc_vault": null,
+		"age": null,
+		"lastmodified": "2022-08-18T22:24:12Z",
+		"mac": "ENC[AES256_GCM,data:xvRUMD0q0W5uerh27WtSitlUc2E0b0T0gCzMTI6eMTZKf0flzgA6WChFyN6xeglHgqKzom2uIgFghuuJJM2pvXxZQcUf7LnUxsfC+kLdm1HlnwxNMwT+Hg/xKVKnyXveljzMVfTX+wps3TSxwyirq0lnBsWXZd9meABKuP1v6og=,iv:I8PXJ5jlQg7ig4StOKWPwWC/x9m0dlvsTYB01s+l6Qc=,tag:BUBAHx0O2zlWZxZGsK9p+A==,type:str]",
+		"pgp": [
+			{
+				"created_at": "2022-08-18T21:04:35Z",
+				"enc": "-----BEGIN PGP MESSAGE-----\n\nwcFMA4vnwRU2nlKhARAAk4QGBf3JjCRs17Z2WncVGOeRa44oZvJmK6QHMk6ltBCD\najoFU4rQAto9fVv638tmdALZ8Mpw23QQismjNS2+rha3IHDZmnDDOUPfLzMfSD2h\nkJUCCISTWPUJhecJNaTpfjyBUyNcG2rkFPvRp64jXHVg6dF/HrjjU8bdd4HTH8FE\nL19E/Dz968K8AzDyUvEdhaDxOP9vBRdIYWqbV7p3vdseH2HAhmL+o2yla1HclK9g\nNA40J+Z288rApnUkkiZJxVaEjZtCq/1FIfZWrWgiGT4KmgsoFDblTYWBMag8P3cf\na76RhGyvRqH8AiWkbTp3l1iSezDjRfqUViAt3RoPFX5FTCDP5igrlJQddc621EhW\n4kSs9Aj2QfqZNfkixgE61b5W9HmS4l2i+PiwsyxJo5zZHM7SbP9YU2mn2yD2BlUj\nM1d5Ql9ZTDG2jYv8W715Mv7aKwc9jP7H/WUsxN2u+ZvmpYHITBBLnlK6WqrNeBOo\nODWfJQNY1OxLNkjGtpEgnqdYazuHYb9BWgDovgqb/EpO1gdjiCp80Sd9VygrB2Xy\nbQGKrvvMiip1eEXg2UEH3cZNSFQe/rKVSuRow4slQfCH1erLygqrJM7lNy/qptmJ\nzUPGqJyip1WJiJBeVO9UP7wL1k5PCLXowFwdo6/st83y3foS3x6cxBR7KvW9DKvS\nUQHWOO5EKJtU9uT3YWlpsFPlqaf9xuGf/Aes5cb0eW8TZT+J/7NAQdhUzGueDdOR\n+wMI6en3DfZBGMQEYw4rTcUdD/OG8bP0JVkJ3Mvg7qR5Sw==\n=ekop\n-----END PGP MESSAGE-----",
+				"fp": "D520AC8D7C9692125B2BBD3A1AFD10256B3C714D"
+			},
+			{
+				"created_at": "2022-08-18T21:04:35Z",
+				"enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMA4qM88D/8zG2AQ//Qh0uzPOOzgfrz6Ub/XN6MxyNOaNUev3KVL18U8fQa9hT\nHosL6ah2+6dUpohVTfEuQmjuGM4qchUoGpGS9oo2cyEAzhGk6WX1jnL9czghWU+k\n2WZChsxyIU3w7oFBSek3GNcAID2QXooQONuiiq4MVrovkiXlcT3K1L78EOdMCj5T\npv4gXrNOIwz4A28m2keYU7rHkSSYdxhrH38NUsEcAnihFMWLaZzyup2FCvGMbbkP\n/00U/QBUSZYYusrG0whiMszsuLnk889bLo7mtF6OeH/eubHIQgotYmdimHWNbGI6\nz1kNYnMKIpNyWLmn4yj2MiVKa2cEa8w8SWBUXw3k55oJC6XDOV/uMXkDD7Ik/kJD\nTkLYhnWzQd85wyv0MWBrxVoPEZ24GBSJcWk0FJFexpPE1wT0r83PPamoegFPtUYZ\n9Tex3YNu6qm4G78hJZxyU69PS4kPFc0gb0bpUyIHjJR+bRGHkFFk1NgRIdeMGA/O\nnZQOgNHWvA39cVY9rAbbnmtPQ/2G2zS7+87R+1ygPvJyf+mWdOsKAz+dkZBcdWAR\nuP8EoLizPFLO6jrbNgteprsKO/n1cc9/1A+nqP4KJjepHOg+B4w2H9V7kagKixo+\n22PTZaPpPDVTy+FUGnkVH7Fxl371SvQSUaMYAebNNuDUyg/AAdqGYARp9y/ebLHS\nWAHKxS2V0kZ3jiGPS4yKM3JTBHUbGX6e6w2ePNNRc2v6NNZuKIpwcll4wrnbCffS\ngP7bEfhDXndAubsj9dMH8BUej2mnJJeARHBka/q3gPOCP7JFA6P9BMI=\n=DM4A\n-----END PGP MESSAGE-----\n",
+				"fp": "2a81f40686eccb845b763c438a8cf3c0fff331b6"
+			}
+		],
+		"unencrypted_suffix": "_unencrypted",
+		"version": "3.7.3"
+	}
+}
\ No newline at end of file
diff --git a/src/apps/personal/element.nix b/src/apps/personal/element.nix
index 9278df0..ced87ce 100644
--- a/src/apps/personal/element.nix
+++ b/src/apps/personal/element.nix
@@ -1,5 +1,6 @@
 { pkgs, ... }: {
     home.packages = with pkgs; [
         element-desktop-wayland
+        cinny
     ];
 }
diff --git a/src/apps/personal/email.nix b/src/apps/personal/email.nix
new file mode 100644
index 0000000..45c2d5f
--- /dev/null
+++ b/src/apps/personal/email.nix
@@ -0,0 +1,66 @@
+{ pkgs, ... }: {
+    accounts.email.accounts = {
+        collabora = {
+            astroid = {
+                enable = true;
+                sendMailCommand = "${pkgs.msmtp}/bin/msmtpq --read-envelope-from --read-recipients";
+            };
+            msmtp.enable = true;
+            himalaya.enable = true;
+            neomutt.enable = true;
+            mbsync = {
+                enable = true;
+                create = "maildir";
+            };
+            notmuch.enable = true;
+            address = "skyler.grey@collabora.com";
+            imap = {
+                host = "mail.collabora.com";
+                port = 143;
+                tls.useStartTls = true;
+            };
+            smtp = {
+                host = "mail.collabora.com";
+                port = 587;
+                tls.useStartTls = true;
+            };
+            userName = "skyler";
+            realName = "Skyler Grey";
+            primary = true;
+            signature = {
+                showSignature = "append";
+                text = ''
+                Miss Skyler Grey
+                Intern
+
+                Collabora Ltd.
+                Platinum Building, St John's Innovation Park, Cambridge CB4 0DS, UK
+                Registered in England & Wales, no. 5513718'';
+            };
+            passwordCommand = "${pkgs.coreutils}/bin/cat /run/secrets/collabora-password";
+        };
+    };
+    programs.astroid.enable = true;
+    programs.msmtp.enable = true;
+    services.mbsync = {
+        enable = true;
+        postExec = "${pkgs.notmuch}/bin/notmuch new";
+    };
+    programs.mbsync.enable = true;
+    programs.himalaya.enable = true;
+    programs.neomutt = {
+        enable = true;
+        sidebar.enable = true;
+        settings = {
+            preferred_languages = "en";
+        };
+        extraConfig = ''
+        auto_view text/html
+        '';
+    };
+    programs.notmuch.enable = true;
+    home.packages = [ pkgs.lynx ];
+    home.file.".mailcap".text = ''
+    text/html; ${pkgs.lynx}/bin/lynx -force_html -dump %s; copiousoutput
+    '';
+}
diff --git a/src/apps/personal/gpg.nix b/src/apps/personal/gpg.nix
index 58d57ca..9c8f74f 100644
--- a/src/apps/personal/gpg.nix
+++ b/src/apps/personal/gpg.nix
@@ -1,6 +1,6 @@
 { pkgs, ... }: let
     pinentry-multiplexed = pkgs.writeScriptBin "pinentry-multiplexed" ''
-        case $PINENTRY_USER_DATA in
+        case "$${PINENTRY_USER_DATA-}" in
         tty)
             exec ${pkgs.pinentry.tty}/bin/pinentry "$@"
             ;;
diff --git a/src/apps/personal/grep.nix b/src/apps/personal/grep.nix
index 4fc02a1..fe29812 100644
--- a/src/apps/personal/grep.nix
+++ b/src/apps/personal/grep.nix
@@ -1,11 +1,12 @@
 { pkgs, ... }: {
-  home.packages = [
-    pkgs.ripgrep
-    pkgs.gnugrep
-  ];
+    home.packages = [
+        pkgs.ripgrep
+        pkgs.gnugrep
+    ];
 
-  home.shellAliases = {
-    "git-todo" = "${pkgs.git}/bin/git log | ${pkgs.gnugrep}/bin/grep 'TODO\|DONE'";
-    todo = "${pkgs.ripgrep}/bin/rg TODO:";
-  };
+    home.shellAliases = {
+        "git-todo" = "${pkgs.git}/bin/git log | ${pkgs.gnugrep}/bin/grep 'TODO\|DONE'";
+        todo = "${pkgs.ripgrep}/bin/rg TODO:";
+        rg = "${pkgs.ripgrep}/bin/rg -S";
+    };
 }
diff --git a/src/apps/personal/ssh.nix b/src/apps/personal/ssh.nix
index 3ab03fc..a912f0f 100644
--- a/src/apps/personal/ssh.nix
+++ b/src/apps/personal/ssh.nix
@@ -8,6 +8,10 @@
                 port = 29418;
                 user = "Minion3665";
             };
+            transplace = {
+                hostname = "95.217.87.112";
+                identityFile = "~/.ssh/id_transplace";
+            };
         };
     };
 
diff --git a/src/apps/personal/timetracking.nix b/src/apps/personal/timetracking.nix
index b7d0f2f..52220e3 100644
--- a/src/apps/personal/timetracking.nix
+++ b/src/apps/personal/timetracking.nix
@@ -1,6 +1,11 @@
 { pkgs, ... }: {
     home.packages = [
         pkgs.gtimelog
+# pkgs.gtimelog.overrideAttrs(prev: {
+        #     src = fetchGit {
+        #         url = "git@gitlab.collabora.com:
+        #     };
+        # })
         pkgs.haskellPackages.arbtt
     ];
 }
diff --git a/src/apps/personal/vim.nix b/src/apps/personal/vim.nix
index ccd3434..145b8c7 100644
--- a/src/apps/personal/vim.nix
+++ b/src/apps/personal/vim.nix
@@ -1,4 +1,4 @@
-{ pkgs, ... }: {
+{ pkgs, vim-ctrlspace, ... }: {
     home.file.".config/nvim/autoload/airline/themes/onehalf.vim".text = ''
     let g:airline#themes#onehalf#palette = {}
     function! airline#themes#onehalf#refresh()
@@ -31,21 +31,24 @@
     let g:airline#themes#onehalf#palette.visual      = s:generateAirlinePalette(s:purple)
     let g:airline#themes#onehalf#palette.select      = s:generateAirlinePalette(s:purple)
     let g:airline#themes#onehalf#palette.multi       = s:generateAirlinePalette(s:purple)
-    let g:airline#themes#onehalf#palette.insert      = s:generateAirlinePalette(s:blue)
+    let g:airline#themes#onehalf#palette.insert      = s:generateAirlinePalette(s:yellow)
     let g:airline#themes#onehalf#palette.commandline = s:generateAirlinePalette(s:red)
     let g:airline#themes#onehalf#palette.terminal    = s:generateAirlinePalette(s:cyan)
-    let g:airline#themes#onehalf#palette.replace     = s:generateAirlinePalette(s:yellow)
-    let g:airline#themes#onehalf#palette.ctrlp       = s:generateAirlinePalette(s:white)
-    let g:airline#themes#onehalf#palette.inactive    = s:generateAirlinePalette(s:lightgrey)
+    let g:airline#themes#onehalf#palette.replace     = s:generateAirlinePalette(s:blue)
+    let g:airline#themes#onehalf#palette.inactive    = s:generateAirlinePalette(s:white)
     let g:airline#themes#onehalf#palette.normal_modified      = s:generateAirlinePalette(s:green)
     let g:airline#themes#onehalf#palette.visual_modified      = s:generateAirlinePalette(s:purple)
     let g:airline#themes#onehalf#palette.select_modified      = s:generateAirlinePalette(s:purple)
     let g:airline#themes#onehalf#palette.multi_modified       = s:generateAirlinePalette(s:purple)
-    let g:airline#themes#onehalf#palette.insert_modified      = s:generateAirlinePalette(s:blue)
+    let g:airline#themes#onehalf#palette.insert_modified      = s:generateAirlinePalette(s:yellow)
     let g:airline#themes#onehalf#palette.commandline_modified = s:generateAirlinePalette(s:red)
     let g:airline#themes#onehalf#palette.terminal_modified    = s:generateAirlinePalette(s:cyan)
-    let g:airline#themes#onehalf#palette.replace_modified     = s:generateAirlinePalette(s:yellow)
-    let g:airline#themes#onehalf#palette.ctrlp_modified       = s:generateAirlinePalette(s:white)
+    let g:airline#themes#onehalf#palette.replace_modified     = s:generateAirlinePalette(s:blue)
+
+
+    let g:airline#themes#onehalf#palette.tabline = {
+        \ 'airline_tabtype' : [s:white.gui, s:lightgrey.gui, s:white.cterm, s:lightgrey.cterm]}
+
     endfunction
 
     call airline#themes#onehalf#refresh()
@@ -57,7 +60,9 @@
             settings = {
                 "suggest.noselect" = false;
                 "cSpell.checkOnlyEnabledFileTypes" = false;
+                "rust-analyzer.serverPath" = "${pkgs.rust-analyzer}/bin/rust-analyzer";
             };
+
         };
         viAlias = true;
         vimAlias = true;
@@ -80,10 +85,14 @@
         set nocompatible
         set hidden
         set encoding=utf-8
-        set scrolloff=5
+        set scrolloff=3
         set signcolumn=yes
+        set guicursor=v-r-cr:hor50,i:ver50
         colorscheme onehalfdark
 
+        hi clear SpellBad
+        hi SpellBad cterm=undercurl gui=undercurl
+
         command W w
         command Wq wq
 
@@ -138,8 +147,12 @@
         nmap <leader>+ <Plug>AirlineSelectNextTab
         let g:airline_skip_empty_sections = 1
 
-        let g:ctrlp_map = '<c-p>'
-        let g:ctrlp_cmd = 'CtrlP'
+        let g:CtrlSpaceDefaultMappingKey = "<C-space> "
+        let g:CtrlSpaceGlobCommand = 'rg --color=never --files'
+        let g:CtrlSpaceSearchTiming = 500
+        let g:CtrlSpaceLoadLastWorkspaceOnStart = 1
+        let g:CtrlSpaceSaveWorkspaceOnSwitch = 1
+        let g:CtrlSpaceSaveWorkspaceOnExit = 1
 
         nmap <silent> ]c :call CocAction('diagnosticNext')<cr>
         nmap <silent> [c :call CocAction('diagnosticPrevious')<cr>
@@ -179,7 +192,25 @@
 
         nnoremap <silent> K :call <SID>show_documentation()<CR>
 
-        autocmd BufWritePre * Neoformat
+        function FormatChangedHunks()
+        let formattedLines = 0
+        let formattedHunks = 0
+
+        for hunk in gitgutter#hunk#hunks(bufnr(""))
+            let line1 = hunk[2] - 1
+            let line2 = hunk[2] + hunk[3]
+            let formattedLines = formattedLines + line2 - line1
+            let formattedHunks = formattedHunks + 1
+            silent call neoformat#Neoformat(0, "", line1, line2)
+        endfor
+
+        echomsg "Reformatted " . string(formattedLines) . " changed lines in " . string(formattedHunks) . " hunks"
+        endfunction
+
+        autocmd BufWritePre * undojoin | try | undojoin | Neoformat | catch /^Vim\%((\a\+)\)\=:E790/ | finally | silent Neoformat | endtry
+        " call FormatChangedHunks()
+        autocmd CursorHoldI,CursorHold,BufLeave ?* silent! update
+        let g:cursorhold_updatetime = 1000
 
         let g:neoformat_try_node_exe = 1
 
@@ -191,7 +222,42 @@
         endif
         endfunction
 
+        let s:darkred     = { "gui": "#844C55", "cterm": "167" }
+        let s:darkyellow  = { "gui": "#877658", "cterm": "136" }
+        let s:darkgreen   = { "gui": "#607857", "cterm": "71"  }
+        let s:darkcyan    = { "gui": "#3F717B", "cterm": "31"  }
+        let s:darkblue    = { "gui": "#456E92", "cterm": "31"  }
+        let s:darkpurple  = { "gui": "#775289", "cterm": "127" }
+        let s:white       = { "gui": "#dcdfe4", "cterm": "188" }
+
+        exec "highlight IndentBlanklineContextChar ctermfg=" . s:white.cterm . " guifg=" . s:white.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineContextStart ctermfg=NONE guifg=NONE guisp=white ctermbg=NONE guibg=NONE gui=underline term=underline"
+        exec "highlight IndentBlanklineIndent1 ctermfg=" . s:darkred.cterm . " guifg=" . s:darkred.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineIndent2 ctermfg=" . s:darkyellow.cterm . " guifg=" . s:darkyellow.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineIndent3 ctermfg=" . s:darkgreen.cterm . " guifg=" . s:darkgreen.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineIndent4 ctermfg=" . s:darkcyan.cterm . " guifg=" . s:darkcyan.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineIndent5 ctermfg=" . s:darkblue.cterm . " guifg=" . s:darkblue.gui . " ctermbg=NONE guibg=NONE"
+        exec "highlight IndentBlanklineIndent6 ctermfg=" . s:darkpurple.cterm . " guifg=" . s:darkpurple.gui . " ctermbg=NONE guibg=NONE"
+
         lua << EOF
+        vim.opt.list = true
+        vim.opt.listchars:append "space:⋅"
+        vim.opt.listchars:append "eol:↴"
+
+        require("indent_blankline").setup {
+            space_char_blankline = " ",
+            show_current_context = true,
+            show_current_context_start = true,
+            char_highlight_list = {
+                "IndentBlanklineIndent1",
+                "IndentBlanklineIndent2",
+                "IndentBlanklineIndent3",
+                "IndentBlanklineIndent4",
+                "IndentBlanklineIndent5",
+                "IndentBlanklineIndent6",
+            },
+        }
+
         require('neorg').setup {
             load = {
                 ["core.defaults"] = {}
@@ -209,6 +275,23 @@
                 enable = true,
                 extended_mode = true,
                 max_file_lines = nil,
+                colors = {
+                    "#e06c75",
+                    "#e5c07b",
+                    "#98c379",
+                    "#56b6c2",
+                    "#61afef",
+                    "#c678dd",
+
+                },
+                termcolors = {
+                    "168",
+                    "180",
+                    "114",
+                    "73",
+                    "75",
+                    "176",
+                },
             },
             incremental_selection = {
                 enable = true,
@@ -231,8 +314,7 @@
         set foldexpr=nvim_treesitter#foldexpr()
 
         set viewoptions-=options
-        autocmd BufWinLeave ?* mkview!
-        autocmd BufWinEnter ?* normal zR
+        autocmd BufWinLeave ?* silent! mkview!
 
         function! s:loadViewOrUnfold()
         try
@@ -244,10 +326,41 @@
 
         autocmd BufWinEnter ?* call s:loadViewOrUnfold()
 
-
         let g:airline_highlighting_cache = 1
         let g:airline_theme = "onehalf"
         autocmd VimEnter * call vista#RunForNearestMethodOrFunction()
+
+        let g:list_of_disabled_keys = ["<UP>", "<DOWN>", "<LEFT>", "<RIGHT>"]
+
+        let g:hardtime_default_on = 1
+        let g:hardtime_allow_different_key = 1
+        let g:hardtime_motion_with_count_resets = 1
+
+        let g:himalaya_mailbox_picker = 'telescope'
+
+        nnoremap <leader>tf <cmd>Telescope find_files<cr>
+        nnoremap <leader>tc <cmd>Telescope coc<cr>
+        nnoremap <leader>ts <cmd>Telescope ultisnips<cr>
+        nnoremap <leader>tg <cmd>Telescope live_grep<cr>
+        nnoremap <leader>tb <cmd>Telescope buffers<cr>
+        nnoremap <leader>th <cmd>Telescope help_tags<cr>
+
+        lua << EOF
+        require("telescope").setup({
+
+        });
+
+        require("telescope").load_extension("coc");
+        require("telescope").load_extension("ui-select");
+        require("telescope").load_extension("ultisnips");
+        require("telescope").load_extension("zoxide");
+        require("telescope").load_extension("fzf");
+        require("telescope").load_extension("file_browser");
+        EOF
+
+        lua << EOF
+        require("colorizer").setup();
+        EOF
         '';
 
         plugins = with pkgs.vimPlugins; [
@@ -257,7 +370,7 @@
             coc-tsserver
             coc-eslint
             coc-rust-analyzer
-            coc-spell-checker
+            # pkgs-minion.coc-spell-checker
             coc-json
             coc-jest
             coc-css
@@ -279,16 +392,41 @@
             airline
             vista-vim
             vim-gitgutter
-            ctrlp-vim
             vim-airline-clock
             lazygit-nvim
+            FixCursorHold-nvim
+            indent-blankline-nvim
+            vim-hardtime
+            vim-commentary
+            coc-snippets
+            ultisnips
+            vim-surround
+            himalaya-vim
+            telescope-ui-select-nvim
+            telescope-ultisnips-nvim
+            telescope-symbols-nvim
+            telescope-zoxide
+            telescope-fzf-native-nvim
+            telescope-coc-nvim
+            telescope-file-browser-nvim
+            telescope-nvim
+            nvim-colorizer-lua
+            (pkgs.vimUtils.buildVimPlugin {
+                name = "vim-ctrlspace";
+                src = vim-ctrlspace;
+            })
             (nvim-treesitter.withPlugins (plugins: pkgs.tree-sitter.allGrammars))
         ];
+
+        extraPackages = with pkgs; [
+            rust-analyzer
+        ];
     };
 
     home.packages = with pkgs; [
         universal-ctags
         nodePackages.cspell
+        fd
     ];
 
     home.sessionVariables.EDITOR = "${pkgs.neovim}/bin/nvim";
diff --git a/src/apps/personal/waybar.nix b/src/apps/personal/waybar.nix
index c67beea..db1d7f2 100644
--- a/src/apps/personal/waybar.nix
+++ b/src/apps/personal/waybar.nix
@@ -22,9 +22,9 @@
                         tooltip = false;
                         format = "{icon}";
                         format-icons = {
-                            notification = "<span foreground='red'><sup></sup></span>";
+                            notification = "<span foreground='red'><sup>*</sup></span>";
                             none = "";
-                            dnd-notification = "<span foreground='red'><sup></sup></span>";
+                            dnd-notification = "<span foreground='red'><sup>*</sup></span>";
                             dnd-none = "";
                         };
                         "return-type" = "json";
diff --git a/src/apps/personal/zsh.nix b/src/apps/personal/zsh.nix
index ad970ab..ef2eaaa 100644
--- a/src/apps/personal/zsh.nix
+++ b/src/apps/personal/zsh.nix
@@ -14,40 +14,74 @@
             extended = true;
         };
         initExtra = ''
-            bindkey -v
-            bindkey "\'\'$\{key[Up]}" up-line-or-search
+        bindkey -v
+        bindkey "\'\'$\{key[Up]}" up-line-or-search
 
-            command_not_found_handler ()
-            {
-                local p='/nix/store/ycclzpk99snlrk8sg9n4j8pm1927gavw-command-not-found/bin/command-not-found';
-                if [ -x "$p" ] && [ -f '/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite' ]; then
-                    "$p" "$@" 2>&1 | sed -r 's/nix-shell -p (\S+)/nix shell nixpkgs#\1/g' 1>&2;
-                  if [ $? = 126 ]; then
-                        "$@";
-                    else
-                        return 127;
-                    fi;
-                else
-                    echo "$1: command not found" 1>&2;
-                    return 127;
-                fi
-            }
+        command_not_found_handler ()
+        {
+            local p='/nix/store/ycclzpk99snlrk8sg9n4j8pm1927gavw-command-not-found/bin/command-not-found';
+            if [ -x "$p" ] && [ -f '/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite' ]; then
+            "$p" "$@" 2>&1 | sed -r 's/nix-shell -p (\S+)/nix shell nixpkgs#\1/g' 1>&2;
+            if [ $? = 126 ]; then
+            "$@";
+            else
+            return 127;
+            fi;
+            else
+            echo "$1: command not found" 1>&2;
+            return 127;
+            fi
+        }
 
-            ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=243';
-            ZSH_HIGHLIGHT_STYLES[comment]='fg=248';
+        ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=243';
+        ZSH_HIGHLIGHT_STYLES[comment]='fg=248';
 
-            if [[ $SHLVL != "1" ]]; then
-                export RPS1=$'%{\033[38;5;248m%}(%{$fg[red]%}L$SHLVL%{\033[38;5;248m%})%{\033[39m\033[49m%}'
-                fi
 
-            function TRAPINT {
-                print -n "$fg_bold[red]^C$fg_no_bold[default]"
-                return $(( 128 + $1 ))
-            }
+        function task_indicator {
+            if [ `task +READY +OVERDUE count 2> /dev/null` -gt "0" ]  ; then
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[magenta]%%}$(task +READY +OVERDUE count) OVERDUE%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            elif [ `task +READY +DUETODAY count 2> /dev/null` -gt "0" ]  ; then
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[red]%%}$(task +READY +DUETODAY count) DUE TODAY%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            elif [ `task +READY +DUETomorrow count 2> /dev/null` -gt "0" ]  ; then
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[yellow]%%}$(task +READY +DUETomorrow count) DUE TOMORROW%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            elif [ `task +READY urgency \> 10 count 2> /dev/null` -gt "0" ]  ; then
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[red]%%}$(task +READY urgency \\\> 10 count) URGENT%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            elif [ `task +READY count 2> /dev/null` -gt "0" ]  ; then
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[cyan]%%}$(task +READY count) TASKS%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            else
+            printf "%%{\\033[38;5;248m%%}(%%{$fg[green]%%}NO TASKS%%{\033[38;5;248m%%})%%{$fg[default]%%}"
+            fi
+        }
 
-            function tempd {
-                cd "$(mktemp -d)"
-            }
+        if [[ $SHLVL != "1" ]]; then
+        export RPS1=$'%{\033[38;5;248m%}(%{$fg[red]%}L$SHLVL%{\033[38;5;248m%})%{\033[39m\033[49m%} '
+        fi
+
+        RPS1+='$(task_indicator)'
+
+        function TRAPINT {
+            print -n "$fg_bold[red]^C$fg_no_bold[default]"
+            return $(( 128 + $1 ))
+        }
+
+        # function zle-line-init {
+        #     if [[ -n $ZLE_LINE_ABORTED ]]; then
+        #     MY_LINE_ABORTED="$ZLE_LINE_ABORTED"
+        #     fi
+
+        #     if [[ -n $MY_LINE_ABORTED ]]; then
+        #     local savebuf="$BUFFER" savecur="$CURSOR"
+        #     BUFFER="$MY_LINE_ABORTED"
+        #     CURSOR="$#BUFFER"
+        #     zle split-undo
+        #     BUFFER="$savebuf" CURSOR="$savecur"
+        #     fi
+        # }
+        # zle -N zle-line-init
+
+        function tempd {
+            cd "$(mktemp -d)"
+        }
 
             # disable sort when completing `git checkout`
             zstyle ':completion:*:git-checkout:*' sort false
@@ -63,14 +97,18 @@
 
             alias compinit="true"
             source ${./zsh/completions}/*
-        '';
-        enableSyntaxHighlighting = true;
-        enableAutosuggestions = true;
-        autocd = true;
-        dotDir = ".local/share/zsh";
-    };
+            '';
+            enableSyntaxHighlighting = true;
+            enableAutosuggestions = true;
+            autocd = true;
+            dotDir = ".local/share/zsh";
+        };
 
-    home.packages = [
-        pkgs.fzf
-    ];
-}
+        home.packages = [
+            pkgs.fzf
+        ];
+
+        home.shellAliases = {
+            ":q" = "exit";
+        };
+    }
diff --git a/src/apps/system/grocy.nix b/src/apps/system/grocy.nix
index 44c92a2..e705967 100644
--- a/src/apps/system/grocy.nix
+++ b/src/apps/system/grocy.nix
@@ -17,4 +17,7 @@
   };
 
   networking.firewall.allowedTCPPorts = [ 80 ];
+  networking.hosts = {
+    "127.0.0.1" = [ "grocy.services.local" ];
+  };
 }
diff --git a/src/overlays/electron-screenshare.nix b/src/overlays/electron-screenshare.nix
index 41a288b..158400a 100644
--- a/src/overlays/electron-screenshare.nix
+++ b/src/overlays/electron-screenshare.nix
@@ -25,7 +25,7 @@
 */
 # Therefore, this file is also copyable under MIT as it represents a "substantial portion" of the original code
 
-final: prev: {}
+final: prev: {
 /*
   discord = final.makeDesktopItem {
     name = "Discord";
@@ -48,5 +48,17 @@
     type = "Application";
     categories = [ "Network" "InstantMessaging" ];
     terminal = false;
-  };
-}*/
+    };
+    */
+
+    cinny = final.makeDesktopItem {
+        name = "Cinny";
+        desktopName = "Cinny";
+        genericName = "An alternative matrix client to Element";
+        exec="sh -c \"${final.chromium}/bin/chromium --app=\\\"file://${prev.cinny}/index.html\\\" --autoplay-policy=no-user-gesture-required --enable-features=WebUIDarkMode --force-dark-mode --allow-file-access-from-files --user-data-dir=\\\${XDG_CONFIG_HOME:-\\\$HOME/.config}/cinny\"";
+        icon = "${prev.cinny}/assets/favicon-48x48.png";
+        type = "Application";
+        categories = [ "Network" "InstantMessaging" ];
+        terminal = false;
+    };
+}
diff --git a/src/system.nix b/src/system.nix
index 29781ee..ac743fb 100644
--- a/src/system.nix
+++ b/src/system.nix
@@ -10,22 +10,22 @@
 
   # Prepare nix flakes
   nix = {
-    package = pkgs-unstable.nixFlakes;
-    settings = {
-      experimental-features = [ "nix-command" "flakes" ];
-      auto-optimise-store = true;
-      keep-outputs = true;
-      flake-registry = "${registry}/flake-registry.json";
-      extra-sandbox-paths = [ "/homeless-shelter/.ccache" ];
-    };
-    gc.automatic = true;
-    gc.options = "--delete-older-than 7d";
+      package = pkgs-unstable.nixFlakes;
+      settings = {
+          experimental-features = [ "nix-command" "flakes" ];
+          auto-optimise-store = true;
+          keep-outputs = true;
+          flake-registry = "${registry}/flake-registry.json";
+          extra-sandbox-paths = [ "/homeless-shelter/.ccache" ];
+      };
+      gc.automatic = true;
+      gc.options = "--delete-older-than 7d";
   };
 
   programs.ccache = {
-    enable = true;
+      enable = true;
 #    packageNames = [ "nix" ];
-    cacheDir = "/homeless-shelter/.ccache";
+cacheDir = "/homeless-shelter/.ccache";
   };
 
   # Use the systemd-boot EFI boot loader.
@@ -48,70 +48,70 @@
   # Select internationalisation properties.
   i18n.defaultLocale = "en_US.UTF-8";
   console = {
-    font = "Lat2-Terminus16";
-    keyMap = "uk";
+      font = "Lat2-Terminus16";
+      keyMap = "uk";
   };
 
   # Enable the X11 windowing system.
   services.xserver = {
-    enable = true;
-    desktopManager = {
-      xterm.enable = false;
+      enable = true;
+      desktopManager = {
+          xterm.enable = false;
       # xfce.enable = true;
-    };
-    displayManager.startx.enable = true;
-    # displayManager.sddm.enable = true;
   };
+  displayManager.startx.enable = true;
+    # displayManager.sddm.enable = true;
+};
 
-  services.zeronet.enable = true;
-  services.zeronet.package = pkgs.zeronet-conservancy;
+services.zeronet.enable = true;
+services.zeronet.package = pkgs.zeronet-conservancy;
 
-  services.arbtt = {
+services.arbtt = {
     enable = true;
     sampleRate = 30;
-  };
+};
 
-  services = {
+services = {
     syncthing = {
         enable = true;
         user = "minion";
         dataDir = "/home/minion/Documents";    # Default folder for new synced folders
         configDir = "/home/minion/.config/syncthing";   # Folder for Syncthing's settings and keys
     };
-  };
+};
 
   # And wayland
-/*  programs.sway = {
-    enable = true;
-    wrapperFeatures.gtk = true; # so that gtk works properly
-    extraPackages = with pkgs; [
-      swaylock
-      swayidle
-      wl-clipboard
-      mako # notification daemon
-      alacritty # Alacritty is the default terminal in the config
-    ];
+  /*  programs.sway = {
+      enable = true;
+      wrapperFeatures.gtk = true; # so that gtk works properly
+      extraPackages = with pkgs; [
+          swaylock
+          swayidle
+          wl-clipboard
+          mako # notification daemon
+          alacritty # Alacritty is the default terminal in the config
+      ];
   };*/
 
   programs.light.enable = true; # Needs udev rules to properly work
 
   programs.qt5ct = {
-    enable = true;
+      enable = true;
   };
 #  programs.waybar.enable = false; # true;
 
   # Get screensharing to work
   xdg = {
-    portal = {
-      enable = true;
-      wlr.enable = true;
-    };
+      portal = {
+          enable = true;
+          wlr.enable = true;
+      };
   };
 
   systemd.user.services.xdg-desktop-portal = {
-    unitConfig = {
-      After = "graphical-session.target";
-    };
+      unitConfig = {
+          After = "graphical-session.target";
+      };
   };
 
   # Configure keymap in X11
@@ -121,12 +121,12 @@
 
   # Permit and install steam
   nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
-    "steam"
-    "steam-original"
-    "steam-runtime"
-    "mongodb"
-    "nvidia-x11"
-    "nvidia-settings"
+      "steam"
+      "steam-original"
+      "steam-runtime"
+      "mongodb"
+      "nvidia-x11"
+      "nvidia-settings"
   ];
 
   programs.steam.enable = true;
@@ -139,21 +139,21 @@
   sound.enable = true;
   hardware.pulseaudio.enable = false;
   services.pipewire = {
-    enable = true;
-    alsa = {
       enable = true;
-      support32Bit = true;
-    };
-    pulse.enable = true;
-    /*config.pipewire = {
-      "context.modules" = [
-        {
-          name = "libpipewire-module-filter-chain";
-          args = {
-            "node.name"        = "effect_output.virtual-surround-7.1-hesuvi";
-            "node.description" = "Virtual Surround Sink";
-            "media.name"       = "Virtual Surround Sink";
-            nodes = [
+      alsa = {
+          enable = true;
+          support32Bit = true;
+      };
+      pulse.enable = true;
+      /*config.pipewire = {
+          "context.modules" = [
+              {
+                  name = "libpipewire-module-filter-chain";
+                  args = {
+                      "node.name"        = "effect_output.virtual-surround-7.1-hesuvi";
+                      "node.description" = "Virtual Surround Sink";
+                      "media.name"       = "Virtual Surround Sink";
+                      nodes = [
               # duplicate inputs
               { type = "builtin"; label = "copy"; name = "copyFL";  }
               { type = "builtin"; label = "copy"; name = "copyFR";  }
@@ -187,8 +187,8 @@
               # stereo output
               { type = "builtin"; label = "mixer"; name = "mixR"; }
               { type = "builtin"; label = "mixer"; name = "mixL"; }
-            ];
-            links = [
+          ];
+          links = [
               # input
               { output = "copyFL:Out";  input="convFL_L:In";  }
               { output = "copyFL:Out";  input="convFL_R:In";  }
@@ -224,23 +224,23 @@
               { output = "convRR_L:Out";  input="mixL:In 7"; }
               { output = "convLFE_R:Out"; input="mixR:In 8"; }
               { output = "convLFE_L:Out"; input="mixL:In 8"; }
-            ];
-            inputs  = [ "copyFL:In" "copyFR:In" "copyFC:In" "copyLFE:In" "copyRL:In" "copyRR:In" "copySL:In" "copySR:In" ];
-            outputs = [ "mixL:Out" "mixR:Out" ];
-          };
-          "capture.props" = {
-              "media.class"    = "Audio/Sink";
-              "audio.channels" = 8;
-              "audio.position" = [ "FL" "FR" "FC" "LFE" "RL" "RR" "SL" "SR" ];
-          };
-          "playback.props" = {
-              "node.passive"   = true;
-              "audio.channels" = 2;
-              "audio.position" = [ "FL" "FR" ];
-          };
-        }
+          ];
+          inputs  = [ "copyFL:In" "copyFR:In" "copyFC:In" "copyLFE:In" "copyRL:In" "copyRR:In" "copySL:In" "copySR:In" ];
+          outputs = [ "mixL:Out" "mixR:Out" ];
+      };
+      "capture.props" = {
+          "media.class"    = "Audio/Sink";
+          "audio.channels" = 8;
+          "audio.position" = [ "FL" "FR" "FC" "LFE" "RL" "RR" "SL" "SR" ];
+      };
+      "playback.props" = {
+          "node.passive"   = true;
+          "audio.channels" = 2;
+          "audio.position" = [ "FL" "FR" ];
+      };
+  }
       ];
-    };*/
+  };*/
   };
   environment.etc."pipewire/7.1-surround-sound.conf".source = ./pipewire/7.1-surround-sound.conf;
 
@@ -256,102 +256,107 @@
 
   # Define a user account. Don't forget to set a password with ‘passwd’.
   users.users.minion = {
-    isNormalUser = true;
-    extraGroups = [ "wheel" "kvm" "docker" "containerd" "dialout" "libvirtd" "video" ]; # Enable ‘sudo’ for the user.
-    shell = pkgs.zsh;
+      isNormalUser = true;
+      extraGroups = [ "wheel" "kvm" "docker" "containerd" "dialout" "libvirtd" "video" config.users.groups.keys.name ]; # Enable ‘sudo’ for the user.
+      shell = pkgs.zsh;
   };
 
   programs.zsh.enable = true;
 
   environment.variables = {
-    EDITOR = "${pkgs.vim}/bin/vim";
+      EDITOR = "${pkgs.vim}/bin/vim";
   };
   environment.defaultPackages = [
-    pkgs.perl
-    pkgs.rsync
-    pkgs.strace
-    pkgs.vim  # I'm installing vim here even though it isn't normally a default package, as I've removed nano
+      pkgs.perl
+      pkgs.rsync
+      pkgs.strace
+      pkgs.vim  # I'm installing vim here even though it isn't normally a default package, as I've removed nano
   ];  # The basic default packages, although without nano
 
   # List packages installed in system profile. To search, run:
   # $ nix search wget
   environment.systemPackages = with pkgs; [
-    vim  # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
-    ((emacsPackagesFor emacs).emacsWithPackages (epkgs: [
-      epkgs.vterm
-      epkgs.emacsql-sqlite
-    ]))  # Emacs + vterm-module (needed for vterm)
-    wget
-    firefox
-    chromium  # Install chromium if needed
-    texlive.combined.scheme-full
-    keybase-gui
-    bluez
-    macchanger
-    comic-relief
-    qemu_kvm
-    gtk-engine-murrine
-    gtk_engines
-    gsettings-desktop-schemas
-    lxappearance
-    libsForQt5.qt5.qtwayland
-    qt6.qtwayland
-    texworks
-    wlogout
-    wob
-    wlsunset
-    cni-plugins
-    ccache
+      vim  # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
+      ((emacsPackagesFor emacs).emacsWithPackages (epkgs: [
+          epkgs.vterm
+          epkgs.emacsql-sqlite
+      ]))  # Emacs + vterm-module (needed for vterm)
+      wget
+      firefox
+      chromium  # Install chromium if needed
+      texlive.combined.scheme-full
+      keybase-gui
+      bluez
+      macchanger
+      comic-relief
+      qemu_kvm
+      gtk-engine-murrine
+      gtk_engines
+      gsettings-desktop-schemas
+      lxappearance
+      libsForQt5.qt5.qtwayland
+      qt6.qtwayland
+      texworks
+      wlogout
+      wob
+      wlsunset
+      cni-plugins
+      ccache
+      sops
   ];
 
 #  environment.systemPackages = [
 #    import /scripts/jetbrains.rider.nix
 #  ];
 
-  nixpkgs.config.chromium.commandLineArgs = "--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-features=WebUIDarkMode --force-dark-mode --enable-features=WebRTCPipeWireCapturer"; # --enable-gpu";
+nixpkgs.config.chromium.commandLineArgs = "--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-features=WebUIDarkMode --force-dark-mode --enable-features=WebRTCPipeWireCapturer"; # --enable-gpu";
 
 
-  fonts = {
+fonts = {
     fonts = with pkgs; [
-      nerdfonts
-      noto-fonts
-      noto-fonts-cjk
-      noto-fonts-emoji
-      liberation_ttf
-      fira-code
-      fira-code-symbols
-      mplus-outline-fonts.githubRelease
-      dina-font
-      proggyfonts
-      roboto
-      roboto-mono
-      roboto-slab
-      twitter-color-emoji
-      twemoji-color-font
-      ubuntu_font_family
-      powerline-symbols
+        font-awesome
+        line-awesome
+        material-design-icons
+        weather-icons
+        emacs-all-the-icons-fonts
+        powerline-symbols
+        noto-fonts
+        noto-fonts-cjk
+        noto-fonts-emoji
+        liberation_ttf
+        fira-code
+        fira-code-symbols
+        mplus-outline-fonts.githubRelease
+        dina-font
+        proggyfonts
+        roboto
+        roboto-mono
+        roboto-slab
+        twitter-color-emoji
+        twemoji-color-font
+        ubuntu_font_family
     ];
 
     enableDefaultFonts = true;
     fontDir.enable = true;
 
     fontconfig = {
-      defaultFonts = {
-        serif = [ "Roboto Slab" ];
-        sansSerif = [ "Roboto" "Ubuntu" ];
-        monospace = [ "Roboto Mono" "Ubuntu Mono" ];
-        emoji = [ "Twitter Color Emoji" ];
-      };
+        defaultFonts = {
+            serif = [ "Roboto Slab" ];
+            sansSerif = [ "Roboto" "Ubuntu" ];
+            monospace = [ "Roboto Mono" "Ubuntu Mono" ];
+            emoji = [ "Twitter Color Emoji" ];
+        };
     };
-  };
+};
 
   # Some programs need SUID wrappers, can be configured further or are
   # started in user sessions.
   programs.mtr.enable = true;
   programs.kdeconnect.enable = true;
   programs.gnupg.agent = {
-    enable = true;
-    enableSSHSupport = true;
+      enable = true;
+      enableSSHSupport = true;
   };
 
   # List services that you want to enable:
@@ -377,26 +382,26 @@
   virtualisation.kvmgt.enable = true;
 
   services.openvpn.servers = {
-    clicks = { config = '' config /home/minion/Nix/secrets/clicks/client.ovpn ''; autoStart = false; };
+      clicks = { config = '' config /home/minion/Nix/secrets/clicks/client.ovpn ''; autoStart = false; };
   };
 
   environment.etc = {
-    "pam.d/swaylock" = {
-      mode = "0644";
-      text = ''
-        auth include login
-      '';
-    };
+      "pam.d/swaylock" = {
+          mode = "0644";
+          text = ''
+          auth include login
+          '';
+      };
   };
 
   nixpkgs.overlays = [
-    (self: super: {
-       steam = super.steam.override {
-         extraPkgs = pkgs: with pkgs; [
-           cups
-           libxml2
-         ];
-       };
+      (self: super: {
+          steam = super.steam.override {
+              extraPkgs = pkgs: with pkgs; [
+                  cups
+                  libxml2
+              ];
+          };
 #      polkit = super.polkit.overrideAttrs (oldAttrs: {
 #        patches = oldAttrs.patches ++ [
 #          (super.fetchpatch {
@@ -405,23 +410,23 @@
 #          })];
 #      });
     })
-  ] ++ map (f: import f) overlays ++ [
+] ++ map (f: import f) overlays ++ [
     (self: (super: builtins.listToAttrs (
-      map (f: {
-        name = builtins.elemAt (builtins.match "^(.*/)*(.*)\\.nix$" (toString f)) 1;
-        value = super.lib.callPackageWith (self) (import f) {};
-      }) packages
-    )))
-    nurpkgs.overlay
-  ];
+        map (f: {
+            name = builtins.elemAt (builtins.match "^(.*/)*(.*)\\.nix$" (toString f)) 1;
+            value = super.lib.callPackageWith (self) (import f) {};
+        }) packages
+        )))
+        nurpkgs.overlay
+    ];
 
-  xdg.mime.defaultApplications = {
-    "text/html" = "chromium-browser.desktop";
-    "x-scheme-handler/http" = "chromium-browser.desktop";
-    "x-scheme-handler/https" = "chromium-browser.desktop";
-    "x-scheme-handler/about" = "chromium-browser.desktop";
-    "x-scheme-handler/unknown" = "chromium-browser.desktop";
-  };
+    xdg.mime.defaultApplications = {
+        "text/html" = "chromium-browser.desktop";
+        "x-scheme-handler/http" = "chromium-browser.desktop";
+        "x-scheme-handler/https" = "chromium-browser.desktop";
+        "x-scheme-handler/about" = "chromium-browser.desktop";
+        "x-scheme-handler/unknown" = "chromium-browser.desktop";
+    };
 
   # environment.sessionsVariables.DEFAULT_BROWSER = "${pkgs.chromium}/bin/chromium";
 
@@ -436,55 +441,65 @@
   # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
   system.stateVersion = "21.11"; # Did you read the comment?
 
-    boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "sd_mod" ];
+  boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "sd_mod" ];
   boot.initrd.kernelModules = [ ];
   boot.kernelModules = [ "kvm-intel" "usbcore" ];
 #  boot.extraModulePackages = [ config.boot.kernelPackages.exfat-nofuse ];  # Broken in nixpkgs; seems to be mountable and usable anyway
-  boot.extraModprobeConfig = ''
-    options usbcore use_both_schemes=y
-  '';
+boot.extraModprobeConfig = ''
+options usbcore use_both_schemes=y
+'';
 
-  fileSystems."/" =
+fileSystems."/" =
     { device = "/dev/disk/by-label/nixos";
-      fsType = "ext4";
-    };
+    fsType = "ext4";
+};
 
-  fileSystems."/boot" =
+fileSystems."/boot" =
     { device = "/dev/disk/by-label/boot";
-      fsType = "vfat";
-    };
+    fsType = "vfat";
+};
 
-  swapDevices =
+swapDevices =
     [ { device = "/dev/disk/by-label/swap"; }
-    ];
+];
 
-  powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
-  hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
+hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
 
 #  hardware.nvidia.modesetting.enable = true;
 #  services.xserver.videoDrivers = [ "nvidia" ];
 
 #  hardware.opentabletdriver.enable = true;
 
-  virtualisation.containerd.enable = true;
+virtualisation.containerd.enable = true;
 
-  virtualisation.containerd.settings = {
+virtualisation.containerd.settings = {
     version = 2;
 #    grpc = {
 #      uid = 1000;
 #    };
   };
 
+  sops.defaultSopsFile = ../secrets/secrets.json;
+
+  sops.secrets = {
+      collabora-password = {
+          mode = "0400";
+          owner = config.users.users.minion.name;
+          group = config.users.users.nobody.group;
+      };
+  };
+
   networking.hostName = "python";
 
   networking.wireless.iwd.enable = true;
   networking.wireless.iwd.settings = {
-    Settings = {
-      AutoConnect = true;
-      AlwaysRandomizeAddress = true;
-    };
+      Settings = {
+          AutoConnect = true;
+          AlwaysRandomizeAddress = true;
+      };
   };
   networking.search = [
-    "python.local"
+      "python.local"
   ];
 }