From 8a5be644b89584477de559bb2ca0f72a7a6d5a4c Mon Sep 17 00:00:00 2001
From: liv <shadows@with.al>
Date: Tue, 29 Oct 2024 15:37:30 +0100
Subject: [PATCH] treewide: slim down and reorganize config

---
 flake.lock                                  | 277 +-------------------
 flake.nix                                   |   7 +-
 home/enoko.nix                              |  16 +-
 home/features/cli/default.nix               |   4 +-
 home/features/cli/fish.nix                  |   5 +-
 home/features/desktop/default.nix           |  11 +-
 home/features/desktop/games/default.nix     |   2 +
 home/features/desktop/hyprland/default.nix  | 183 -------------
 home/features/desktop/hyprland/swayidle.nix |  18 --
 home/features/desktop/hyprland/swaylock.nix |   7 -
 home/features/desktop/wlr/default.nix       |  19 --
 home/features/desktop/wlr/mako.nix          |  13 -
 home/features/desktop/wlr/waybar.nix        | 108 --------
 home/features/desktop/wlr/wofi.nix          |  25 --
 home/features/devel/base.nix                |  16 ++
 home/features/devel/clojure.nix             |   1 -
 home/features/devel/dbs.nix                 |   6 +
 home/features/devel/default.nix             |  45 +---
 home/features/devel/elixir.nix              |   6 +
 home/features/devel/haskell.nix             |   6 +
 home/features/devel/java.nix                |  14 +
 home/features/devel/js.nix                  |   6 +
 home/features/devel/langs.nix               |   1 -
 home/features/devel/python.nix              |  14 +
 home/features/devel/rust.nix                |   8 +
 home/global.linux.nix                       |   4 -
 home/global.nix                             |  39 +--
 home/koishi.nix                             |   1 -
 home/yukari.nix                             |  13 +-
 nixos/common/default.nix                    |   1 -
 nixos/desktop/default.nix                   |   2 +-
 nixos/desktop/hyprland.nix                  |   4 -
 nixos/yukari/configuration.nix              |   4 +-
 33 files changed, 131 insertions(+), 755 deletions(-)
 delete mode 100644 home/features/desktop/hyprland/default.nix
 delete mode 100644 home/features/desktop/hyprland/swayidle.nix
 delete mode 100644 home/features/desktop/hyprland/swaylock.nix
 delete mode 100644 home/features/desktop/wlr/default.nix
 delete mode 100644 home/features/desktop/wlr/mako.nix
 delete mode 100644 home/features/desktop/wlr/waybar.nix
 delete mode 100644 home/features/desktop/wlr/wofi.nix
 create mode 100644 home/features/devel/base.nix
 delete mode 100644 home/features/devel/clojure.nix
 create mode 100644 home/features/devel/dbs.nix
 create mode 100644 home/features/devel/elixir.nix
 create mode 100644 home/features/devel/haskell.nix
 create mode 100644 home/features/devel/java.nix
 create mode 100644 home/features/devel/js.nix
 delete mode 100644 home/features/devel/langs.nix
 create mode 100644 home/features/devel/python.nix
 create mode 100644 home/features/devel/rust.nix
 delete mode 100644 home/global.linux.nix
 delete mode 100644 home/koishi.nix
 delete mode 100644 nixos/desktop/hyprland.nix

diff --git a/flake.lock b/flake.lock
index ca4dc70..a15059b 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,161 +1,5 @@
 {
   "nodes": {
-    "base16": {
-      "inputs": {
-        "fromYaml": "fromYaml"
-      },
-      "locked": {
-        "lastModified": 1708890466,
-        "narHash": "sha256-LlrC09LoPi8OPYOGPXegD72v+//VapgAqhbOFS3i8sc=",
-        "owner": "SenchoPens",
-        "repo": "base16.nix",
-        "rev": "665b3c6748534eb766c777298721cece9453fdae",
-        "type": "github"
-      },
-      "original": {
-        "owner": "SenchoPens",
-        "repo": "base16.nix",
-        "type": "github"
-      }
-    },
-    "base16-fish": {
-      "flake": false,
-      "locked": {
-        "lastModified": 1622559957,
-        "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=",
-        "owner": "tomyun",
-        "repo": "base16-fish",
-        "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe",
-        "type": "github"
-      },
-      "original": {
-        "owner": "tomyun",
-        "repo": "base16-fish",
-        "type": "github"
-      }
-    },
-    "base16-helix": {
-      "flake": false,
-      "locked": {
-        "lastModified": 1725860795,
-        "narHash": "sha256-Z2o8VBPW3I+KKTSfe25kskz0EUj7MpUh8u355Z1nVsU=",
-        "owner": "tinted-theming",
-        "repo": "base16-helix",
-        "rev": "7f795bf75d38e0eea9fed287264067ca187b88a9",
-        "type": "github"
-      },
-      "original": {
-        "owner": "tinted-theming",
-        "repo": "base16-helix",
-        "type": "github"
-      }
-    },
-    "base16-vim": {
-      "flake": false,
-      "locked": {
-        "lastModified": 1716150083,
-        "narHash": "sha256-ZMhnNmw34ogE5rJZrjRv5MtG3WaqKd60ds2VXvT6hEc=",
-        "owner": "tinted-theming",
-        "repo": "base16-vim",
-        "rev": "6e955d704d046b0dc3e5c2d68a2a6eeffd2b5d3d",
-        "type": "github"
-      },
-      "original": {
-        "owner": "tinted-theming",
-        "repo": "base16-vim",
-        "type": "github"
-      }
-    },
-    "darwin": {
-      "inputs": {
-        "nixpkgs": [
-          "nixpkgs"
-        ]
-      },
-      "locked": {
-        "lastModified": 1729982130,
-        "narHash": "sha256-HmLLQbX07rYD0RXPxbf3kJtUo66XvEIX9Y+N5QHQ9aY=",
-        "owner": "lnl7",
-        "repo": "nix-darwin",
-        "rev": "2eb472230a5400c81d9008014888b4bff23bcf44",
-        "type": "github"
-      },
-      "original": {
-        "owner": "lnl7",
-        "repo": "nix-darwin",
-        "type": "github"
-      }
-    },
-    "flake-compat": {
-      "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-utils": {
-      "inputs": {
-        "systems": [
-          "stylix",
-          "systems"
-        ]
-      },
-      "locked": {
-        "lastModified": 1710146030,
-        "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
-        "owner": "numtide",
-        "repo": "flake-utils",
-        "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
-        "type": "github"
-      },
-      "original": {
-        "owner": "numtide",
-        "repo": "flake-utils",
-        "type": "github"
-      }
-    },
-    "fromYaml": {
-      "flake": false,
-      "locked": {
-        "lastModified": 1689549921,
-        "narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=",
-        "owner": "SenchoPens",
-        "repo": "fromYaml",
-        "rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84",
-        "type": "github"
-      },
-      "original": {
-        "owner": "SenchoPens",
-        "repo": "fromYaml",
-        "type": "github"
-      }
-    },
-    "gnome-shell": {
-      "flake": false,
-      "locked": {
-        "lastModified": 1713702291,
-        "narHash": "sha256-zYP1ehjtcV8fo+c+JFfkAqktZ384Y+y779fzmR9lQAU=",
-        "owner": "GNOME",
-        "repo": "gnome-shell",
-        "rev": "0d0aadf013f78a7f7f1dc984d0d812971864b934",
-        "type": "github"
-      },
-      "original": {
-        "owner": "GNOME",
-        "ref": "46.1",
-        "repo": "gnome-shell",
-        "type": "github"
-      }
-    },
     "home-manager": {
       "inputs": {
         "nixpkgs": [
@@ -177,27 +21,6 @@
         "type": "github"
       }
     },
-    "home-manager_2": {
-      "inputs": {
-        "nixpkgs": [
-          "stylix",
-          "nixpkgs"
-        ]
-      },
-      "locked": {
-        "lastModified": 1724435763,
-        "narHash": "sha256-UNky3lJNGQtUEXT2OY8gMxejakSWPTfWKvpFkpFlAfM=",
-        "owner": "nix-community",
-        "repo": "home-manager",
-        "rev": "c2cd2a52e02f1dfa1c88f95abeb89298d46023be",
-        "type": "github"
-      },
-      "original": {
-        "owner": "nix-community",
-        "repo": "home-manager",
-        "type": "github"
-      }
-    },
     "nix-index-database": {
       "inputs": {
         "nixpkgs": [
@@ -268,109 +91,11 @@
     },
     "root": {
       "inputs": {
-        "darwin": "darwin",
         "home-manager": "home-manager",
         "nix-index-database": "nix-index-database",
         "nixos-hardware": "nixos-hardware",
         "nixpkgs": "nixpkgs",
-        "nixpkgs-stable": "nixpkgs-stable",
-        "stylix": "stylix"
-      }
-    },
-    "stylix": {
-      "inputs": {
-        "base16": "base16",
-        "base16-fish": "base16-fish",
-        "base16-helix": "base16-helix",
-        "base16-vim": "base16-vim",
-        "flake-compat": "flake-compat",
-        "flake-utils": "flake-utils",
-        "gnome-shell": "gnome-shell",
-        "home-manager": "home-manager_2",
-        "nixpkgs": [
-          "nixpkgs"
-        ],
-        "systems": "systems",
-        "tinted-foot": "tinted-foot",
-        "tinted-kitty": "tinted-kitty",
-        "tinted-tmux": "tinted-tmux"
-      },
-      "locked": {
-        "lastModified": 1729963473,
-        "narHash": "sha256-uGjTjvvlGQfQ0yypVP+at0NizI2nrb6kz4wGAqzRGbY=",
-        "owner": "danth",
-        "repo": "stylix",
-        "rev": "04afcfc0684d9bbb24bb1dc77afda7c1843ec93b",
-        "type": "github"
-      },
-      "original": {
-        "owner": "danth",
-        "repo": "stylix",
-        "type": "github"
-      }
-    },
-    "systems": {
-      "locked": {
-        "lastModified": 1681028828,
-        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
-        "owner": "nix-systems",
-        "repo": "default",
-        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
-        "type": "github"
-      },
-      "original": {
-        "owner": "nix-systems",
-        "repo": "default",
-        "type": "github"
-      }
-    },
-    "tinted-foot": {
-      "flake": false,
-      "locked": {
-        "lastModified": 1696725948,
-        "narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=",
-        "owner": "tinted-theming",
-        "repo": "tinted-foot",
-        "rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce",
-        "type": "github"
-      },
-      "original": {
-        "owner": "tinted-theming",
-        "repo": "tinted-foot",
-        "type": "github"
-      }
-    },
-    "tinted-kitty": {
-      "flake": false,
-      "locked": {
-        "lastModified": 1716423189,
-        "narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=",
-        "owner": "tinted-theming",
-        "repo": "tinted-kitty",
-        "rev": "eb39e141db14baef052893285df9f266df041ff8",
-        "type": "github"
-      },
-      "original": {
-        "owner": "tinted-theming",
-        "repo": "tinted-kitty",
-        "rev": "eb39e141db14baef052893285df9f266df041ff8",
-        "type": "github"
-      }
-    },
-    "tinted-tmux": {
-      "flake": false,
-      "locked": {
-        "lastModified": 1696725902,
-        "narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=",
-        "owner": "tinted-theming",
-        "repo": "tinted-tmux",
-        "rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7",
-        "type": "github"
-      },
-      "original": {
-        "owner": "tinted-theming",
-        "repo": "tinted-tmux",
-        "type": "github"
+        "nixpkgs-stable": "nixpkgs-stable"
       }
     }
   },
diff --git a/flake.nix b/flake.nix
index 666dee6..77747be 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,6 +1,5 @@
 {
-  description =
-    "Mine very own Nix(OS) / home-manager / nix-darwin configuration";
+  description = "Mine very own Nix(OS) / home-manager configuration";
 
   inputs = {
     # Nixpkgs
@@ -15,10 +14,6 @@
     nix-index-database.url = "github:nix-community/nix-index-database";
     nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
 
-    # stylix
-    stylix.url = "github:danth/stylix";
-    stylix.inputs.nixpkgs.follows = "nixpkgs";
-
     # nix-hardware
     nixos-hardware.url = "github:NixOS/nixos-hardware/master";
   };
diff --git a/home/enoko.nix b/home/enoko.nix
index 0ce4ad9..9a8bc1b 100644
--- a/home/enoko.nix
+++ b/home/enoko.nix
@@ -1,6 +1,14 @@
 # enoko is my framework 13-inch AMD laptop, running nixos
 { pkgs, ... }: {
-  imports = [ ./global.nix ./global.linux.nix ./features/desktop ];
+  imports = [
+    ./global.nix
+    ./global.linux.nix
+    ./features/desktop
+    ./features/devel/js.nix
+    ./features/devel/java.nix
+    ./features/devel/rust.nix
+    ./features/devel/dbs.nix
+  ];
 
   config.monitors = [{
     name = "eDP-1";
@@ -13,10 +21,4 @@
   }];
 
   config.home.packages = with pkgs; [ easyroam-connect-desktop ];
-
-  # Fix HiDPI scaling
-  # config.wayland.windowManager.hyprland = {
-  #   settings.xwayland.force_zero_scaling = true;
-  #   settings.env = "GDK_SCALE,2";
-  # };
 }
diff --git a/home/features/cli/default.nix b/home/features/cli/default.nix
index 5221c0b..4d3d574 100644
--- a/home/features/cli/default.nix
+++ b/home/features/cli/default.nix
@@ -9,8 +9,10 @@
 
   # stuff that doesn't fit into any other files
   home.packages = with pkgs; [
-    comma # nix-shell a package by prefixing it with `,`
     ripgrep # well, it's grep
     fastfetch # gotta show system information somehow!
+    flyctl # cli for a hosting service i use
+    httpie # good for inspecting APIs
+    exercism # cli for a great learning website!
   ];
 }
diff --git a/home/features/cli/fish.nix b/home/features/cli/fish.nix
index d1e0078..dcc337e 100644
--- a/home/features/cli/fish.nix
+++ b/home/features/cli/fish.nix
@@ -19,13 +19,12 @@
       setpath ~/.cabal/bin
       setpath ~/.local/bin
       setpath ~/.bun/bin
-      setpath ~/Projects/Checkouts/arcanist/bin
       setpath ~/.config/emacs/bin
     '';
 
     shellAliases = {
       # General aliases
-      c = "clear";
+      cl = "clear";
       ll = "ls -lahF --color=always";
       e = "$EDITOR";
       se = "sudoedit";
@@ -46,7 +45,7 @@
       j = "z";
 
       # cargoes and rust-s
-      ca = "cargo";
+      c = "cargo";
       cr = "cargo run";
       cb = "cargo build";
       ct = "cargo test";
diff --git a/home/features/desktop/default.nix b/home/features/desktop/default.nix
index c0bf0b0..2f95fec 100644
--- a/home/features/desktop/default.nix
+++ b/home/features/desktop/default.nix
@@ -5,20 +5,19 @@
     ./alacritty.nix
     ./vscode.nix
     ./1password.nix
-    ./obs.nix
     ./irc.nix
     ./emacs.nix
   ];
 
   home.packages = with pkgs; [
+    # my primary note-taking tool
     obsidian
-    kdenlive
-    audacity
+    # a video player
     mpv
+    # a music player
     spotify
-    tidal-hifi
+    # for watching stuff w/ friends
     syncplay
-    chatterino2
   ];
 
   home.sessionVariables = {
@@ -26,6 +25,4 @@
     QT_QPA_PLATFORM = "wayland";
     LIBSEAT_BACKEND = "logind";
   };
-
-  xdg.mimeApps.enable = true;
 }
diff --git a/home/features/desktop/games/default.nix b/home/features/desktop/games/default.nix
index e427d38..c802c3e 100644
--- a/home/features/desktop/games/default.nix
+++ b/home/features/desktop/games/default.nix
@@ -1,6 +1,8 @@
 { pkgs, ... }: {
   home.packages = with pkgs; [
+    # FFXIV
     xivlauncher
+    # Minecraft
     (prismlauncher.override {
       jdks = [ temurin-bin-21 temurin-bin-17 temurin-bin-8 ];
     })
diff --git a/home/features/desktop/hyprland/default.nix b/home/features/desktop/hyprland/default.nix
deleted file mode 100644
index 99fe515..0000000
--- a/home/features/desktop/hyprland/default.nix
+++ /dev/null
@@ -1,183 +0,0 @@
-{ lib, config, pkgs, ... }: {
-  imports = [ ../default.nix ../wlr ./swaylock.nix ./swayidle.nix ];
-
-  home.packages = with pkgs; [ grimblast pamixer playerctl ];
-
-  wayland.windowManager.hyprland = {
-    enable = true;
-    systemd = { enable = true; };
-
-    settings = {
-      general = {
-        gaps_in = 15;
-        gaps_out = 20;
-        border_size = 1;
-      };
-      cursor.inactive_timeout = 4;
-
-      device = [{
-        name = "royuan-akko-keyboard";
-        kb_layout = "us_intl";
-      }];
-
-      dwindle = {
-        split_width_multiplier = 1.35;
-        pseudotile = true;
-      };
-
-      layerrule = [
-        "animation fade,hyprpicker"
-        "animation fade,selection"
-        "blur,^(wofi)$"
-        "ignorezero,^(wofi)$"
-      ];
-
-      windowrulev2 = let steam = "title:^()$,class:^(steam)$";
-      in [ "stayfocused, ${steam}" "minsize 1 1, ${steam}" ];
-
-      decoration = {
-        active_opacity = 1.0;
-        inactive_opacity = 0.85;
-        fullscreen_opacity = 1.0;
-        rounding = 7;
-        blur = {
-          enabled = true;
-          size = 4;
-          passes = 3;
-          new_optimizations = true;
-          ignore_opacity = true;
-        };
-        drop_shadow = true;
-        shadow_range = 12;
-        shadow_offset = "3 3";
-      };
-
-      animations = {
-        enabled = true;
-        bezier = [
-          "easein,0.1, 0, 0.5, 0"
-          "easeinback,0.35, 0, 0.95, -0.3"
-
-          "easeout,0.5, 1, 0.9, 1"
-          "easeoutback,0.35, 1.35, 0.65, 1"
-
-          "easeinout,0.45, 0, 0.55, 1"
-        ];
-
-        animation = [
-          "fadeIn,1,3,easeout"
-          "fadeLayersIn,1,3,easeoutback"
-          "layersIn,1,3,easeoutback,slide"
-          "windowsIn,1,3,easeoutback,slide"
-
-          "fadeLayersOut,1,3,easeinback"
-          "fadeOut,1,3,easein"
-          "layersOut,1,3,easeinback,slide"
-          "windowsOut,1,3,easeinback,slide"
-
-          "border,1,3,easeout"
-          "fadeDim,1,3,easeinout"
-          "fadeShadow,1,3,easeinout"
-          "fadeSwitch,1,3,easeinout"
-          "windowsMove,1,3,easeoutback"
-          "workspaces,1,2.6,easeoutback,slide"
-        ];
-      };
-
-      bindm = [ "SUPER,mouse:272,movewindow" "SUPER,mouse:273,resizewindow" ];
-
-      bind = let
-        terminal = "${pkgs.alacritty}/bin/alacritty";
-        grimblast = lib.getExe pkgs.grimblast;
-        workspaces = [ "1" "2" "3" "4" "5" ];
-        directions = rec {
-          left = "l";
-          right = "r";
-          up = "u";
-          down = "d";
-          h = left;
-          l = right;
-          k = up;
-          j = down;
-        };
-      in [
-        "SUPER,Return,exec,${terminal}"
-        "SUPERSHIFT,q,killactive" # exit program
-        "SUPERSHIFT,e,exit" # exit hyprland
-        "SUPERSHIFT,r,exec,hyprctl reload" # reload currently running hyprland
-
-        "SUPER,s,togglesplit" # horizontal split
-        "SUPER,f,fullscreen,1" # borderless window
-        "SUPERSHIFT,f,fullscreen,0" # proper fullscreen
-        "ALTSHIFT,space,togglefloating" # floating window
-
-        "SUPER,minus,splitratio,-0.25" # split gets slightly smaller
-        "SUPERSHIFT,minus,splitratio,-0.3333333" # split gets smaller
-        "SUPER,equal,splitratio,0.25" # split gets slightly larger
-        "SUPERSHIFT,equal,splitratio,0.3333333" # split gets larger
-
-        "SUPER,g,togglegroup" # make a window group
-        "SUPER,t,lockactivegroup,toggle" # lock/unlock the current group
-        "SUPER,tab,changegroupactive,f" # switch to next window in group
-        "SUPERSHIFT,tab,changegroupactive,p" # switch to prev window in group
-
-        "SUPER,dead_grave,workspace,previous" # prev workspace
-        "SUPER,dead_grave,workspace,next" # next workspace
-
-        "SUPER,u,togglespecialworkspace" # toggle special workspace
-        "SUPERSHIFT,u,movetoworkspacesilent,special" # move to special workspace
-
-        ",Print,exec,${grimblast} --notify --freeze copy area" # screenshot area
-        "SHIFT,Print,exec,${grimblast} --notify --freeze copy output" # screenshot all
-
-        ",XF86AudioRaiseVolume,exec,pamixer -i 5" # raise volume
-        ",XF86AudioLowerVolume,exec,pamixer -d 5" # lower volume
-        ",XF86AudioPlay,exec,playerctl play-pause" # play/pause
-        ",XF86AudioNext,exec,playerctl next" # next song
-        ",XF86AudioPrev,exec,playerctl previous" # previous song
-      ] ++
-      # change workspace
-      (map (n: "SUPER,${n},workspace,name:${n}") workspaces) ++
-      # move window to workspace
-      (map (n: "SUPERSHIFT,${n},movetoworkspacesilent,name:${n}") workspaces) ++
-      # move focus
-      (lib.mapAttrsToList
-        (key: direction: "SUPER,${key},movefocus,${direction}") directions) ++
-      # swap windows
-      (lib.mapAttrsToList
-        (key: direction: "SUPERSHIFT,${key},swapwindow,${direction}")
-        directions) ++
-      # move windows
-      (lib.mapAttrsToList
-        (key: direction: "SUPERCONTROL,${key},movewindoworgroup,${direction}")
-        directions) ++
-      # move monitor focus
-      (lib.mapAttrsToList
-        (key: direction: "SUPERALT,${key},focusmonitor,${direction}")
-        directions) ++
-      # move workspace to other monitor
-      (lib.mapAttrsToList (key: direction:
-        "SUPERALTSHIFT,${key},movecurrentworkspacetomonitor,${direction}")
-        directions) ++
-      # launcher
-      (let wofi = lib.getExe pkgs.wofi;
-      in lib.optionals config.programs.wofi.enable [
-        "SUPER,Space,exec,${wofi} -S drun -W 20% -H 15%"
-        "SHIFTSUPER,Space,exec,${wofi} -S run -W 20% -H 15%"
-      ]);
-
-      monitor = map (m:
-        "${m.name},${
-          if m.enabled then
-            "${toString m.width}x${toString m.height}@${
-              toString m.refreshRate
-            },${m.position},${m.scale}"
-          else
-            "disable"
-        }") config.monitors;
-
-      workspace = map (m: "name:${m.workspace},monitor:${m.name}")
-        (lib.filter (m: m.enabled && m.workspace != null) config.monitors);
-    };
-  };
-}
diff --git a/home/features/desktop/hyprland/swayidle.nix b/home/features/desktop/hyprland/swayidle.nix
deleted file mode 100644
index e9012b6..0000000
--- a/home/features/desktop/hyprland/swayidle.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{ config, ... }:
-let swaylock = "${config.programs.swaylock.package}/bin/swaylock";
-in {
-  services.swayidle = {
-    enable = true;
-    systemdTarget = "graphical-session.target";
-    events = [{
-      event = "before-sleep";
-      command = "${swaylock} --daemonize";
-    }];
-    # timeouts = [
-    #   {
-    #     timeout = 4 * 60;
-    #     command = "${swaylock} --daemonize --grace 15";
-    #   }
-    # ];
-  };
-}
diff --git a/home/features/desktop/hyprland/swaylock.nix b/home/features/desktop/hyprland/swaylock.nix
deleted file mode 100644
index c6058ae..0000000
--- a/home/features/desktop/hyprland/swaylock.nix
+++ /dev/null
@@ -1,7 +0,0 @@
-{ pkgs, ... }: {
-  programs.swaylock = {
-    enable = true;
-    package = pkgs.swaylock-effects;
-    settings = { effect-blur = "20x3"; };
-  };
-}
diff --git a/home/features/desktop/wlr/default.nix b/home/features/desktop/wlr/default.nix
deleted file mode 100644
index 5aa1955..0000000
--- a/home/features/desktop/wlr/default.nix
+++ /dev/null
@@ -1,19 +0,0 @@
-{ pkgs, ... }: {
-  imports = [ ./mako.nix ./wofi.nix ./waybar.nix ];
-
-  home.packages = with pkgs; [
-    wf-recorder
-    wl-clipboard
-    xdg-utils
-    nautilus
-    adwaita-icon-theme
-  ];
-
-  programs.imv.enable = true;
-
-  xdg.portal = {
-    enable = true;
-    extraPortals = [ pkgs.xdg-desktop-portal-wlr ];
-    config = { common = { default = [ "wlr" ]; }; };
-  };
-}
diff --git a/home/features/desktop/wlr/mako.nix b/home/features/desktop/wlr/mako.nix
deleted file mode 100644
index 2b72c1e..0000000
--- a/home/features/desktop/wlr/mako.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{ config, lib, ... }: {
-  services.mako = {
-    enable = true;
-    font = lib.mkForce "${config.fontProfiles.regular.family} 12";
-    padding = "10,20";
-    anchor = "top-center";
-    width = 400;
-    height = 150;
-    borderSize = 1;
-    defaultTimeout = 12000;
-    layer = "overlay";
-  };
-}
diff --git a/home/features/desktop/wlr/waybar.nix b/home/features/desktop/wlr/waybar.nix
deleted file mode 100644
index 30bb6ff..0000000
--- a/home/features/desktop/wlr/waybar.nix
+++ /dev/null
@@ -1,108 +0,0 @@
-{ config, pkgs, ... }: {
-  # additional deps for cava support
-  home.packages = with pkgs; [ iniparser fftw ];
-
-  systemd.user.services.waybar = {
-    Unit.StartLimitBurst = 30;
-    # this fixes fonts for some reason
-    Service.Environment = "PATH=${config.home.profileDirectory}/bin";
-  };
-  programs.waybar = {
-    enable = true;
-    systemd.enable = true;
-    settings = {
-      primary = {
-        height = 30;
-        position = "top";
-        margin-top = 10;
-        margin-left = 20;
-        margin-right = 20;
-        modules-left = [ "hyprland/workspaces" "hyprland/language" ];
-
-        modules-center = [ "cpu" "clock" "memory" ];
-
-        modules-right = [ "mpris" "network" "pulseaudio" "battery" "tray" ];
-
-        cpu = { format = "CPU {usage}%"; };
-
-        memory = { format = "MEM {}%"; };
-
-        tray = { spacing = 10; };
-
-        pulseaudio = { format = "AUD {volume}%"; };
-
-        network = {
-          format = "NET {ipaddr}";
-          format-disconnected = "NET X";
-        };
-
-        mpris = {
-          format = "{dynamic}";
-          interval = 1;
-        };
-
-        "hyprland/language" = {
-          format = "KBD {}";
-          format-en = "EN";
-          format-de = "DE";
-        };
-      };
-    };
-
-    style = let inherit (config.lib.stylix.colors) withHashtag;
-    in ''
-      * {
-        font-family: ${config.fontProfiles.bitmap.family}, ${config.fontProfiles.monospace.family};
-        font-size: 11pt;
-        padding: 0;
-      }
-
-      window#waybar {
-        padding: 0;
-        border-radius: 0.5em;
-      }
-
-      #workspaces {
-        transition: background-color .5s, color .5s;
-      }
-
-      #workspaces button {
-        padding: 0 6px;
-      }
-
-      #workspaces button.active,
-      #workspaces button.focused {
-        background-color: ${withHashtag.base05};
-        color: ${withHashtag.base00};
-      }
-
-      #cpu,
-      #memory {
-        color: ${withHashtag.base04};
-      }
-
-      #mpris {
-        font-size: 10pt;
-        margin-right: 6px;
-      }
-
-      #tray {
-        padding: 0 5px;
-        background-color: ${withHashtag.base02};
-      }
-
-      #pulseaudio {
-        color: ${withHashtag.base0D};
-      }
-
-      #network {
-        color: ${withHashtag.base0C};
-      }
-
-      #language {
-        color: ${withHashtag.base02};
-        margin-left: 10px;
-      }
-    '';
-  };
-}
diff --git a/home/features/desktop/wlr/wofi.nix b/home/features/desktop/wlr/wofi.nix
deleted file mode 100644
index 02bf678..0000000
--- a/home/features/desktop/wlr/wofi.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{ config, lib, ... }: {
-  programs.wofi = {
-    enable = true;
-    settings = {
-      insensitive = true;
-      allow_markup = true;
-      run-always_parse_args = true;
-      run-cache_file = "/dev/null";
-      run-exec_search = true;
-      matching = "multi-contains";
-    };
-    style = ''
-      #window {
-        border: 1px solid ${config.lib.stylix.colors.withHashtag.base05};
-        font-family: ${config.fontProfiles.bitmap.family};
-      }
-
-      #input {
-        border-radius: 0;
-        border: 1px solid ${config.lib.stylix.colors.withHashtag.base05};
-        border-bottom: 0;
-      }
-    '';
-  };
-}
diff --git a/home/features/devel/base.nix b/home/features/devel/base.nix
new file mode 100644
index 0000000..072e12d
--- /dev/null
+++ b/home/features/devel/base.nix
@@ -0,0 +1,16 @@
+# Basic development utilities for every system. Equivalent to something
+# like `build-essential` on other systems, ideally.
+{ pkgs, ... }:
+
+{
+  home.packages = with pkgs; [
+    gcc
+    gnumake
+    unzip
+    openssl
+    autoconf
+    pkg-config
+    cmake
+    inotify-tools
+  ];
+}
diff --git a/home/features/devel/clojure.nix b/home/features/devel/clojure.nix
deleted file mode 100644
index ef4b56e..0000000
--- a/home/features/devel/clojure.nix
+++ /dev/null
@@ -1 +0,0 @@
-{ pkgs, ... }: { home.packages = with pkgs; [ clojure clojure-lsp leiningen ]; }
diff --git a/home/features/devel/dbs.nix b/home/features/devel/dbs.nix
new file mode 100644
index 0000000..2e161a8
--- /dev/null
+++ b/home/features/devel/dbs.nix
@@ -0,0 +1,6 @@
+# DB management interfaces
+{ pkgs, ... }:
+
+{
+  home.packages = with pkgs; [ beekeeper-studio ];
+}
diff --git a/home/features/devel/default.nix b/home/features/devel/default.nix
index be45b22..091082f 100644
--- a/home/features/devel/default.nix
+++ b/home/features/devel/default.nix
@@ -1,44 +1 @@
-{ pkgs, ... }: {
-  imports = [ ./php.nix ./clojure.nix ./langs.nix ];
-
-  home.packages = with pkgs; [
-    gcc
-    gnumake
-    unzip
-    openssl
-    autoconf
-    pkg-config
-    bun
-    rustup
-    cmake
-
-    # haskell stuff
-    haskell.compiler.ghc910
-    cabal-install
-    stack
-
-    # nix stuff
-    nixpkgs-fmt
-    nixfmt-classic
-    nix-tree
-    nil
-    nixd
-
-    # elixir stuff
-    elixir
-    elixir-ls
-    inotify-tools
-
-    # python
-    python3
-    uv
-    basedpyright
-
-    # misc
-    flyctl
-    httpie
-    beekeeper-studio
-    exercism
-    neil
-  ];
-}
+{ ... }: { imports = [ ./base.nix ]; }
diff --git a/home/features/devel/elixir.nix b/home/features/devel/elixir.nix
new file mode 100644
index 0000000..c8290ef
--- /dev/null
+++ b/home/features/devel/elixir.nix
@@ -0,0 +1,6 @@
+# It's Elixir, a BEAM language.
+{ pkgs, ... }:
+
+{
+  home.packages = with pkgs; [ elixir elixir-ls ];
+}
diff --git a/home/features/devel/haskell.nix b/home/features/devel/haskell.nix
new file mode 100644
index 0000000..c4ab649
--- /dev/null
+++ b/home/features/devel/haskell.nix
@@ -0,0 +1,6 @@
+# The _smartest_ programming language.
+{ pkgs, ... }:
+
+{
+  home.packages = with pkgs; [ haskell.compiler.ghc910 cabal-install stack ];
+}
diff --git a/home/features/devel/java.nix b/home/features/devel/java.nix
new file mode 100644
index 0000000..7f7204e
--- /dev/null
+++ b/home/features/devel/java.nix
@@ -0,0 +1,14 @@
+# Java and it's sub-Javas (Clojure, etc)
+{ pkgs, ... }:
+
+{
+  home.packages = with pkgs; [
+    # java
+    jdk
+
+    # clojure
+    clojure
+    clojure-lsp
+    neil
+  ];
+}
diff --git a/home/features/devel/js.nix b/home/features/devel/js.nix
new file mode 100644
index 0000000..c111a69
--- /dev/null
+++ b/home/features/devel/js.nix
@@ -0,0 +1,6 @@
+# NodeJS, JavaScript, and more!
+{ pkgs, ... }:
+
+{
+  home.packages = with pkgs; [ bun nodejs_22 ];
+}
diff --git a/home/features/devel/langs.nix b/home/features/devel/langs.nix
deleted file mode 100644
index 1589529..0000000
--- a/home/features/devel/langs.nix
+++ /dev/null
@@ -1 +0,0 @@
-{ pkgs, ... }: { home.packages = with pkgs; [ nodejs_22 ruby_3_3 jdk ]; }
diff --git a/home/features/devel/python.nix b/home/features/devel/python.nix
new file mode 100644
index 0000000..b3c4e2b
--- /dev/null
+++ b/home/features/devel/python.nix
@@ -0,0 +1,14 @@
+# Everyone needs a Python setup, right?
+{ pkgs, ... }:
+
+{
+  home.packages = with pkgs; [
+    python3
+    # catch-all replacement for _most_ other python stuff
+    uv
+    # linter
+    ruff
+    # lsp(?)
+    basedpyright
+  ];
+}
diff --git a/home/features/devel/rust.nix b/home/features/devel/rust.nix
new file mode 100644
index 0000000..b3a6d65
--- /dev/null
+++ b/home/features/devel/rust.nix
@@ -0,0 +1,8 @@
+# Rust and other adjacent tools.
+{ pkgs, ... }:
+
+{
+  # I use rustup to manage my Rust toolchains, but I may override it
+  # per-project in a local flake.
+  home.packages = with pkgs; [ rustup cargo-watch ];
+}
diff --git a/home/global.linux.nix b/home/global.linux.nix
deleted file mode 100644
index 3dc15ee..0000000
--- a/home/global.linux.nix
+++ /dev/null
@@ -1,4 +0,0 @@
-{ ... }: {
-  systemd.user.startServices = "sd-switch";
-  xdg.mime.enable = true;
-}
diff --git a/home/global.nix b/home/global.nix
index d5b5b98..1eeae52 100644
--- a/home/global.nix
+++ b/home/global.nix
@@ -1,11 +1,13 @@
 { inputs, lib, pkgs, config, outputs, ... }: {
   imports = [
+    # home-manager
     inputs.nix-index-database.hmModules.nix-index
-    inputs.stylix.homeManagerModules.stylix
+    # Basic CLI tools and environment
     ./features/cli
     ./features/devel
   ] ++ (builtins.attrValues outputs.homeManagerModules);
 
+  # Configure nixpkgs
   nixpkgs = {
     overlays = builtins.attrValues outputs.overlays;
     config = {
@@ -14,6 +16,7 @@
     };
   };
 
+  # Configure nix
   nix = {
     package = lib.mkDefault pkgs.nixVersions.nix_2_22;
     settings = {
@@ -22,6 +25,20 @@
     };
   };
 
+  # Add some additional packages for Nix-centric development
+  home.packages = with pkgs; [
+    # formatting
+    nixpkgs-fmt
+    nixfmt-classic
+    # inspecting derivations
+    nix-tree
+    # lsps
+    nil
+    nixd
+    # once-off command execution
+    comma
+  ];
+
   programs = { home-manager.enable = true; };
 
   programs.git = {
@@ -51,22 +68,6 @@
     sessionVariables = { FLAKE = "$HOME/nix-config"; };
   };
 
-  stylix = {
-    enable = true;
-    base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
-    image = pkgs.fetchurl {
-      url =
-        "https://lds-img.finalfantasyxiv.com/h/d/gGA_a8kMXpsxZEOfW_MadG07_E.jpg";
-      sha256 = "0d8b4031dnlrcd3wx63p19w5h5zc8z5fk2yqz0wv20m7gr62h8r0";
-    };
-    fonts = {
-      monospace = {
-        name = config.fontProfiles.monospace.family;
-        package = config.fontProfiles.monospace.package;
-      };
-    };
-    targets.wofi.enable = false;
-    targets.kde.enable = false;
-    targets.gtk.enable = false;
-  };
+  systemd.user.startServices = "sd-switch";
+  xdg.mime.enable = true;
 }
diff --git a/home/koishi.nix b/home/koishi.nix
deleted file mode 100644
index da384f6..0000000
--- a/home/koishi.nix
+++ /dev/null
@@ -1 +0,0 @@
-{ ... }: { imports = [ ./global.nix ./features/desktop/font.nix ]; }
diff --git a/home/yukari.nix b/home/yukari.nix
index 4ad63ed..dd651ec 100644
--- a/home/yukari.nix
+++ b/home/yukari.nix
@@ -2,13 +2,20 @@
 { pkgs, ... }: {
   imports = [
     ./global.nix
-    ./global.linux.nix
     ./features/desktop
     ./features/desktop/games
+    ./features/desktop/obs.nix
+    ./features/devel/js.nix
+    ./features/devel/java.nix
+    ./features/devel/rust.nix
+    ./features/devel/python.nix
+    ./features/devel/dbs.nix
   ];
 
-  # Install Solaar, a management application for Logitech dongle devices
-  home.packages = with pkgs; [ solaar ];
+  # Install:
+  # - Solaar, a management application for Logitech dongle devices
+  # - Chatterino, for checking chat when live streaming
+  home.packages = with pkgs; [ solaar chatterino2 ];
 
   #  ----------   ------
   # | HDMI-A-5 | | DP-5 |
diff --git a/nixos/common/default.nix b/nixos/common/default.nix
index 3178dd2..eeaceec 100644
--- a/nixos/common/default.nix
+++ b/nixos/common/default.nix
@@ -35,7 +35,6 @@
 
   # set up a keyring
   services.gnome.gnome-keyring.enable = true;
-  security.pam.services.hyprland.enableGnomeKeyring = true;
 
   # set up ausweisapp for online german government login
   programs.ausweisapp = {
diff --git a/nixos/desktop/default.nix b/nixos/desktop/default.nix
index df558cd..562a663 100644
--- a/nixos/desktop/default.nix
+++ b/nixos/desktop/default.nix
@@ -1 +1 @@
-{ ... }: { imports = [ ./steam.nix ./flatpak.nix ]; }
+{ ... }: { imports = [ ./flatpak.nix ]; }
diff --git a/nixos/desktop/hyprland.nix b/nixos/desktop/hyprland.nix
deleted file mode 100644
index 1ff66e9..0000000
--- a/nixos/desktop/hyprland.nix
+++ /dev/null
@@ -1,4 +0,0 @@
-{ ... }: {
-  security.pam.services.swaylock = { };
-  services.blueman.enable = true;
-}
diff --git a/nixos/yukari/configuration.nix b/nixos/yukari/configuration.nix
index 5e40b60..50e451c 100644
--- a/nixos/yukari/configuration.nix
+++ b/nixos/yukari/configuration.nix
@@ -5,6 +5,7 @@
     ../services/postgres.nix
     ../desktop
     ../desktop/plasma.nix
+    ../desktop/steam.nix
   ];
 
   nixpkgs = { config = { allowUnfree = true; }; };
@@ -70,9 +71,6 @@
     };
   };
 
-  # hyprland stuff
-  programs.hyprland = { enable = true; };
-
   # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
   system.stateVersion = "23.11";
 }