about summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.editorconfig4
-rw-r--r--darwinConfigurations/mairon/default.nix10
-rw-r--r--flake.lock111
-rw-r--r--flake.nix22
-rw-r--r--modules/common/common/home-manager.nix5
-rw-r--r--modules/common/common/nix/default.nix1
-rw-r--r--modules/common/emacs/doom/packages.el11
-rw-r--r--modules/common/profiles/headful.nix1
-rw-r--r--modules/common/vscode.nix30
-rw-r--r--modules/darwin/common/nix.nix1
-rw-r--r--modules/darwin/homebrew.nix5
-rw-r--r--modules/nixos/firefox/userContent.css8
-rw-r--r--modules/nixos/games/steam-run.nix4
-rw-r--r--modules/nixos/syncthing.nix120
-rw-r--r--nixosConfigurations/eonwe/default.nix18
15 files changed, 232 insertions, 119 deletions
diff --git a/.editorconfig b/.editorconfig
index 2bdad08..f3067de 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -20,7 +20,3 @@ indent_style = space
 [*.{yaml,yml}]
 indent_size = 2
 indent_style = space
-
-[*.el]
-indent_size = 2
-indent_style = space
diff --git a/darwinConfigurations/mairon/default.nix b/darwinConfigurations/mairon/default.nix
index 451a8a9..6f129ac 100644
--- a/darwinConfigurations/mairon/default.nix
+++ b/darwinConfigurations/mairon/default.nix
@@ -14,6 +14,16 @@ with lib; {
     extraConfig."url \"git@gitlab.services.work.com:\"".insteadOf = "work:";
   };
 
+  homebrew.casks = [
+    {name = "burp-suite";}
+    {name = "docker";}
+    {name = "obs";}
+    {name = "openlens";}
+    {name = "postman";}
+    {name = "wireshark";}
+    {name = "xcodes";}
+  ];
+
   networking = {
     computerName = mkForce this.hostname;
     hostName = mkForce null; # We don't want to override this.
diff --git a/flake.lock b/flake.lock
index 9758c4b..74a75ec 100644
--- a/flake.lock
+++ b/flake.lock
@@ -122,11 +122,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1684343812,
-        "narHash": "sha256-ZTEjiC8PDKeP8JRchuwcFXUNlMcyQ4U+DpyVZ3pB6Q4=",
+        "lastModified": 1685559570,
+        "narHash": "sha256-MNIQvLRoq92isMLR/ordKNCl+aXNiuwBM4QyqmS8d00=",
         "owner": "LnL7",
         "repo": "nix-darwin",
-        "rev": "dfbdabbb3e797334172094d4f6c0ffca8c791281",
+        "rev": "4338bc869e9874d54a4c89539af72f16666b2abe",
         "type": "github"
       },
       "original": {
@@ -177,6 +177,22 @@
         "type": "github"
       }
     },
+    "flake-compat_2": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1673956053,
+        "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
+        "type": "github"
+      },
+      "original": {
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "type": "github"
+      }
+    },
     "flake-registry": {
       "flake": false,
       "locked": {
@@ -199,11 +215,11 @@
         "systems": "systems"
       },
       "locked": {
-        "lastModified": 1681202837,
-        "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
+        "lastModified": 1685518550,
+        "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
         "owner": "numtide",
         "repo": "flake-utils",
-        "rev": "cfacdce06f30d2b68473a46042957675eebb3401",
+        "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
         "type": "github"
       },
       "original": {
@@ -262,11 +278,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1684596126,
-        "narHash": "sha256-4RZZmygeEXpuBqEXGs38ZAcWjWKGwu13Iqbxub6wuJk=",
+        "lastModified": 1685553090,
+        "narHash": "sha256-DsAYE1AaR4NcZeeotEIE1XlNVXAv8NxUVDxOb7t4wxU=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "27ef11f0218d9018ebb2948d40133df2b1de622d",
+        "rev": "f1490b8caf2ef6f59205c78cf1a8b68e776214a3",
         "type": "github"
       },
       "original": {
@@ -310,6 +326,7 @@
     },
     "nix-minecraft": {
       "inputs": {
+        "flake-compat": "flake-compat_2",
         "flake-utils": [
           "flake-utils"
         ],
@@ -318,11 +335,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1684287466,
-        "narHash": "sha256-Qo+tBZLEZZkQYZsbhOUswH5DsB23nDk/LCkzO5n3yoo=",
+        "lastModified": 1685558819,
+        "narHash": "sha256-nsYS9q60awOMAoMzpP88PlPdQfcfvn2XzT6+fA9M1s8=",
         "owner": "Infinidoge",
         "repo": "nix-minecraft",
-        "rev": "5f4e13776ee0899b0aee4b253a8b733d899746a2",
+        "rev": "7adce0d27556e869ab6d5c7ab08b382175a70011",
         "type": "github"
       },
       "original": {
@@ -332,13 +349,40 @@
         "type": "github"
       }
     },
+    "nix-vscode-extensions": {
+      "inputs": {
+        "flake-compat": [
+          "flake-compat"
+        ],
+        "flake-utils": [
+          "flake-utils"
+        ],
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1685496289,
+        "narHash": "sha256-WKMrM2YcyyMMT62lCWOVKD/B+xsL3aCnKBrGfJ04jW4=",
+        "owner": "nix-community",
+        "repo": "nix-vscode-extensions",
+        "rev": "bef8f6e461c92e2141b14a83bc1c479dd8e6ca6a",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "ref": "master",
+        "repo": "nix-vscode-extensions",
+        "type": "github"
+      }
+    },
     "nixos-hardware": {
       "locked": {
-        "lastModified": 1684169666,
-        "narHash": "sha256-N5jrykeSxLVgvm3Dd3hZ38/XwM/jU+dltqlXgrGlYxk=",
+        "lastModified": 1684899633,
+        "narHash": "sha256-NtwerXX8UFsoNy6k+DukJMriWtEjQtMU/Urbff2O2Dg=",
         "owner": "NixOS",
         "repo": "nixos-hardware",
-        "rev": "71ce85372a614d418d5e303dd5702a79d1545c04",
+        "rev": "4cc688ee711159b9bcb5a367be44007934e1a49d",
         "type": "github"
       },
       "original": {
@@ -350,11 +394,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1684585791,
-        "narHash": "sha256-lYPboblKrchmbkGMoAcAivomiOscZCjtGxxTSCY51SM=",
+        "lastModified": 1685498995,
+        "narHash": "sha256-rdyjnkq87tJp+T2Bm1OD/9NXKSsh/vLlPeqCc/mm7qs=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "eea79d584eff53bf7a76aeb63f8845da6d386129",
+        "rev": "9cfaa8a1a00830d17487cb60a19bb86f96f09b27",
         "type": "github"
       },
       "original": {
@@ -366,11 +410,11 @@
     },
     "nixpkgs-master": {
       "locked": {
-        "lastModified": 1684612454,
-        "narHash": "sha256-15vluZKXxC76FqAryST1QrUVE7Xlwkrs7lrPTQGYIz0=",
+        "lastModified": 1685569895,
+        "narHash": "sha256-23DqNgDHL0+V4hVtu+/wbM1c9RaZ7JSZGdhGS1Avz24=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "8bf3e834daedadc6d0f4172616b2bdede1109c48",
+        "rev": "4c042866938cfef3dfb2b58e21319874cdeb8f4d",
         "type": "github"
       },
       "original": {
@@ -382,11 +426,11 @@
     },
     "nixpkgs-stable": {
       "locked": {
-        "lastModified": 1684611397,
-        "narHash": "sha256-A65pyWfriRMqsjHlc9F19RKkMgY/EJqr7cBTcgxUo6Y=",
+        "lastModified": 1685561320,
+        "narHash": "sha256-3JZT3wNmO2ki7Fqw2YV7RE9j3WsVZRVPIPRyvenpQ+U=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "e31e2ce559a628995f6f564a80a2074b7f5dcd25",
+        "rev": "a649c8fcce9950e11891c4d0b06f3e1d7704be9a",
         "type": "github"
       },
       "original": {
@@ -432,11 +476,11 @@
     },
     "nur": {
       "locked": {
-        "lastModified": 1684612984,
-        "narHash": "sha256-XqWVrtHiY7r/NJMDS02i1kj3Q7BOU7BnfQfEd6v3ZIE=",
+        "lastModified": 1685562312,
+        "narHash": "sha256-eDq0kGiq01RfywqOYrquwUbvqRhICfNIhgtLkJXf8do=",
         "owner": "nix-community",
         "repo": "NUR",
-        "rev": "3c932dd06b0a537b890e1fd3e31deceb1ac3dea3",
+        "rev": "0816fd8a19c336be3104500fd3ca59e9464d5a39",
         "type": "github"
       },
       "original": {
@@ -488,11 +532,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1684195081,
-        "narHash": "sha256-IKnQUSBhQTChFERxW2AzuauVpY1HRgeVzAjNMAA4B6I=",
+        "lastModified": 1685361114,
+        "narHash": "sha256-4RjrlSb+OO+e1nzTExKW58o3WRwVGpXwj97iCta8aj4=",
         "owner": "cachix",
         "repo": "pre-commit-hooks.nix",
-        "rev": "96eabec58248ed8f4b0ad59e7ce9398018684fdc",
+        "rev": "ca2fdbf3edda2a38140184da6381d49f8206eaf4",
         "type": "github"
       },
       "original": {
@@ -516,6 +560,7 @@
         "home-manager": "home-manager_2",
         "impermanence": "impermanence",
         "nix-minecraft": "nix-minecraft",
+        "nix-vscode-extensions": "nix-vscode-extensions",
         "nixos-hardware": "nixos-hardware",
         "nixpkgs": "nixpkgs",
         "nixpkgs-master": "nixpkgs-master",
@@ -546,11 +591,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1684048308,
-        "narHash": "sha256-JcQe0Zmov/32L+GQ+O+H8Qoll+jjvkcrd8/TNtE6TBY=",
+        "lastModified": 1684964237,
+        "narHash": "sha256-dDS+GhdZN2MAa2FJKFGM2gpgAXhx+xoMkpVsRx9qpDE=",
         "owner": "simple-nixos-mailserver",
         "repo": "nixos-mailserver",
-        "rev": "c04e4f22da48319d15593a2c942431744c12f27c",
+        "rev": "1bcfcf786bc289ca1bd2c9d29d6f02d9141b1da3",
         "type": "gitlab"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index a58fed6..170377e 100644
--- a/flake.nix
+++ b/flake.nix
@@ -74,6 +74,18 @@
       ref = "master";
     };
 
+    nix-vscode-extensions = {
+      type = "github";
+      owner = "nix-community";
+      repo = "nix-vscode-extensions";
+      ref = "master";
+      inputs = {
+        flake-compat.follows = "flake-compat";
+        flake-utils.follows = "flake-utils";
+        nixpkgs.follows = "nixpkgs";
+      };
+    };
+
     arkenfox-nixos = {
       type = "github";
       owner = "dwarfmaster";
@@ -87,6 +99,7 @@
       };
     };
 
+    # TODO Check out https://github.com/nix-community/mineflake
     nix-minecraft = {
       type = "github";
       owner = "Infinidoge";
@@ -286,10 +299,17 @@
             promtool = {
               enable = true;
               name = "promtool";
-              description = "Check Prometheus rules.";
+              description = "Check Prometheus rules";
               entry = "${pkgs.prometheus.cli}/bin/promtool check rules";
               files = "(?x)^(modules/nixos/monitoring/rules/.*\.yaml)$";
             };
+            nixpkgs-lint = {
+              enable = true;
+              name = "nixpkgs-lint";
+              description = "Semantic linter for Nixpkgs using tree-sitter";
+              entry = "${pkgs.nixpkgs-lint}/bin/nixpkgs-lint";
+              files = "(?x)^(packages/.*\.nix)$";
+            };
           };
           settings.deadnix.edit = true;
         };
diff --git a/modules/common/common/home-manager.nix b/modules/common/common/home-manager.nix
index b28260a..240cd93 100644
--- a/modules/common/common/home-manager.nix
+++ b/modules/common/common/home-manager.nix
@@ -1,5 +1,4 @@
 {
-  inputs,
   lib,
   localUsername ? lib.my.username,
   ...
@@ -11,8 +10,8 @@ with lib; {
 
   hm = {
     news.display = "silent";
-    home.stateVersion = with builtins;
-      head (split "\n" (readFile "${inputs.nixpkgs}/.version"));
+    # FIXME This is temporary until home-manager expands the option enum.
+    home.stateVersion = "23.05";
   };
 
   home-manager = {
diff --git a/modules/common/common/nix/default.nix b/modules/common/common/nix/default.nix
index 0c49034..fa1c85e 100644
--- a/modules/common/common/nix/default.nix
+++ b/modules/common/common/nix/default.nix
@@ -141,6 +141,7 @@ with lib; {
         tor-browser = tor-browser-bundle-bin;
       }))
     agenix.overlays.default
+    nix-vscode-extensions.overlays.default
     nur.overlay
   ];
 
diff --git a/modules/common/emacs/doom/packages.el b/modules/common/emacs/doom/packages.el
index a8e52eb..99ead41 100644
--- a/modules/common/emacs/doom/packages.el
+++ b/modules/common/emacs/doom/packages.el
@@ -1,5 +1,11 @@
 (disable-packages! writegood-mode)
 
+(unpin! evil-collection)
+(package! evil-collection
+  :recipe (:repo "kepi/evil-collection"
+           :branch "mu4e-development"))
+
+(unpin! org-roam)
 (package! org-roam
   :recipe (:host github
            :repo "org-roam/org-roam"
@@ -9,11 +15,6 @@
            :repo "org-roam/org-roam-ui"
            :branch "main"))
 
-(package! tree-sitter
-  :recipe (:host github
-           :repo "azahi/elisp-tree-sitter"
-           :branch "master"))
-
 (package! hledger-mode)
 
 (package! kubernetes)
diff --git a/modules/common/profiles/headful.nix b/modules/common/profiles/headful.nix
index f51ecc8..6ec092d 100644
--- a/modules/common/profiles/headful.nix
+++ b/modules/common/profiles/headful.nix
@@ -32,6 +32,7 @@ in {
         '';
 
         packages = with pkgs; [
+          comma
           fd
           ripgrep
           ripgrep-all
diff --git a/modules/common/vscode.nix b/modules/common/vscode.nix
index 2d34788..ee3e18c 100644
--- a/modules/common/vscode.nix
+++ b/modules/common/vscode.nix
@@ -32,16 +32,38 @@ in {
 
       inherit (cfg) package;
 
-      extensions = with pkgs;
-      with vscode-extensions;
+      extensions = with pkgs.open-vsx;
         [
+          arrterian.nix-env-selector
           editorconfig.editorconfig
-          file-icons.file-icons
+          efoerster.texlab
+          github.vscode-pull-request-github
           gitlab.gitlab-workflow
+          golang.go
+          graphql.vscode-graphql
+          hashicorp.hcl
+          hashicorp.terraform
+          haskell.haskell
+          jnoortheen.nix-ide
+          kahole.magit
+          mads-hartmann.bash-ide-vscode
+          mkhl.direnv
           ms-kubernetes-tools.vscode-kubernetes-tools
+          ms-python.python
+          ms-vscode.cmake-tools
+          pinage404.nix-extension-pack
+          redhat.ansible
+          redhat.java
           redhat.vscode-xml
           redhat.vscode-yaml
+          rust-lang.rust
           streetsidesoftware.code-spell-checker
+          streetsidesoftware.code-spell-checker-british-english
+          streetsidesoftware.code-spell-checker-russian
+          streetsidesoftware.code-spell-checker-scientific-terms
+          sumneko.lua
+          vscode-org-mode.org-mode
+          ziglang.vscode-zig
         ]
         ++ optional cfg.vim.enable vscodevim.vim;
 
@@ -141,6 +163,8 @@ in {
 
           useSystemClipboard = true;
         };
+
+        redhat.telemetry.enabled = false;
       };
     };
   };
diff --git a/modules/darwin/common/nix.nix b/modules/darwin/common/nix.nix
index b291d11..08379f8 100644
--- a/modules/darwin/common/nix.nix
+++ b/modules/darwin/common/nix.nix
@@ -39,5 +39,6 @@ with lib; {
 
   services.nix-daemon.enable = true;
 
+  # https://github.com/LnL7/nix-darwin/blob/master/CHANGELOG
   system.stateVersion = 4;
 }
diff --git a/modules/darwin/homebrew.nix b/modules/darwin/homebrew.nix
index 990afae..f0bec9b 100644
--- a/modules/darwin/homebrew.nix
+++ b/modules/darwin/homebrew.nix
@@ -16,6 +16,11 @@ in {
     homebrew = {
       enable = true;
       taps = [];
+      onActivation = {
+        autoUpdate = true;
+        cleanup = "zap";
+        upgrade = true;
+      };
     };
   };
 }
diff --git a/modules/nixos/firefox/userContent.css b/modules/nixos/firefox/userContent.css
index 2b515e3..a55d78f 100644
--- a/modules/nixos/firefox/userContent.css
+++ b/modules/nixos/firefox/userContent.css
@@ -330,3 +330,11 @@
         background: inherit !important;
     }
 }
+
+@-moz-document regexp("https?://protondb\.com/app/.*")
+{
+    /* SteamDeck reports. */
+    div[class*="GameReports__Container"]:nth-child(8) {
+        display: none !important;
+    }
+}
diff --git a/modules/nixos/games/steam-run.nix b/modules/nixos/games/steam-run.nix
index ba18849..37a20e0 100644
--- a/modules/nixos/games/steam-run.nix
+++ b/modules/nixos/games/steam-run.nix
@@ -11,7 +11,6 @@ in {
     enable = mkEnableOption "native Steam runtime";
 
     quirks = {
-      crusaderKings3 = mkEnableOption ''fixes for "Crusader Kings III" issues'';
       cryptOfTheNecrodancer = mkEnableOption ''fixes for "Crypt of the NecroDancer" issues'';
       mountAndBladeWarband = mkEnableOption ''fixes for "Mount & Blade: Warband" issues'';
     };
@@ -32,9 +31,6 @@ in {
         extraLibraries = _:
           with cfg.quirks;
             []
-            ++ optionals crusaderKings3 [
-              ncurses
-            ]
             ++ optionals cryptOfTheNecrodancer [
               (import (builtins.fetchTarball {
                 url = "https://github.com/NixOS/nixpkgs/archive/d1c3fea7ecbed758168787fe4e4a3157e52bc808.tar.gz";
diff --git a/modules/nixos/syncthing.nix b/modules/nixos/syncthing.nix
index faf6723..24bfbb6 100644
--- a/modules/nixos/syncthing.nix
+++ b/modules/nixos/syncthing.nix
@@ -50,73 +50,68 @@ in {
         overrideDevices = true;
         overrideFolders = true;
 
-        settings = {
-          devices = mapAttrs (name: attr:
-            mkIf (attr.syncthing.id != null && hasAttr "wireguard" attr) {
-              inherit (attr.syncthing) id;
-              addresses = ["tcp://${name}.${config.networking.domain}:22000"];
-              introducer = this.isHeadless;
-            })
-          my.configurations;
+        devices = mapAttrs (name: attr:
+          mkIf (attr.syncthing.id != null && hasAttr "wireguard" attr) {
+            inherit (attr.syncthing) id;
+            addresses = ["tcp://${name}.${config.networking.domain}:22000"];
+            introducer = this.isHeadless;
+          })
+        my.configurations;
 
-          folders = let
-            filterDevices = f:
-              attrNames (filterAttrs (_: attr:
-                (attr.hostname != this.hostname)
-                && (attr.syncthing.id != null)
-                && f attr)
-              my.configurations);
-            all = filterDevices (_: true);
-            notHeadless = filterDevices (attr: !attr.isHeadless);
-            notOther = filterDevices (attr: !attr.isOther);
+        folders = let
+          filterDevices = f:
+            attrNames (filterAttrs (_: attr:
+              (attr.hostname != this.hostname)
+              && (attr.syncthing.id != null)
+              && f attr)
+            my.configurations);
+          all = filterDevices (_: true);
+          notHeadless = filterDevices (attr: !attr.isHeadless);
+          notOther = filterDevices (attr: !attr.isOther);
 
-            simple = {
-              type = "simple";
-              params.keep = "5";
+          simple = {
+            type = "simple";
+            params.keep = "5";
+          };
+          trashcan = {
+            type = "trashcan";
+            params.cleanoutDays = "7";
+          };
+        in
+          with config.hm.xdg.userDirs; {
+            share = {
+              path = publicShare;
+              devices = notHeadless;
+              versioning = trashcan;
             };
-            trashcan = {
-              type = "trashcan";
-              params.cleanoutDays = "7";
+            pass = {
+              path = config.hm.programs.password-store.settings.PASSWORD_STORE_DIR;
+              devices = notOther;
+              versioning = trashcan;
             };
-          in
-            with config.hm.xdg.userDirs; {
-              share = {
-                path = publicShare;
-                devices = notHeadless;
-                versioning = trashcan;
-              };
-              pass = {
-                path = config.hm.programs.password-store.settings.PASSWORD_STORE_DIR;
-                devices = notOther;
-                versioning = trashcan;
-              };
-              org = {
-                path = "${documents}/org";
-                devices = all;
-                versioning = simple;
-              };
-              roam = {
-                path = "${documents}/roam";
-                devices = notOther;
-                versioning = simple;
-              };
-              elfeed = {
-                path = "${config.my.home}/.elfeed";
-                devices = notOther;
-                versioning = trashcan;
-              };
-              books = {
-                path = "${documents}/books";
-                devices = notOther;
-                versioning = trashcan;
-              };
+            org = {
+              path = "${documents}/org";
+              devices = all;
+              versioning = simple;
+            };
+            roam = {
+              path = "${documents}/roam";
+              devices = notOther;
+              versioning = simple;
+            };
+            elfeed = {
+              path = "${config.my.home}/.elfeed";
+              devices = notOther;
+              versioning = trashcan;
+            };
+            books = {
+              path = "${documents}/books";
+              devices = notOther;
+              versioning = trashcan;
             };
-
-          gui = {
-            insecureAdminAccess = true;
-            insecureSkipHostcheck = this.isHeadless;
           };
 
+        extraOptions = {
           options = {
             testOption = false;
             autoUpgradeIntervalH = 0;
@@ -128,6 +123,11 @@ in {
             stunKeepaliveStartS = 0;
             urAccepted = -1;
           };
+
+          gui = {
+            insecureAdminAccess = true;
+            insecureSkipHostcheck = this.isHeadless;
+          };
         };
       };
 
diff --git a/nixosConfigurations/eonwe/default.nix b/nixosConfigurations/eonwe/default.nix
index 1545925..b66aec2 100644
--- a/nixosConfigurations/eonwe/default.nix
+++ b/nixosConfigurations/eonwe/default.nix
@@ -18,7 +18,6 @@ with lib; {
       lutris.enable = true;
       minecraft.client.enable = true;
       steam.enable = true;
-      steam-run.quirks.crusaderKings3 = true;
     };
     android.enable = true;
     bluetooth.enable = true;
@@ -28,6 +27,8 @@ with lib; {
     mpd.enable = true;
     ipfs.enable = true;
 
+    vscode.enable = true;
+
     common.nix.allowedUnfreePackages = ["burpsuite"];
   };
 
@@ -41,6 +42,7 @@ with lib; {
       openttd
       radeontop
       vcmi
+      vial
       whatweb
     ];
 
@@ -63,13 +65,17 @@ with lib; {
     services.mpd.musicDirectory = mkForce "/mnt/udata/music";
   };
 
-  services.smartd = {
-    enable = true;
-    notifications.mail = {
+  services = {
+    smartd = {
       enable = true;
-      sender = "admin+smartd@${my.domain.shire}";
-      recipient = "admin+smartd@${my.domain.shire}";
+      notifications.mail = {
+        enable = true;
+        sender = "admin+smartd@${my.domain.shire}";
+        recipient = "admin+smartd@${my.domain.shire}";
+      };
     };
+
+    udev.packages = with pkgs; [vial];
   };
 
   # Usually stuff that is going to be compiled on this machine is going to have

Consider giving Nix/NixOS a try! <3