aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CLAUDE.md55
-rw-r--r--computers/nixnode.nix334
-rw-r--r--computers/nixy.nix321
-rw-r--r--flake.lock39
-rw-r--r--flake.nix74
-rw-r--r--hardware-setups/linode.nix40
-rw-r--r--hardware-setups/tuf.nix53
-rw-r--r--home-manager/YATwm/default.nix111
-rw-r--r--home-manager/emacs/default.nix35
-rw-r--r--home-manager/home.nix210
-rw-r--r--home-manager/hyprland/default.nix151
-rw-r--r--home-manager/hyprpaper/default.nix10
-rw-r--r--home-manager/i3/default.nix42
-rw-r--r--home-manager/i3/i3-commands.nix20
-rw-r--r--home-manager/kitty/default.nix24
-rw-r--r--home-manager/picom/default.nix18
-rw-r--r--home-manager/polybar/default.nix20
-rw-r--r--home-manager/rofi/default.nix13
-rw-r--r--home-manager/waybar/default.nix16
-rw-r--r--modules/cgit.nix157
-rw-r--r--modules/computers/nixnode.nix347
-rw-r--r--modules/computers/nixy.nix343
-rw-r--r--modules/default.nix6
-rw-r--r--modules/deploy.nix30
-rw-r--r--modules/flake-parts.nix8
-rw-r--r--modules/hardware-setups/linode.nix44
-rw-r--r--modules/hardware-setups/tuf.nix57
-rw-r--r--modules/home-manager/YATwm/config (renamed from home-manager/YATwm/config)0
-rw-r--r--modules/home-manager/YATwm/default.nix117
-rw-r--r--modules/home-manager/claude-code-manifest-2.1.282.json (renamed from home-manager/claude-code-manifest-2.1.282.json)0
-rw-r--r--modules/home-manager/emacs/default.nix39
-rw-r--r--modules/home-manager/home.nix217
-rw-r--r--modules/home-manager/hyprland/default.nix157
-rw-r--r--modules/home-manager/hyprland/default.nix~ (renamed from home-manager/hyprland/default.nix~)0
-rw-r--r--modules/home-manager/hyprland/hyprlock.conf (renamed from home-manager/hyprland/hyprlock.conf)0
-rw-r--r--modules/home-manager/hyprpaper/default.nix14
-rw-r--r--modules/home-manager/hyprpaper/hyprpaper.conf (renamed from home-manager/hyprpaper/hyprpaper.conf)0
-rw-r--r--modules/home-manager/i3/config (renamed from home-manager/i3/config)0
-rw-r--r--modules/home-manager/i3/default.nix49
-rw-r--r--modules/home-manager/i3/i3-commands.nix28
-rw-r--r--modules/home-manager/i3/rofi-passmenu.nix (renamed from home-manager/i3/rofi-passmenu.nix)40
-rwxr-xr-xmodules/home-manager/i3/scripts/exit.sh (renamed from home-manager/i3/scripts/exit.sh)0
-rwxr-xr-xmodules/home-manager/i3/scripts/image_upload.sh (renamed from home-manager/i3/scripts/image_upload.sh)0
-rwxr-xr-xmodules/home-manager/i3/scripts/monitor-config.sh (renamed from home-manager/i3/scripts/monitor-config.sh)0
-rwxr-xr-xmodules/home-manager/i3/scripts/rofi-passmenu (renamed from home-manager/i3/scripts/rofi-passmenu)0
-rwxr-xr-xmodules/home-manager/i3/scripts/workspaces.sh (renamed from home-manager/i3/scripts/workspaces.sh)0
-rw-r--r--modules/home-manager/i3/scripts/workspaces.txt (renamed from home-manager/i3/scripts/workspaces.txt)0
-rw-r--r--modules/home-manager/kitty/default.nix28
-rw-r--r--modules/home-manager/kitty/palenight.conf (renamed from home-manager/kitty/palenight.conf)0
-rw-r--r--modules/home-manager/picom/default.nix22
-rw-r--r--modules/home-manager/polybar/config.ini (renamed from home-manager/polybar/config.ini)0
-rw-r--r--modules/home-manager/polybar/default.nix24
-rwxr-xr-xmodules/home-manager/polybar/launch.sh (renamed from home-manager/polybar/launch.sh)0
-rw-r--r--modules/home-manager/rofi/config/config.rasi (renamed from home-manager/rofi/config/config.rasi)0
-rw-r--r--modules/home-manager/rofi/config/customised.rasi (renamed from home-manager/rofi/config/customised.rasi)0
-rw-r--r--modules/home-manager/rofi/default.nix17
-rw-r--r--modules/home-manager/shells/bash.nix (renamed from home-manager/shells/bash.nix)64
-rw-r--r--modules/home-manager/waybar/config/config.jsonc (renamed from home-manager/waybar/config/config.jsonc)0
-rw-r--r--modules/home-manager/waybar/config/style.css (renamed from home-manager/waybar/config/style.css)0
-rw-r--r--modules/home-manager/waybar/default.nix20
-rw-r--r--modules/my-pkgs/adom.nix59
-rw-r--r--modules/my-pkgs/default.nix12
-rw-r--r--modules/my-pkgs/stk-installers.nix44
-rw-r--r--modules/nix.nix41
-rw-r--r--modules/nvidia.nix36
-rw-r--r--modules/teh-nix/cgit.nix161
-rw-r--r--modules/teh-nix/nix.nix45
-rw-r--r--modules/teh-nix/nvidia.nix40
-rw-r--r--modules/teh-nix/xorg.nix60
-rw-r--r--modules/website/default.nix20
-rw-r--r--modules/website/src/index.html (renamed from website/src/index.html)0
-rw-r--r--modules/website/src/other-page.html (renamed from website/src/other-page.html)0
-rw-r--r--modules/xorg.nix57
-rw-r--r--my-pkgs/adom.nix51
-rw-r--r--my-pkgs/default.nix8
-rw-r--r--my-pkgs/stk-installers.nix36
-rw-r--r--website/default.nix12
77 files changed, 2143 insertions, 1953 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index 797acd7..e7561de 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -38,38 +38,61 @@ There are no tests or linter. "Does it evaluate/build" is the check. `nil` is in
## Gotchas
-- **Flakes only see git-tracked files.** You must `git add` a new file before a rebuild can see it. This matters even more for `modules/`, which auto-imports files (see below).
-- **`flake.lock` is gitignored**, so inputs aren't pinned in the repo.
-- The **`YATwm` and `STK` inputs are `git+file://` paths** on this machine (`~/Documents/Coding/WM/YATwm`, `~/stk`). Evaluating either host needs them present. `nixnode` is always built from `nixy` and then pushed.
+- **Flakes only see git-tracked files.** You must `git add` a new file before a rebuild can see it. This matters even more here, because `modules/` is auto-imported by import-tree (see below).
+- **`flake.lock` is tracked.** Run `nix flake lock` after adding an input.
+- The **`STK` input is a `git+file://` path** (`~/stk`), and evaluating the flake needs it present. The `YATwm` input (`~/Documents/Coding/WM/YATwm`) is currently commented out; `homeManager.YATwm` references it lazily, so that's fine as long as nothing imports that module. `nixnode` is always built from `nixy` and then pushed.
- Indentation is **4 spaces**. Multi-line `''` strings (shell scripts, configs) usually start at column 0 rather than following the Nix indentation. Match that.
- Leave `system.stateVersion` and `home.stateVersion` alone.
## Architecture
-### Flake wiring (`flake.nix`)
-Each host is assembled as `./modules` + `./hardware-setups/<hw>.nix` + `./computers/<host>.nix`. `nixy` also gets `./my-pkgs`, the home-manager NixOS module, and stylix. `inputs` is passed to every NixOS and home-manager module through `specialArgs`/`extraSpecialArgs`, so third-party modules are imported inline, e.g. `inputs.sops.nixosModules.sops`.
+### Dendritic pattern (flake-parts + import-tree)
+`flake.nix` only declares inputs and runs `inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules)`. **Every `.nix` file under `modules/` is a flake-parts module** and is auto-imported. A file whose name has a path component starting with `_` is skipped. Each file exports exactly one thing:
+- NixOS modules: `flake.modules.nixos.<name>`
+- home-manager modules: `flake.modules.homeManager.<name>`
+- packages: `perSystem.packages.<name> = pkgs.callPackage (<fn>) { };`
+- hosts: `flake.nixosConfigurations.<host>`
-### `modules/`: custom option modules under the `teh-nix.*` namespace
-`modules/default.nix` **auto-imports every `.nix` file in the directory recursively**, except `default.nix`. Both hosts import all of them, so each module has to be gated behind `lib.mkIf config.teh-nix.<name>.enable`, and a host turns on only what it needs:
+The original module goes inside, wrapped like this:
+```nix
+{ inputs, config, ... }:
+let
+ nixos = config.flake.modules.nixos;
+ hm = config.flake.modules.homeManager;
+in
+{
+ flake.modules.nixos.<name> =
+ { config, lib, pkgs, ... }:
+ { ... };
+}
+```
+**There are no `specialArgs`.** Inner modules use the outer-captured `inputs`, so `inputs` must never be added back to an inner argument list. Modules import each other by reference (`hm.polybar`, `nixos.teh-nix`), not by relative path. Relative paths are only for asset files that sit next to the module, such as `./config` and `./scripts`. Paths to the repo-root `secrets/` and `wallpaper.png` are `../../`.
+
+`modules/flake-parts.nix` imports `flake-parts.flakeModules.modules` and sets `systems`. `modules/deploy.nix` holds `flake.deploy.nodes.nixnode` and the deploy-rs `checks`.
+
+### `modules/teh-nix/`: custom option modules under the `teh-nix.*` namespace
+All four files define **`flake.modules.nixos.teh-nix`**. These deferred modules merge into one module, and both hosts import it, so each feature has to be gated behind `lib.mkIf config.teh-nix.<name>.enable`. A host turns on only what it needs:
- `teh-nix.nix`: nix settings, flakes, the registry/NIX_PATH pointing at the flake's nixpkgs, and `nh` cleanup (in place of `nix.gc`).
-- `teh-nix.xorg`: X server, and pulls in the YATwm NixOS module. It enables `teh-nix.nvidia` by default.
+- `teh-nix.xorg`: X server, with a YATwm NixOS module hook (commented out). It enables `teh-nix.nvidia` by default.
- `teh-nix.nvidia`: PRIME offload with bus IDs, plus the `prime-run` wrapper.
- `teh-nix.services.cgit`: self-written cgit + nginx + git-over-ssh service, used on nixnode.
Add new reusable functionality here in the same `options`/`config = mkIf` pattern instead of putting it straight into a host file.
-### `computers/`: per-host config
-These are the old `configuration.nix` equivalents. They set the `teh-nix.*` toggles, sops secrets, networking, and the services for the host. The wireguard tunnel spans both files: `nixnode` is the hub (`10.100.0.1`, kernel wireguard), and `nixy` is the peer (`10.100.0.2`, a NetworkManager profile that gets its key from sops through `nm-file-secret-agent`).
+### `modules/computers/`: per-host config
+Each file defines both `flake.modules.nixos.<host>` and `flake.nixosConfigurations.<host>`. These are the old `configuration.nix` equivalents, and their `imports` do the host assembly: `nixos.teh-nix`, the hardware module (`nixos.tuf` / `nixos.linode` from `modules/hardware-setups/`), and the `inputs.*` modules. `nixy` additionally imports `nixos.my-pkgs`, home-manager (`home-manager.users.boss = hm.boss`) and stylix. Host files set the `teh-nix.*` toggles, sops secrets, networking and the host's services. The wireguard tunnel spans both files: `nixnode` is the hub (`10.100.0.1`, kernel wireguard), and `nixy` is the peer (`10.100.0.2`, a NetworkManager profile that gets its key from sops through `nm-file-secret-agent`).
+
+### `modules/home-manager/`: user `boss` on nixy
+`home.nix` exports `homeManager.boss`, the entry point. There is one directory per program, each with a `default.nix` exporting `homeManager.<dir>`; some ship raw dotfiles next to it, such as `i3/config`, `polybar/config.ini` and `waybar/config/`. `shells/bash.nix` exports `homeManager.bash`. Commented-out imports, like `hm.hyprland`, are kept for switching back. `xsession.windowManager.command` is `mkForce`d to `"$@"` so the display manager decides which WM starts. Colors and fonts come from **stylix**, configured in `computers/nixy.nix`, so don't hardcode colors in program configs that stylix targets.
-### `home-manager/`: user `boss` on nixy
-`home.nix` is the entry point and imports one directory per program (each has a `default.nix`; some ship raw dotfiles next to it, such as `i3/config`, `polybar/config.ini`, `waybar/config/`). Commented-out imports, like `hyprland`, are kept for switching back. Both `i3` and `YATwm` are imported, and `xsession.windowManager.command` is `mkForce`d to `"$@"` so the display manager decides which WM starts. Colors and fonts come from **stylix**, configured in `computers/nixy.nix`, so don't hardcode colors in program configs that stylix targets.
+`i3/i3-commands.nix` and `i3/rofi-passmenu.nix` are flake packages, and the i3 module uses them through `inputs.self.packages.${pkgs.stdenv.hostPlatform.system}`.
-`claude-code` is pinned by overriding the nixpkgs package with a vendored manifest (`home-manager/claude-code-manifest-<version>.json`). To bump it, add the new manifest and update the filename in `home.nix`.
+`claude-code` is pinned by overriding the nixpkgs package with a vendored manifest (`modules/home-manager/claude-code-manifest-<version>.json`). To bump it, add the new manifest and update the filename in `home.nix`.
-### `my-pkgs/`
-`default.nix` is a NixOS module that adds an overlay (it currently provides `adom`). `stk-installers.nix` isn't part of the overlay: it's exposed directly as a flake package and served (currently commented out) from nixnode.
+### `modules/my-pkgs/`
+`adom.nix` and `stk-installers.nix` are flake packages. `default.nix` exports `nixos.my-pkgs`, an overlay that exposes `inputs.self.packages.<system>.adom` as `pkgs.adom`. `stk-installers` is served (currently commented out) from nixnode.
-### `website/`
+### `modules/website/`
A static site: it copies `src/` into `$out/srv/www`. It's built as the flake package `teh-website`, and the `tehbox.org` vhost references it through `inputs.self.packages`.
### Secrets (sops-nix)
diff --git a/computers/nixnode.nix b/computers/nixnode.nix
deleted file mode 100644
index ad19086..0000000
--- a/computers/nixnode.nix
+++ /dev/null
@@ -1,334 +0,0 @@
-# Edit this configuration file to define what should be installed on
-# your system. Help is available in the configuration.nix(5) man page, on
-# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
-
-{ config, lib, pkgs, inputs, ... }:
-
-{
- imports =
- [
- inputs.STK.nixosModules.default
- inputs.sops.nixosModules.sops
- inputs.nixos-mailserver.nixosModules.default
- inputs.neodrive-website.nixosModules.default
- ];
-
- teh-nix.nix.enable = true;
-
- # Use the GRUB 2 boot loader.
- boot.loader.grub.enable = true;
- # boot.loader.grub.efiSupport = true;
- # boot.loader.grub.efiInstallAsRemovable = true;
- # boot.loader.efi.efiSysMountPoint = "/boot/efi";
- # Define on which hard drive you want to install Grub.
- # boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only
-
- networking.hostName = "nixnode"; # Define your hostname.
- # Pick only one of the below networking options.
- # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
- networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
-
- # Set your time zone.
- time.timeZone = "NZ";
-
- # Configure network proxy if necessary
- # networking.proxy.default = "http://user:password@proxy:port/";
- # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
-
- # Select internationalisation properties.
- # i18n.defaultLocale = "en_US.UTF-8";
- # console = {
- # font = "Lat2-Terminus16";
- # keyMap = "us";
- # useXkbConfcpfig = true; # use xkb.options in tty.
- # };
-
- # Enable the X11 windowing system.
- # services.xserver.enable = true;
-
- security.sudo.wheelNeedsPassword = false;
-
- sops.defaultSopsFile = ../secrets/general.yaml;
- sops.defaultSopsFormat = "yaml";
-
- sops.age.keyFile = "/home/boss/.config/sops/age/keys.txt";
-
- sops.secrets = {
- #"wg/nixy/pub" = { };
- "wg/nixnode/priv" = { };
- "acme/linode" = {
- owner = "acme";
- mode = "440";
- };
- "mail/boss" = { };
- "nginx/dashboard-htpasswd" = {
- owner = "nginx";
- mode = "400";
- };
- };
-
- networking.firewall = {
- enable = true;
- allowedTCPPorts = [ 80 443 ];
- allowedUDPPorts = [ 51820 ];
- };
-
- security.acme.acceptTerms = true;
- # security.acme.useRoot = true;
- security.acme.defaults.email = "boss@tehbox.org";
- # security.acme.certs = {
- # "tehbox.org" =
- # {
- # webroot = "/var/lib/acme/acme-challenge/";
- # email = "boss@tehbox.org";
- # extraDomainNames = (map (sub: sub + ".tehbox.org" ) [ "www" "git" ]);
- # #dnsProvider = "linode";
- # # dnsResolver = "92.123.94.2";
- # # dnsPropagationCheck = false;
- # #environmentFile = environmentFile;
- # };
- # };
- users.groups.acme.members = [ "nginx" ];
-
- # Wireguard
- networking = {
- nat = {
- enable = true;
- externalInterface = "eth0";
- internalInterfaces = [ "wg0" ];
- };
-
- wireguard.interfaces.wg0 = {
- ips = [ "10.100.0.1/24" ];
- listenPort = 51820;
-
- postSetup = ''
-${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
-'';
- postShutdown = ''
-${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
-'';
-
- privateKeyFile = config.sops.secrets."wg/nixnode/priv".path;
-
- peers = [
- {
- name = "nixy";
- publicKey = "FMkFU9k+YeCvj48+WDVglySgoncbITqkS//o2e+TClY=";
- allowedIPs = [ "10.100.0.2/32" ];
- }
- ];
- };
- };
-
- services.nginx = {
- enable = true;
- # Log the vhost at the start of each line ("vcombined") so goaccess
- # can split traffic by subdomain
- commonHttpConfig = ''
-log_format vcombined '$host:$server_port $remote_addr - $remote_user [$time_local] '
- '"$request" $status $body_bytes_sent '
- '"$http_referer" "$http_user_agent"';
-access_log /var/log/nginx/access.log vcombined;
-'';
- # virtualHosts.${config.mailserver.fqdn}.enableACME = true;
- virtualHosts = {
- "tehbox.org" = {
- root = "${inputs.self.packages.x86_64-linux.teh-website}/srv/www";
- serverAliases = [ "www.tehbox.org" ];
- enableACME = true;
- forceSSL = true;
- };
- "files.tehbox.org" = {
- root = "/srv/files";
- enableACME = true;
- forceSSL = true;
- };
- # "stk.lug.ac" = {
- # root = "${inputs.self.packages.x86_64-linux.stk-installers}/srv/www";
- # enableACME = true;
- # forceSSL = true;
- # locations."/".extraConfig = "autoindex on;\n";
- # };
- "dashboard.tehbox.org" = {
- root = "/var/lib/goaccess/html";
- basicAuthFile = config.sops.secrets."nginx/dashboard-htpasswd".path;
- enableACME = true;
- forceSSL = true;
- };
- "_" = {
- globalRedirect = "tehbox.org";
- };
- };
- };
-
- # Web traffic dashboard, rebuilt from the nginx access log every 10 minutes.
- # --persist/--restore keep the totals in /var/lib/goaccess/db across log rotations.
- systemd.services.goaccess-report = {
- description = "Build goaccess report for dashboard.tehbox.org";
- serviceConfig = {
- Type = "oneshot";
- User = "nginx";
- Group = "nginx";
- StateDirectory = [ "goaccess" "goaccess/db" "goaccess/html" ];
- };
- script = ''
-${pkgs.goaccess}/bin/goaccess /var/log/nginx/access.log \
- --log-format=VCOMBINED \
- --num-tests=0 \
- --no-query-string \
- --persist --restore --db-path=/var/lib/goaccess/db \
- --html-report-title="tehbox.org traffic" \
- -o /var/lib/goaccess/html/index.html
-'';
- };
- systemd.timers.goaccess-report = {
- wantedBy = [ "timers.target" ];
- timerConfig = {
- OnCalendar = "*:0/10";
- Persistent = true;
- };
- };
-
- teh-nix.services.cgit = {
- enable = true;
- authorizedKeys = config.users.users.boss.openssh.authorizedKeys.keys;
- authorizedUsers = [ "boss" ];
- domain = "git.tehbox.org";
- enableACME = true;
- # useACMEHost = "tehbox.org";
- forceSSL = true;
- # onlySSL = true;
- };
-
- services.neodrive-website = {
- enable = true;
- domain = "neodrive.tehbox.org";
- };
-
- services.znc = {
- enable = true;
- mutable = true;
- useLegacyConfig = false;
- openFirewall = true;
- config = {
- SSLCertFile = "/var/lib/acme/tehbox.org/key.pem";
- LoadModule = [ "webadmin" ];
- User.boss = {
- Admin = true;
- Pass.password = {
- Method = "sha256";
- Hash = "401e8fed9a3ab1f93047b7465fd7cc6b0ca5aaed6b1c0482f0f4331ebdca8647";
- Salt = "*F_-,pqOdiJi;p)JoMnm";
- };
- };
- User.komodo = {
- Admin = false;
- Pass.password = {
- Method = "sha256";
- Hash = "2c624debe3e2672383346230b6acad82192e40df05666481f792a9dd97d935cc";
- Salt = "q9At0+KZvmofZil(3us1";
- };
- };
- };
- };
-
- services.openssh = {
- enable = true;
- settings.PermitRootLogin = "no";
- settings.PasswordAuthentication = false;
- };
-
- services.superTuxKarts = {
- enable = true;
- port = 2759;
- package = pkgs.superTuxKart;
- serverOptions = {
- server-name = "LUG STK server";
- server-mode = 3;
- server-difficulty = 3;
- server-max-players = 16;
- track-voting = false;
- voting-timeout = 15;
- private-server-password = "lug@uoa";
- motd = "Server for LUG@UoA\nChampionship coming soon!";
- live-spectate = true;
- server-configurable = true;
- };
- };
-
- mailserver = {
- enable = true;
- stateVersion = 3;
- fqdn = "tehbox.org";
- domains = [ "tehbox.org" ];
-
- x509.useACMEHost = config.mailserver.fqdn;
-
- loginAccounts = {
- "boss@tehbox.org" = {
- hashedPasswordFile = config.sops.secrets."mail/boss".path;
- aliases = ["postmaster@tehbox.org"];
- };
- };
-
- # certificateScheme = "acme";
- };
-
- users.users.boss = {
- isNormalUser = true;
- extraGroups = [ "wheel" "networkmanager"]; # Enable ‘sudo’ for the user.
- home = "/home/boss";
- openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJOukEKExoF6vr3vciQN8pBdd4FtZtRzqIGFJrUvllOY boss@nixy" ];
- };
- users.groups.files.members = [ "boss" "nginx" ];
- users.groups.nginx.members = [ "nginx" "znc" ];
-
- environment.systemPackages = with pkgs; [
- vim
- emacs
- inetutils
- mtr
- sysstat
- git
- goaccess
- inputs.self.packages.x86_64-linux.teh-website
- # inputs.self.packages.x86_64-linux.stk-installers
- ];
-
-
- # Open ports in the firewall.
- # networking.firewall.allowedTCPPorts = [ ... ];
- # networking.firewall.allowedUDPPorts = [ ... ];
- # Or disable the firewall altogether.
- # networking.firewall.enable = false;
-
- networking.usePredictableInterfaceNames = false;
- networking.useDHCP = false;
- networking.interfaces.eth0.useDHCP = true;
-
- # Copy the NixOS configuration file and link it from the resulting system
- # (/run/current-system/configuration.nix). This is useful in case you
- # accidentally delete configuration.nix.
- # system.copySystemConfiguration = true;
-
- # This option defines the first version of NixOS you have installed on this particular machine,
- # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
- #
- # Most users should NEVER change this value after the initial install, for any reason,
- # even if you've upgraded your system to a new NixOS release.
- #
- # This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
- # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
- # to actually do that.
- #
- # This value being lower than the current NixOS release does NOT mean your system is
- # out of date, out of support, or vulnerable.
- #
- # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
- # and migrated your data accordingly.
- #
- # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
- system.stateVersion = "25.05"; # Did you read the comment?
-
-}
diff --git a/computers/nixy.nix b/computers/nixy.nix
deleted file mode 100644
index a576c8b..0000000
--- a/computers/nixy.nix
+++ /dev/null
@@ -1,321 +0,0 @@
-# Edit this configuration file to define what should be installed on
-# your system. Help is available in the configuration.nix(5) man page
-# and in the NixOS manual (accessible by running ‘nixos-help’).
-
-{ config, pkgs, inputs, ... }:
-{
- imports =
- [
- inputs.sops.nixosModules.sops
- #inputs.spicetify-nix.nixosModules.default
- ];
-
- teh-nix.nix.enable = true;
- programs.nix-ld.enable = true;
- programs.nix-ld.libraries = with pkgs; [
- # stdenv.cc.cc
- glib
- glibc
- nspr
- nss
- dbus
- atk
- cups
- cairo
- gtk3
- alsa-lib
- expat
- fontconfig
- freetype
- libgbm
- libnotify
- libsecret
- libxkbcommon
- mesa
- pango
- libX11
- libXcomposite
- libXcursor
- libXdamage
- libXext
- libXfixes
- libXi
- libXrandr
- libXrender
- libXtst
- libxcb
- ];
-
- # Use the systemd-boot EFI boot loader.
- boot = {
- loader.grub.enable = true;
- loader.grub.device = "nodev";
- loader.grub.efiSupport = true;
- loader.grub.enableCryptodisk = true;
- # loader.grub.useOSProber = true;
- loader.efi.canTouchEfiVariables = true;
- kernel.sysctl."kernel.sysrq" = 502;
- plymouth.enable = true;
- };
-
-
- networking.hostName = "nixy"; # Define your hostname.
- # Pick only one of the below networking options.
- # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
- networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
-
- sops.defaultSopsFile = ../secrets/general.yaml;
- sops.defaultSopsFormat = "yaml";
-
- sops.age.keyFile = "/home/boss/.config/sops/age/keys.txt";
-
- sops.secrets = {
- #"wg/nixnode/pub" = { };
- "wg/nixy/priv" = {
- restartUnits = [ "nm-file-secret-agent.service" ];
- group = "networkmanager";
- mode = "440";
- };
- };
-
- networking.firewall = {
- allowedUDPPorts = [ 51820 ];
- allowedTCPPorts = [ 8081 ];
- };
- networking.networkmanager.ensureProfiles = {
- profiles = {
- wg-nixnode = {
- connection = {
- id = "wg-nixnode";
- autoconnect = "false";
- interface-name = "wg0";
- type = "wireguard";
- };
- ipv4 = {
- address1 = "10.100.0.2/32";
- may-fail = "false";
- method = "manual";
- };
- ipv6 = {
- method = "disabled";
- };
- wireguard = {
- listen-port = "51820";
- private-key-flags = 1;
- #private-key = "dummy";
- };
- proxy = { };
- "wireguard-peer./6bWy02DhOSjaeXk+ol5ATgEYDDJvL+mTO9SCNvfIUQ=" = {
- allowed-ips = "0.0.0.0/0;";
- endpoint = "172.105.172.191:51820";
- persistent-keepalive = "25";
- };
- };
- };
- secrets.entries = [
- {
- matchId = "wg-nixnode";
- matchType = "wireguard";
- matchSetting = "wireguard";
- key = "private-key";
- file = config.sops.secrets."wg/nixy/priv".path;
- }
- ];
- };
-
- systemd.services."nm-file-secret-agent" = {
- serviceConfig.User = "boss";
- };
-
-
- # Set your time zone.
- time.timeZone = "NZ";
-
- # Configure network proxy if necessary
- # networking.proxy.default = "http://user:password@proxy:port/";
- # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
-
- # Select internationalisation properties.
- i18n.defaultLocale = "en_US.UTF-8";
- console = {
- font = "Lat2-Terminus16";
- #keyMap = "us";
- #useXkbConfig = true; # use xkbOptions in tty.
- };
-
- teh-nix.xorg = {
- enable = true;
- };
-
- programs.hyprland = {
- enable = false;
- #package = inputs.hyprland.packages.${pkgs.system}.hyprland;
- #portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;
- };
-
- security.pam.services.swaylock = {};
-
- # Enable CUPS to print documents.
- services.printing.enable = true;
- services.printing.drivers = with pkgs;[
- hplip
- ];
- services.avahi = {
- enable = true;
- nssmdns4 = true;
- openFirewall = true;
- };
-
- # Enable sound.
- #sound.enable = true;
- services.pipewire = {
- enable = true;
- alsa.enable = false;
- alsa.support32Bit = false;
- pulse.enable = true;
- };
-
- services.upower.enable = true;
-
- # Enable touchpad support (enabled default in most desktopManager).
- security.rtkit.enable = true;
- services.libinput = {
- enable = true;
- mouse = {
- accelProfile = "flat";
- };
- };
-
- # Define a user account. Don't forget to set a password with ‘passwd’.
- users.users.boss = {
- isNormalUser = true;
- extraGroups = [ "wheel" "networkmanager" "input" "uinput" ];
- };
-
- fonts.packages = with pkgs; [
- #(nerdfonts.override { fonts = [ "Cousine" ]; })
- nerd-fonts.cousine
- ];
-
- # List packages installed in system profile. To search, run:
- # $ nix search wget
- environment.systemPackages = with pkgs;
- [
- vim
- firefox
- pfetch
- fastfetch
- pinentry-gtk2
- git
- nm-file-secret-agent
- ];
- documentation.dev.enable = true;
-
- hardware.graphics.enable32Bit = true;
- programs.steam = {
- enable = true;
- package = pkgs.steam.override {
- extraEnv = {
- __NV_PRIME_RENDER_OFFLOAD=1;
- __NV_PRIME_RENDER_OFFLOAD_PROVIDER="NVIDIA-G0";
- __GLX_VENDOR_LIBRARY_NAME="nvidia";
- __VK_LAYER_NV_optimus="NVIDIA_only";
- };
- };
-
- extraCompatPackages = with pkgs; [
- proton-ge-bin
- ];
- };
-
- # Some programs need SUID wrappers, can be configured further or are
- # started in user sessions.
- # programs.mtr.enable = true;
- programs.gnupg = {
- agent = {
- enable = true;
- pinentryPackage = pkgs.pinentry-gtk2;
- };
- # enableSSHSupport = true;
- };
-
- hardware.bluetooth.enable = true; # enables support for Bluetooth
- hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
- services.blueman.enable = true;
-
- systemd.tmpfiles.rules = [
- "f /var/lib/systemd/linger/boss" # enables lingering
- ];
-
- # programs.dconf.enable = true;
-
-
- services.ratbagd.enable = true;
-
- # xdg.portal.enable = true;
- # services.flatpak.enable = true;
-
- stylix = {
- enable = true;
-
- base16Scheme = "${pkgs.base16-schemes}/share/themes/material-palenight.yaml";
-
- image = ../wallpaper.png;
- targets.grub.useWallpaper = true;
-
- opacity = {
- terminal = 0.8;
- };
-
- polarity = "dark";
-
- fonts = {
- monospace = {
- package = pkgs.nerd-fonts.cousine;
- name = "Cousine Nerd Font Mono";
- };
-
- serif = {
- package = pkgs.dejavu_fonts;
- name = "DejaVu Serif";
- };
-
- sansSerif = {
- package = pkgs.dejavu_fonts;
- name = "DejaVu Sans";
- };
-
- emoji = {
- package = pkgs.noto-fonts-color-emoji;
- name = "Noto Color Emoji";
- };
-
- sizes = {
- terminal = 10;
- applications = 10;
- desktop = 10;
- popups = 10;
- };
- };
-
- cursor = {
- package = pkgs.nordzy-cursor-theme;
- name = "Nordzy-cursors";
- size = 20;
- };
- };
-
- # Copy the NixOS configuration file and link it from the resulting system
- # (/run/current-system/configuration.nix). This is useful in case you
- # accidentally delete configuration.nix.
- # system.copySystemConfiguration = true;
-
- # This value determines the NixOS release from which the default
- # settings for stateful data, like file locations and database versions
- # on your system were taken. It‘s perfectly fine and recommended to leave
- # this value at the release version of the first install of this system.
- # Before changing this value read the documentation for this option
- # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
- system.stateVersion = "24.05"; # Did you read the comment?
-
-}
diff --git a/flake.lock b/flake.lock
index 5b56429..b768583 100644
--- a/flake.lock
+++ b/flake.lock
@@ -232,6 +232,26 @@
"flake-parts_2": {
"inputs": {
"nixpkgs-lib": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1790898470,
+ "narHash": "sha256-zTwuwezD0w3hpga6a6P8emidzAZFyWqlNeRBlpWOOl8=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "024633cd702b10285db5cb19b40ad48d2399ba60",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_3": {
+ "inputs": {
+ "nixpkgs-lib": [
"stylix",
"nixpkgs"
]
@@ -507,6 +527,21 @@
"type": "github"
}
},
+ "import-tree": {
+ "locked": {
+ "lastModified": 1788467110,
+ "narHash": "sha256-ljEMTXP/rH0tOvDzc9gzwww6KcHRPRnEHzd9lK48V7s=",
+ "owner": "vic",
+ "repo": "import-tree",
+ "rev": "eb1b52eaecc57f7c136d07ae8a93e724dfecac46",
+ "type": "github"
+ },
+ "original": {
+ "owner": "vic",
+ "repo": "import-tree",
+ "type": "github"
+ }
+ },
"libnbtplusplus": {
"flake": false,
"locked": {
@@ -744,8 +779,10 @@
"STK": "STK",
"claude-desktop": "claude-desktop",
"deploy-rs": "deploy-rs",
+ "flake-parts": "flake-parts_2",
"home-manager": "home-manager",
"hyprlock": "hyprlock",
+ "import-tree": "import-tree",
"neodrive-website": "neodrive-website",
"nil": "nil",
"nixcord": "nixcord",
@@ -806,7 +843,7 @@
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme",
- "flake-parts": "flake-parts_2",
+ "flake-parts": "flake-parts_3",
"gnome-shell": "gnome-shell",
"nixpkgs": [
"nixpkgs"
diff --git a/flake.nix b/flake.nix
index fcdf0cf..ec936c3 100644
--- a/flake.nix
+++ b/flake.nix
@@ -3,6 +3,11 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05";
+ flake-parts = {
+ url = "github:hercules-ci/flake-parts";
+ inputs.nixpkgs-lib.follows = "nixpkgs";
+ };
+ import-tree.url = "github:vic/import-tree";
home-manager = {
url = "github:nix-community/home-manager/release-26.05";
inputs.nixpkgs.follows = "nixpkgs";
@@ -77,72 +82,5 @@
# };
};
- outputs = inputs@{self, nixpkgs, ... }: let
- system = "x86_64-linux";
- pkgs = import nixpkgs { inherit system; };
- deployPkgs = import nixpkgs {
- inherit system;
- overlays = [
- inputs.deploy-rs.overlays.default # or deploy-rs.overlays.default
- (self: super: { deploy-rs = { inherit (pkgs) deploy-rs; lib = super.deploy-rs.lib; }; })
- ];
- };
- in
- {
- nixosConfigurations = {
- nixy = nixpkgs.lib.nixosSystem {
- system = "x86_64-linux";
- specialArgs = {inherit inputs;};
- modules = [
- ./my-pkgs
- ./modules
-
- ./hardware-setups/tuf.nix
- ./computers/nixy.nix
-
- {
- environment.systemPackages = [
- deployPkgs.deploy-rs.deploy-rs
- ];
- }
-
- inputs.home-manager.nixosModules.home-manager
- {
- home-manager.useGlobalPkgs = true;
- home-manager.useUserPackages = true;
-
- home-manager.users.boss = import ./home-manager/home.nix;
- home-manager.extraSpecialArgs = {inherit inputs;};
- }
-
- inputs.stylix.nixosModules.stylix
- ];
- };
- nixnode = nixpkgs.lib.nixosSystem {
- system = "x86_64-linux";
- specialArgs = {inherit inputs;};
- modules = [
- ./modules
- ./hardware-setups/linode.nix
- ./computers/nixnode.nix
- ];
- };
- };
-
- deploy.nodes.nixnode = {
- hostname = "tehbox.org";
- profiles.system = {
- user = "root";
- sshUser = "boss";
- interactiveSudo = true;
- path = deployPkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.nixnode;
- };
- };
-
- checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) inputs.deploy-rs.lib;
-
- packages.x86_64-linux.teh-website = (nixpkgs.legacyPackages.x86_64-linux.callPackage ./website { });
- packages.x86_64-linux.stk-installers = (nixpkgs.legacyPackages.x86_64-linux.callPackage ./my-pkgs/stk-installers.nix { });
- };
-
+ outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules);
}
diff --git a/hardware-setups/linode.nix b/hardware-setups/linode.nix
deleted file mode 100644
index d952ae5..0000000
--- a/hardware-setups/linode.nix
+++ /dev/null
@@ -1,40 +0,0 @@
-{ config, lib, pkgs, modulesPath, ... }:
-
-{
- imports =
- [ (modulesPath + "/profiles/qemu-guest.nix")
- ];
-
- boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
- boot.initrd.kernelModules = [ ];
- boot.kernelModules = [ ];
- boot.extraModulePackages = [ ];
-
- boot.kernelParams = [ "console=ttyS0,19200n8" ];
- boot.loader.grub.extraConfig = ''
- serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1;
- terminal_input serial;
- terminal_output serial
- '';
- boot.loader.grub.forceInstall = true;
- boot.loader.grub.device = "nodev";
- boot.loader.timeout = 10;
-
- fileSystems."/" =
- { device = "/dev/sda";
- fsType = "ext4";
- };
-
- swapDevices =
- [ { device = "/dev/sdb"; }
- ];
-
- # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
- # (the default) this is the recommended approach. When using systemd-networkd it's
- # still possible to use this option, but it's recommended to use it in conjunction
- # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
- networking.useDHCP = lib.mkDefault true;
- # networking.interfaces.enp0s5.useDHCP = lib.mkDefault true;
-
- nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
-}
diff --git a/hardware-setups/tuf.nix b/hardware-setups/tuf.nix
deleted file mode 100644
index 20cc5f9..0000000
--- a/hardware-setups/tuf.nix
+++ /dev/null
@@ -1,53 +0,0 @@
-# Do not modify this file! It was generated by ‘nixos-generate-config’
-# and may be overwritten by future invocations. Please make changes
-# to /etc/nixos/configuration.nix instead.
-{ config, lib, pkgs, modulesPath, ... }:
-
-{
- imports =
- [ (modulesPath + "/installer/scan/not-detected.nix")
- ];
-
- boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
- boot.initrd.kernelModules = [ "dm-snapshot" "cryptd"];
- boot.kernelModules = [ "kvm-amd" ];
- boot.extraModulePackages = [ ];
- boot.initrd.luks.devices.cryptroot = {
- device = "/dev/disk/by-uuid/18e2ffad-9ffb-4c3a-a82f-dd8098171427";
- preLVM = true;
- };
-
- fileSystems."/" =
- { device = "/dev/disk/by-uuid/db909240-4006-4ca8-a03a-3e3fc60cba17";
- fsType = "ext4";
- };
-
- fileSystems."/home" =
- { device = "/dev/disk/by-uuid/9ef8fad1-08cb-4c7a-9db1-3a37097544b0";
- fsType = "ext4";
- neededForBoot = true;
- };
-
- fileSystems."/boot" =
- { device = "/dev/disk/by-uuid/6FC0-9F1C";
- fsType = "vfat";
- options = [ "fmask=0022" "dmask=0022" ];
- };
-
- swapDevices =
- [ { device = "/dev/disk/by-uuid/e1e972c8-3bb9-4131-a77f-fdea9f086a4d"; }
- ];
-
- # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
- # (the default) this is the recommended approach. When using systemd-networkd it's
- # still possible to use this option, but it's recommended to use it in conjunction
- # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
- networking.useDHCP = lib.mkDefault true;
- # networking.interfaces.enp2s0.useDHCP = lib.mkDefault true;
- # networking.interfaces.enp5s0f3u1.useDHCP = lib.mkDefault true;
- # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
-
- nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
- hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
- hardware.enableAllFirmware = true;
-}
diff --git a/home-manager/YATwm/default.nix b/home-manager/YATwm/default.nix
deleted file mode 100644
index f63c8ca..0000000
--- a/home-manager/YATwm/default.nix
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- pkgs,
- inputs,
- lib,
- ...
-} : {
- imports = [
- ../polybar
- ../rofi
- ../kitty
- inputs.YATwm.homeManagerModules.default
- ];
- home.packages = with pkgs; [
- i3lock
- xss-lock
- networkmanagerapplet
- flameshot
- picom
- nitrogen
- pamixer
- kitty
- alacritty
- ];
-
- xsession.windowManager.YATwm = {
- enable = true;
- package = inputs.YATwm.packages.x86_64-linux.YATwm;
- useEmacsBinds = true;
- quitKey = "C-s-g";
- swapMods = false;
- keybinds = let
- left = "h";
- right = "l";
- up = "k";
- down = "j";
- wsBind = key: ws: {
- "s-${key}" = "changeWS ${ws}";
- "s-S-${key}" = "wToWS ${ws}";
- };
- wsBinds = workspaces: lib.attrsets.concatMapAttrs (key: ws: wsBind key ws) workspaces;
- in {
- # Important
- "s-E" = "exit";
- "s-R" = "reload";
-
- # Directions
- "s-${left}" = "focChange left";
- "s-${right}" = "focChange right";
- "s-${up}" = "focChange up";
- "s-${down}" = "focChange down";
-
- # Tiling
- "s-t" = "toggle";
- "s-f" = "fullscreen";
-
- # Application shortcuts
- "s-d" = "bashSpawn rofi -i -show drun -disable-history";
- "s-D" = "bashSpawn prime-run rofi -i -show drun -disable-history";
- "s-g" = "bashSpawn ~/bin/rofi-passmenu";
- "s-RET" = "bashSpawn kitty";
- # "s-r k" = "spawn kitty";
- "s-c" = "spawn firefox";
- "s-S--" = "bashSpawn emacsclient -c";
- "s-S" = "spawn flameshot gui";
- "s-x" = "spawn loginctl lock-session";
- "s-X" = "bashSpawn loginctl lock-session && systemctl suspend";
- "s-Q" = "kill";
-
- # Sound
- "s-[" = "spawn playerctl -p firefox play-pause";
- "s-]" = "spawn playerctl -p spotify play-pause";
-
- # Special workspaces
- "s-p s" = "changeWS 11";
- "s-S-p s" = "wToWS 11";
- } //
- wsBinds {
- "1" = "1";
- "2" = "2";
- "3" = "3";
- "4" = "4";
- "5" = "5";
- "6" = "6";
- "7" = "7";
- "8" = "8";
- "9" = "9";
- "0" = "10";
- };
- workspaces = [
- {name = "1: A";}
- {name = "2: B";}
- {name = "3: C";}
- {name = "4: D";}
- {name = "5: E";}
- {name = "6: F"; monitorPriorities = [2 1];}
- {name = "7: G"; monitorPriorities = [2 1];}
- {name = "8: H"; monitorPriorities = [2 1];}
- {name = "9: I"; monitorPriorities = [2 1];}
- {name = "10: J"; monitorPriorities = [2 1];}
- {name = "S"; monitorPriorities = [1];}
- ];
- startup = [
- {command = "~/.config/polybar/launch.sh"; once = false;}
- {command = "picom --legacy-backends -fD 3"; once = false;}
- {command = "xss-lock --transfer-sleep-lock -- i3lock -eti ~/Documents/lockscreen.png --nofork"; bash = false;}
- {command = "nitrogen --restore";}
- {command = "nm-applet"; once = false; bash = false;}
- ];
- #extraConfig = "bindmode normal\n" + (builtins.readFile ./config);
- };
-}
diff --git a/home-manager/emacs/default.nix b/home-manager/emacs/default.nix
deleted file mode 100644
index 47c3fdd..0000000
--- a/home-manager/emacs/default.nix
+++ /dev/null
@@ -1,35 +0,0 @@
-{ pkgs, config, ... } :
-let
- tex = (pkgs.texlive.combine {
- inherit (pkgs.texlive) scheme-medium
- dvisvgm dvipng # for preview and export as html
- # svg transparent
- etoolbox
- subfiles
- enumitem
- wrapfig amsmath ulem hyperref capt-of;
- });
- myEmacs = (pkgs.emacsPackagesFor pkgs.emacs30).emacsWithPackages (epkgs: with epkgs; [
- # vterm
- # ghostel
- treesit-grammars.with-all-grammars
- ]);
-in
-{
- services.emacs = {
- enable = true;
- package = myEmacs;
- };
-
- home.packages = with pkgs; [
- mu
- emacsPackages.mu4e
- isync
- ispell
- poppler-utils
- tex
- ghostscript
- haskell-language-server
- myEmacs
- ];
-}
diff --git a/home-manager/home.nix b/home-manager/home.nix
deleted file mode 100644
index 2017720..0000000
--- a/home-manager/home.nix
+++ /dev/null
@@ -1,210 +0,0 @@
-{ pkgs, lib, inputs, ... }:
-let
- claude-code-latest = pkgs.claude-code.override {
- manifest = lib.importJSON ./claude-code-manifest-2.1.282.json;
- };
-in
-{
-
- imports = [
- ./shells/bash.nix
- ./emacs
- #./hyprland
- ./i3
- # ./YATwm
- ./kitty
- inputs.spicetify-nix.homeManagerModules.default
- inputs.nixcord.homeModules.nixcord
- inputs.zen-browser.homeModules.twilight-official
- #inputs.stylix.homeManagerModules.stylix
- ];
-
- home = {
- stateVersion = "24.05";
- username = "boss";
- homeDirectory = "/home/boss";
- };
-
- # The home.packages option allows you to install Nix packages into your
- # environment.
- # nixpkgs.config.allowUnfree = true;
- home.packages = with pkgs; [
- feh
- pass
- # spotify
- playerctl
- libqalculate
- libreoffice
- hunspell
- hunspellDicts.en_AU
- logisim-evolution
- thunderbird
- xdotool
- discord
- # (discord.override {
- # withOpenASAR = true;
- # withVencord = true;
- # })
- # vesktop
- mumble
- gimp
- bottom
- xfce.thunar
- mpv
- man-pages
- man-pages-posix
- # (inputs.plover-flake.packages.${system}.plover.with-plugins (ps: with ps;[
- # plover-dict-commands
- # plover-console-ui
- # plover-controller
- # ]))
- pavucontrol
- unzip zip
- appimage-run
- # lunar-client
- libnotify
- xclip
- (python3.withPackages (ps: with ps; [
- python-lsp-server
- numpy
- matplotlib
- jupyter
- jupytext
- pandas
- pydot
- scikit-learn
- nbdev
- pillow
- ]))
- graphviz
- alacritty
- # nyxt
- wireguard-tools
- brightnessctl
- # inputs.nil.packages.${system}.default
- nil
- #inputs.polymc.packages.${system}.default
- jre8
- #inputs.zen-browser.packages."${system}".default
- piper
- qbittorrent
- # sbcl
- superTuxKart
- typst
- sops
- ffmpeg
- ghc
- # hytale-launcher
- # inputs.hytale-launcher.packages.${pkgs.system}.default
- #adom
- flatpak
- deadlock-mod-manager
- nh
- claude-code-latest
- inputs.claude-desktop.packages.${system}.claude-desktop
- # openttd
- ];
-
- nix = {
- #package = pkgs.nix;
- settings.experimental-features = [ "nix-command" "flakes" ];
- };
-
- home.sessionVariables = {
- EDITOR = "emacsclient -c";
- MAKEFLAGS = " -j16 ";
- MOZ_ENABLE_WAYLAND = 1;
- };
-
-
- programs.home-manager.enable = true;
-
- programs.direnv = {
- enable = true;
- enableBashIntegration = true;
- nix-direnv.enable = true;
- };
-
- services.gpg-agent.enable = true;
- services.gpg-agent.pinentry.package = pkgs.pinentry-gtk2;
-
- services.dunst = {
- enable = true;
- settings = {
- global = {
- follow = "keyboard";
- frame_width = 0;
- };
- };
- };
-
- programs.obs-studio = {
- enable = true;
-
- # optional Nvidia hardware acceleration
- # package = (
- # pkgs.obs-studio.override {
- # cudaSupport = true;
- # }
- # );
-
- plugins = with pkgs.obs-studio-plugins; [
- obs-pipewire-audio-capture
- input-overlay
- ];
- };
-
- # services.easyeffects.enable = true;
-
- services.pass-secret-service.enable = true;
- # Start with the X session rather than at boot, so it inherits DISPLAY/XAUTHORITY
- # and gpg can show the GTK pinentry. Otherwise apps get logged out.
- systemd.user.services.pass-secret-service = {
- Unit.After = [ "graphical-session.target" ];
- Unit.PartOf = lib.mkForce [ "graphical-session.target" ];
- Install.WantedBy = lib.mkForce [ "graphical-session.target" ];
- };
-
-
- programs.firefox = {
- enable = true;
- };
- programs.zen-browser = {
- enable = true;
- setAsDefaultBrowser = true;
- };
-
- # programs.nixcord = {
- # enable = true;
- # };
-
-
- stylix.targets.spicetify.enable = true;
- stylix.targets.firefox.profileNames = [ "default"];
- stylix.targets.zen-browser.profileNames = [ "default" ];
- # stylix.targets.nixcord.enable = true;
-
- programs.spicetify =
- let
- spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
- in
- {
- enable = true;
- spotifyLaunchFlags = "--disable-gpu --disable-software-rasterizer";
- enabledExtensions = with spicePkgs.extensions; [
- fullAppDisplay
- powerBar
- # addToQueueTop
- loopyLoop
- ];
- enabledCustomApps = with spicePkgs.apps; [
- newReleases
- lyricsPlus
- betterLibrary
- ];
- # theme = spicePkgs.themes.nightlight;
- };
-
-
- xsession.windowManager.command = lib.mkForce "$@";
-}
diff --git a/home-manager/hyprland/default.nix b/home-manager/hyprland/default.nix
deleted file mode 100644
index 4a0b9f3..0000000
--- a/home-manager/hyprland/default.nix
+++ /dev/null
@@ -1,151 +0,0 @@
-{
- pkgs,
- lib,
- inputs,
- ...
-}:
-{
- imports = [
- ../rofi
- ../kitty
- ../waybar
- ../hyprpaper
- ];
-
- home.file.".config/hypr/hyprlock.conf".source = ./hyprlock.conf;
-
- wayland.windowManager.hyprland= {
- enable = true;
- xwayland.enable = true;
- systemd.variables = ["--all"];
- #package = inputs.hyprland.packages.${pkgs.system}.hyprland;
- #portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;
- settings = {
- "$mod" = "SUPER";
- exec-once = [
- "waybar"
- "xss-lock --transfer-sleep-lock -- hyprlock"
- "nm-applet"
- "hyprpaper"
- ];
- bind =
- [
- "$mod, C, exec, firefox"
- ", Print, exec, grimblast copy area"
- "$mod, D, exec, rofi -i -show drun -disable-history"
- "$mod Shift, E, exit"
- "$mod, Return, exec, kitty"
- "$mod, T, togglesplit"
- "$mod Control, left, workspace, m-1"
- "$mod Control, h, workspace, m-1"
- "$mod Control, right, workspace, m+1"
- "$mod Control, l, workspace, m+1"
- "$mod, x, exec, hyprlock"
- "$mod Shift, x, exec, hyprlock"
- "$mod Shift, x, exec, systemctl suspend"
- "$mod Shift, MINUS, exec, emacsclient -c"
- "ALT, Tab, focusmonitor, +1"
- "$mod, G, exec, bash /home/boss/bin/rofi-passmenu"
- ", XF86AudioRaiseVolume, exec, pamixer -i 5"
- ", XF86AudioLowerVolume, exec, pamixer -d 5"
- "$mod Shift, Q, killactive"
- "$mod, F, fullscreen"
- "$mod Shift, space, togglefloating"
- "$mod, mouse:272, movewindow"
- ", XF86AudioPlay, exec, playerctl play-pause"
- "$mod, bracketleft, exec, playerctl -p firefox play-pause"
- "$mod, bracketright, exec, playerctl -p spotify play-pause"
- "$mod Shift, S, exec spectacle -r"
- ]
- ++ (
- # workspaces
- # binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
- builtins.concatLists (builtins.genList (
- x: let
- key = let
- c = (x + 1) / 10;
- in toString (x + 1 - (c * 10));
- in [
- "$mod, ${key}, workspace, ${toString (x + 1)}"
- "$mod SHIFT, ${key}, movetoworkspace, ${toString (x + 1)}"
- (lib.mkIf (x < 5)
- "$mod Control, ${key}, workspace, ${toString (x + 6)}"
- )
- "$mod Control, ${key}, workspace, ${toString (x + 1)}"
- ]
- )
- 10)
- )
- ++ (
- builtins.map (
- x: "$mod, ${ builtins.elemAt x 0}, movefocus, ${builtins.elemAt x 1}\nbind=$mod Shift, ${builtins.elemAt x 0}, movewindow, ${builtins.elemAt x 1}"
- )
- [
- ["h" "l"]
- ["left" "l"]
- ["j" "d"]
- ["down" "d"]
- ["k" "u"]
- ["up" "u"]
- ["l" "r"]
- ["right" "r"]
- ]
- );
- monitor =
- [
- "eDP-1, highrr, 0x0, 1"
- "HDMI-A-1, highrr, 1920x0, 1"
- ];
- workspace =
- (builtins.genList
- (x : "${toString (x + 1)},monitor:eDP-1")
- 5
- )
- ++ (builtins.genList
- (x : "${toString (x + 6)},monitor:HDMI-A-1")
- 5
- );
-
-
- input = {
- touchpad.natural_scroll = true;
- #touchpad.scroll_factor = 0.5;
- accel_profile = "flat";
- follow_mouse = true;
- kb_options = "caps:super";
- #sensitivity = 0.00;
- };
- decoration = {
- rounding = 10;
- drop_shadow = false;
- };
- animation = [
- "workspaces,1,5,easeOutQuint,slide"
- ];
- bezier = [
- "easeInOutCubic,0.65,0,0.35,1"
- "easeOutQuint,0.22,1,0.36,1"
- ];
- general = {
- #"col.inactive_border" = "rgb(2f2e43)";
- #"col.active_border" = "rgb(ab47bc)";
- border_size = 2;
- gaps_in = 6;
- gaps_out = 12;
- };
- windowrulev2 = [
- "opacity 0.8 override 0.8 override, title:Spotify$"
- ];
- };
- };
-
- home.packages = with pkgs; [
- ydotool
- xss-lock
- pamixer
- grimblast
- playerctl
- libsForQt5.spectacle
- inputs.hyprlock.packages.${system}.hyprlock
- ];
-}
diff --git a/home-manager/hyprpaper/default.nix b/home-manager/hyprpaper/default.nix
deleted file mode 100644
index 6509222..0000000
--- a/home-manager/hyprpaper/default.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- pkgs,
- ...
-}:
-{
- #home.file.".config/hypr/hyprpaper.conf".source = ./hyprpaper.conf;
- home.packages = with pkgs; [
- hyprpaper
- ];
-}
diff --git a/home-manager/i3/default.nix b/home-manager/i3/default.nix
deleted file mode 100644
index 0272d79..0000000
--- a/home-manager/i3/default.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-# let
-# nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-24.11";
-# pkgs = import nixpkgs { config = {}; overlays = []; };
-# in
-# {
-# i3-commands = pkgs.callPackage ./i3-commands.nix { };
-# }
-
-
-{
- config,
- pkgs,
- ...
-} : {
- imports = [
- ../polybar
- ../rofi
- ../kitty
- ../picom
- ];
- xsession.enable = true;
- xsession.windowManager.i3 = {
- enable = true;
- package = pkgs.i3;
- };
- xdg.configFile."i3/config".enable = false;
- home.file.".config/i3/config" = {
- source = ./config;
- onChange = "${pkgs.i3}/bin/i3-msg restart";
- };
- home.packages = with pkgs; [
- i3lock
- xss-lock
- networkmanagerapplet
- flameshot
- picom
- nitrogen
- pamixer
- (pkgs.callPackage ./i3-commands.nix { })
- (pkgs.callPackage ./rofi-passmenu.nix { })
- ];
-}
diff --git a/home-manager/i3/i3-commands.nix b/home-manager/i3/i3-commands.nix
deleted file mode 100644
index 68cf7b6..0000000
--- a/home-manager/i3/i3-commands.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- stdenv,
- lib
-}:
-stdenv.mkDerivation {
- pname = "i3-commands";
- version = "0.0.1";
-
- srcs = lib.cleanSourceWith {
- src = ./scripts;
- filter = path: type: baseNameOf path != "rofi-passmenu";
- };
-
- installPhase = ''
- runHook preInstall
- mkdir -p $out/bin
- install -D -m 755 ./* $out/bin
- runHook postInstall
- '';
-}
diff --git a/home-manager/kitty/default.nix b/home-manager/kitty/default.nix
deleted file mode 100644
index 7d7326b..0000000
--- a/home-manager/kitty/default.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- pkgs,
- config,
- ...
-}:
-{
- programs.kitty = {
- enable = true;
- keybindings = {
- "control+shift+c" = "copy_to_clipboard";
- "control+shift+v" = "paste_from_clipboard";
- };
- settings = {
- #font_family = "Cousine Nerd Font";
- #font_size = "10.0";
- #background_opacity = "0.8";
- term = "xterm-256color";
- enable_audio_bell = "no";
- mouse_hide_wait = 2;
- window_padding_width = 4;
- };
- #extraConfig = (builtins.readFile ./palenight.conf);
- };
-}
diff --git a/home-manager/picom/default.nix b/home-manager/picom/default.nix
deleted file mode 100644
index 1c13407..0000000
--- a/home-manager/picom/default.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- pkgs,
- config,
- ...
-}:
-{
- services.picom = {
- enable = true;
- fade = true;
- fadeDelta = 3;
- fadeExclude = [
- "window_type *= 'tooltip'"
- ];
- settings = {
- corner-radius = 10;
- };
- };
-}
diff --git a/home-manager/polybar/default.nix b/home-manager/polybar/default.nix
deleted file mode 100644
index 5b51ac7..0000000
--- a/home-manager/polybar/default.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- config,
- pkgs,
- ...
-} : {
- home.file.".config/polybar/launch.sh" = {
- source = ./launch.sh;
- executable = true;
- };
- home.file.".config/polybar/config.ini" = {
- source = ./config.ini;
-# onChange = ''
-#${pkgs.procps}/bin/pkill polybar
-#PATH=$PATH:${pkgs.polybarFull}/bin:${pkgs.lxrandr}/bin ~/.config/polybar/launch.sh
-#'';
- };
- home.packages = with pkgs; [
- polybarFull
- ];
-}
diff --git a/home-manager/rofi/default.nix b/home-manager/rofi/default.nix
deleted file mode 100644
index 5e900c3..0000000
--- a/home-manager/rofi/default.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- pkgs,
- config,
- ...
-}: {
- home.file.".config/rofi" = {
- source = ./config;
- recursive = true;
- };
- home.packages = [
- pkgs.rofi
- ];
-}
diff --git a/home-manager/waybar/default.nix b/home-manager/waybar/default.nix
deleted file mode 100644
index 7649870..0000000
--- a/home-manager/waybar/default.nix
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- config,
- pkgs,
- ...
-} : {
- home.file.".config/waybar/" = {
- source = ./config;
- onChange = "${pkgs.procps}/bin/pkill waybar && ${pkgs.hyprland}/bin/hyprctl dispatch exec waybar || ${pkgs.hyprland}/bin/hyprctl dispatch exec waybar";
- recursive = true;
- };
- home.packages = with pkgs; [
- waybar
- pamixer
- wtype
- ];
-}
diff --git a/modules/cgit.nix b/modules/cgit.nix
deleted file mode 100644
index af4ecf2..0000000
--- a/modules/cgit.nix
+++ /dev/null
@@ -1,157 +0,0 @@
-{ pkgs, lib, config, ... }:
-let
- cfg = config.teh-nix.services.cgit;
- cgitrc = pkgs.writeText "cgitrc" ''
-css=/static/cgit.css
-logo=/static/cgit.png
-favicon=/static/favicon.ico
-repository-sort=age
-
-root-title=${cfg.title}
-root-desc=${cfg.description}
-
-enable-blame=1
-enable-commit-graph=1
-enable-log-filecount=1
-enable-log-linecount=1
-enable-index-links=1
-
-snapshots=tar.gz zip
-enable-http-clone=1
-clone-prefix=https://${cfg.domain}
-
-readme=:README
-readme=:readme
-readme=:readme.txt
-readme=:README.txt
-readme=:readme.md
-readme=:README.md
-
-${cfg.extraConfig}
-
-about-filter=${cfg.package}/lib/cgit/filters/about-formatting.sh
-source-filter=${cfg.package}/lib/cgit/filters/syntax-highlighting.py
-
-enable-git-config=1
-scan-path=${cfg.directory}
-'';
-in
-{
- options.teh-nix.services.cgit = with lib;{
- enable = mkEnableOption "Enable cgit";
- user = mkOption {
- type = types.str;
- default = "cgit";
- description = "Username for the user that will run cgit";
- };
- authorizedKeys = lib.mkOption {
- type = types.listOf types.str;
- default = [ ];
- description = "List of ssh keys for the cgit user (cgit user should own all repos)";
- };
- authorizedUsers = lib.mkOption {
- type = types.listOf types.str;
- default = [ ];
- description = "List of users that should have access to the cgit directory";
- };
- directory = mkOption {
- type = types.str;
- default = "/srv/cgit/repos";
- description = "Directory for cgit (cgit user's home directory";
- };
- description = mkOption {
- type = types.str;
- default = "Cgit instance hosted with nixos";
- description = "Description of the cgit website";
- };
- title = mkOption {
- type = types.str;
- default = "Cgit + Nix";
- description = "Title of the cgit website";
- };
- domain = mkOption {
- type = types.str;
- default = "git.example.com";
- description = "Domain to host it on";
- };
- useACMEHost = mkOption {
- type = types.str;
- default = "";
- description = "SSL cert to use if already aquired using security.acme.certs";
- };
- enableACME = mkEnableOption "Enable ACME with nginx";
- onlySSL = mkOption {
- type = types.bool;
- default = false;
- description = "Only allow ssl connections";
- };
- forceSSL = mkOption {
- type = types.bool;
- default = true;
- description = "Force ssl connections";
- };
- package = mkPackageOption pkgs "cgit" { };
- extraConfig = mkOption {
- type = types.str;
- default = "";
- description = "Extra config to be appended to cgitrc";
- };
- };
-
- config = lib.mkIf cfg.enable {
- environment.systemPackages = [ pkgs.git cfg.package ];
- users = {
- groups.${cfg.user} = {
- members = cfg.authorizedUsers;
- };
- users.${cfg.user} = {
- createHome = true;
- homeMode = "770";
- home = cfg.directory;
- isSystemUser = true;
- shell = "${pkgs.git}/bin/git-shell";
- openssh.authorizedKeys.keys = cfg.authorizedKeys;
- group = cfg.user;
- };
- };
-
-
- services.fcgiwrap.instances.cgit = {
- socket = {
- user = cfg.user;
- group = "nginx";
- type = "unix";
- mode = "0660";
- };
- process = {
- user = cfg.user;
- group = cfg.user;
- };
- };
-
- services.nginx.enable = true;
- services.nginx.virtualHosts.${cfg.domain} = {
- locations."~* ^/static/(.+.(ico|css|png))$" = {
- extraConfig = ''
-alias ${cfg.package}/cgit/$1;
-'';
- };
- locations."/" = {
- extraConfig = ''
-include ${pkgs.nginx}/conf/fastcgi_params;
-fastcgi_param CGIT_CONFIG ${cgitrc};
-fastcgi_param SCRIPT_FILENAME ${cfg.package}/cgit/cgit.cgi;
-fastcgi_split_path_info ^(/?)(.+)$;
-fastcgi_param PATH_INFO $fastcgi_path_info;
-fastcgi_param QUERY_STRING $args;
-fastcgi_param HTTP_HOST $server_name;
-fastcgi_pass unix:${config.services.fcgiwrap.instances.cgit.socket.address};
- '';
- };
- enableACME = cfg.enableACME;
- forceSSL = cfg.forceSSL;
- } // lib.optionalAttrs (cfg.useACMEHost != "") {
- useACMEHost = "${cfg.useACMEHost}";
- };
- };
-}
diff --git a/modules/computers/nixnode.nix b/modules/computers/nixnode.nix
new file mode 100644
index 0000000..3cf6999
--- /dev/null
+++ b/modules/computers/nixnode.nix
@@ -0,0 +1,347 @@
+{ inputs, config, ... }:
+let
+ nixos = config.flake.modules.nixos;
+in
+{
+ flake.nixosConfigurations.nixnode = inputs.nixpkgs.lib.nixosSystem {
+ modules = [ nixos.nixnode ];
+ };
+
+ flake.modules.nixos.nixnode =
+ # Edit this configuration file to define what should be installed on
+ # your system. Help is available in the configuration.nix(5) man page, on
+ # https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
+
+ { config, lib, pkgs, ... }:
+
+ {
+ imports =
+ [
+ nixos.teh-nix
+ nixos.linode
+ inputs.STK.nixosModules.default
+ inputs.sops.nixosModules.sops
+ inputs.nixos-mailserver.nixosModules.default
+ inputs.neodrive-website.nixosModules.default
+ ];
+
+ teh-nix.nix.enable = true;
+
+ # Use the GRUB 2 boot loader.
+ boot.loader.grub.enable = true;
+ # boot.loader.grub.efiSupport = true;
+ # boot.loader.grub.efiInstallAsRemovable = true;
+ # boot.loader.efi.efiSysMountPoint = "/boot/efi";
+ # Define on which hard drive you want to install Grub.
+ # boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only
+
+ networking.hostName = "nixnode"; # Define your hostname.
+ # Pick only one of the below networking options.
+ # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
+ networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
+
+ # Set your time zone.
+ time.timeZone = "NZ";
+
+ # Configure network proxy if necessary
+ # networking.proxy.default = "http://user:password@proxy:port/";
+ # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
+
+ # Select internationalisation properties.
+ # i18n.defaultLocale = "en_US.UTF-8";
+ # console = {
+ # font = "Lat2-Terminus16";
+ # keyMap = "us";
+ # useXkbConfcpfig = true; # use xkb.options in tty.
+ # };
+
+ # Enable the X11 windowing system.
+ # services.xserver.enable = true;
+
+ security.sudo.wheelNeedsPassword = false;
+
+ sops.defaultSopsFile = ../../secrets/general.yaml;
+ sops.defaultSopsFormat = "yaml";
+
+ sops.age.keyFile = "/home/boss/.config/sops/age/keys.txt";
+
+ sops.secrets = {
+ #"wg/nixy/pub" = { };
+ "wg/nixnode/priv" = { };
+ "acme/linode" = {
+ owner = "acme";
+ mode = "440";
+ };
+ "mail/boss" = { };
+ "nginx/dashboard-htpasswd" = {
+ owner = "nginx";
+ mode = "400";
+ };
+ };
+
+ networking.firewall = {
+ enable = true;
+ allowedTCPPorts = [ 80 443 ];
+ allowedUDPPorts = [ 51820 ];
+ };
+
+ security.acme.acceptTerms = true;
+ # security.acme.useRoot = true;
+ security.acme.defaults.email = "boss@tehbox.org";
+ # security.acme.certs = {
+ # "tehbox.org" =
+ # {
+ # webroot = "/var/lib/acme/acme-challenge/";
+ # email = "boss@tehbox.org";
+ # extraDomainNames = (map (sub: sub + ".tehbox.org" ) [ "www" "git" ]);
+ # #dnsProvider = "linode";
+ # # dnsResolver = "92.123.94.2";
+ # # dnsPropagationCheck = false;
+ # #environmentFile = environmentFile;
+ # };
+ # };
+ users.groups.acme.members = [ "nginx" ];
+
+ # Wireguard
+ networking = {
+ nat = {
+ enable = true;
+ externalInterface = "eth0";
+ internalInterfaces = [ "wg0" ];
+ };
+
+ wireguard.interfaces.wg0 = {
+ ips = [ "10.100.0.1/24" ];
+ listenPort = 51820;
+
+ postSetup = ''
+${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
+'';
+ postShutdown = ''
+${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
+'';
+
+ privateKeyFile = config.sops.secrets."wg/nixnode/priv".path;
+
+ peers = [
+ {
+ name = "nixy";
+ publicKey = "FMkFU9k+YeCvj48+WDVglySgoncbITqkS//o2e+TClY=";
+ allowedIPs = [ "10.100.0.2/32" ];
+ }
+ ];
+ };
+ };
+
+ services.nginx = {
+ enable = true;
+ # Log the vhost at the start of each line ("vcombined") so goaccess
+ # can split traffic by subdomain
+ commonHttpConfig = ''
+log_format vcombined '$host:$server_port $remote_addr - $remote_user [$time_local] '
+ '"$request" $status $body_bytes_sent '
+ '"$http_referer" "$http_user_agent"';
+access_log /var/log/nginx/access.log vcombined;
+'';
+ # virtualHosts.${config.mailserver.fqdn}.enableACME = true;
+ virtualHosts = {
+ "tehbox.org" = {
+ root = "${inputs.self.packages.x86_64-linux.teh-website}/srv/www";
+ serverAliases = [ "www.tehbox.org" ];
+ enableACME = true;
+ forceSSL = true;
+ };
+ "files.tehbox.org" = {
+ root = "/srv/files";
+ enableACME = true;
+ forceSSL = true;
+ };
+ # "stk.lug.ac" = {
+ # root = "${inputs.self.packages.x86_64-linux.stk-installers}/srv/www";
+ # enableACME = true;
+ # forceSSL = true;
+ # locations."/".extraConfig = "autoindex on;\n";
+ # };
+ "dashboard.tehbox.org" = {
+ root = "/var/lib/goaccess/html";
+ basicAuthFile = config.sops.secrets."nginx/dashboard-htpasswd".path;
+ enableACME = true;
+ forceSSL = true;
+ };
+ "_" = {
+ globalRedirect = "tehbox.org";
+ };
+ };
+ };
+
+ # Web traffic dashboard, rebuilt from the nginx access log every 10 minutes.
+ # --persist/--restore keep the totals in /var/lib/goaccess/db across log rotations.
+ systemd.services.goaccess-report = {
+ description = "Build goaccess report for dashboard.tehbox.org";
+ serviceConfig = {
+ Type = "oneshot";
+ User = "nginx";
+ Group = "nginx";
+ StateDirectory = [ "goaccess" "goaccess/db" "goaccess/html" ];
+ };
+ script = ''
+${pkgs.goaccess}/bin/goaccess /var/log/nginx/access.log \
+ --log-format=VCOMBINED \
+ --num-tests=0 \
+ --no-query-string \
+ --persist --restore --db-path=/var/lib/goaccess/db \
+ --html-report-title="tehbox.org traffic" \
+ -o /var/lib/goaccess/html/index.html
+'';
+ };
+ systemd.timers.goaccess-report = {
+ wantedBy = [ "timers.target" ];
+ timerConfig = {
+ OnCalendar = "*:0/10";
+ Persistent = true;
+ };
+ };
+
+ teh-nix.services.cgit = {
+ enable = true;
+ authorizedKeys = config.users.users.boss.openssh.authorizedKeys.keys;
+ authorizedUsers = [ "boss" ];
+ domain = "git.tehbox.org";
+ enableACME = true;
+ # useACMEHost = "tehbox.org";
+ forceSSL = true;
+ # onlySSL = true;
+ };
+
+ services.neodrive-website = {
+ enable = true;
+ domain = "neodrive.tehbox.org";
+ };
+
+ services.znc = {
+ enable = true;
+ mutable = true;
+ useLegacyConfig = false;
+ openFirewall = true;
+ config = {
+ SSLCertFile = "/var/lib/acme/tehbox.org/key.pem";
+ LoadModule = [ "webadmin" ];
+ User.boss = {
+ Admin = true;
+ Pass.password = {
+ Method = "sha256";
+ Hash = "401e8fed9a3ab1f93047b7465fd7cc6b0ca5aaed6b1c0482f0f4331ebdca8647";
+ Salt = "*F_-,pqOdiJi;p)JoMnm";
+ };
+ };
+ User.komodo = {
+ Admin = false;
+ Pass.password = {
+ Method = "sha256";
+ Hash = "2c624debe3e2672383346230b6acad82192e40df05666481f792a9dd97d935cc";
+ Salt = "q9At0+KZvmofZil(3us1";
+ };
+ };
+ };
+ };
+
+ services.openssh = {
+ enable = true;
+ settings.PermitRootLogin = "no";
+ settings.PasswordAuthentication = false;
+ };
+
+ services.superTuxKarts = {
+ enable = true;
+ port = 2759;
+ package = pkgs.superTuxKart;
+ serverOptions = {
+ server-name = "LUG STK server";
+ server-mode = 3;
+ server-difficulty = 3;
+ server-max-players = 16;
+ track-voting = false;
+ voting-timeout = 15;
+ private-server-password = "lug@uoa";
+ motd = "Server for LUG@UoA\nChampionship coming soon!";
+ live-spectate = true;
+ server-configurable = true;
+ };
+ };
+
+ mailserver = {
+ enable = true;
+ stateVersion = 3;
+ fqdn = "tehbox.org";
+ domains = [ "tehbox.org" ];
+
+ x509.useACMEHost = config.mailserver.fqdn;
+
+ loginAccounts = {
+ "boss@tehbox.org" = {
+ hashedPasswordFile = config.sops.secrets."mail/boss".path;
+ aliases = ["postmaster@tehbox.org"];
+ };
+ };
+
+ # certificateScheme = "acme";
+ };
+
+ users.users.boss = {
+ isNormalUser = true;
+ extraGroups = [ "wheel" "networkmanager"]; # Enable ‘sudo’ for the user.
+ home = "/home/boss";
+ openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJOukEKExoF6vr3vciQN8pBdd4FtZtRzqIGFJrUvllOY boss@nixy" ];
+ };
+ users.groups.files.members = [ "boss" "nginx" ];
+ users.groups.nginx.members = [ "nginx" "znc" ];
+
+ environment.systemPackages = with pkgs; [
+ vim
+ emacs
+ inetutils
+ mtr
+ sysstat
+ git
+ goaccess
+ inputs.self.packages.x86_64-linux.teh-website
+ # inputs.self.packages.x86_64-linux.stk-installers
+ ];
+
+
+ # Open ports in the firewall.
+ # networking.firewall.allowedTCPPorts = [ ... ];
+ # networking.firewall.allowedUDPPorts = [ ... ];
+ # Or disable the firewall altogether.
+ # networking.firewall.enable = false;
+
+ networking.usePredictableInterfaceNames = false;
+ networking.useDHCP = false;
+ networking.interfaces.eth0.useDHCP = true;
+
+ # Copy the NixOS configuration file and link it from the resulting system
+ # (/run/current-system/configuration.nix). This is useful in case you
+ # accidentally delete configuration.nix.
+ # system.copySystemConfiguration = true;
+
+ # This option defines the first version of NixOS you have installed on this particular machine,
+ # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
+ #
+ # Most users should NEVER change this value after the initial install, for any reason,
+ # even if you've upgraded your system to a new NixOS release.
+ #
+ # This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
+ # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
+ # to actually do that.
+ #
+ # This value being lower than the current NixOS release does NOT mean your system is
+ # out of date, out of support, or vulnerable.
+ #
+ # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
+ # and migrated your data accordingly.
+ #
+ # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
+ system.stateVersion = "25.05"; # Did you read the comment?
+
+ };
+}
diff --git a/modules/computers/nixy.nix b/modules/computers/nixy.nix
new file mode 100644
index 0000000..95820f5
--- /dev/null
+++ b/modules/computers/nixy.nix
@@ -0,0 +1,343 @@
+{ inputs, config, ... }:
+let
+ nixos = config.flake.modules.nixos;
+ hm = config.flake.modules.homeManager;
+in
+{
+ flake.nixosConfigurations.nixy = inputs.nixpkgs.lib.nixosSystem {
+ modules = [ nixos.nixy ];
+ };
+
+ flake.modules.nixos.nixy =
+ # Edit this configuration file to define what should be installed on
+ # your system. Help is available in the configuration.nix(5) man page
+ # and in the NixOS manual (accessible by running ‘nixos-help’).
+
+ { config, pkgs, ... }:
+ {
+ imports =
+ [
+ nixos.teh-nix
+ nixos.my-pkgs
+ nixos.tuf
+ inputs.sops.nixosModules.sops
+ #inputs.spicetify-nix.nixosModules.default
+ inputs.home-manager.nixosModules.home-manager
+ inputs.stylix.nixosModules.stylix
+ ];
+
+ home-manager.useGlobalPkgs = true;
+ home-manager.useUserPackages = true;
+ home-manager.users.boss = hm.boss;
+
+ teh-nix.nix.enable = true;
+ programs.nix-ld.enable = true;
+ programs.nix-ld.libraries = with pkgs; [
+ # stdenv.cc.cc
+ glib
+ glibc
+ nspr
+ nss
+ dbus
+ atk
+ cups
+ cairo
+ gtk3
+ alsa-lib
+ expat
+ fontconfig
+ freetype
+ libgbm
+ libnotify
+ libsecret
+ libxkbcommon
+ mesa
+ pango
+ libX11
+ libXcomposite
+ libXcursor
+ libXdamage
+ libXext
+ libXfixes
+ libXi
+ libXrandr
+ libXrender
+ libXtst
+ libxcb
+ ];
+
+ # Use the systemd-boot EFI boot loader.
+ boot = {
+ loader.grub.enable = true;
+ loader.grub.device = "nodev";
+ loader.grub.efiSupport = true;
+ loader.grub.enableCryptodisk = true;
+ # loader.grub.useOSProber = true;
+ loader.efi.canTouchEfiVariables = true;
+ kernel.sysctl."kernel.sysrq" = 502;
+ plymouth.enable = true;
+ };
+
+
+ networking.hostName = "nixy"; # Define your hostname.
+ # Pick only one of the below networking options.
+ # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
+ networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
+
+ sops.defaultSopsFile = ../../secrets/general.yaml;
+ sops.defaultSopsFormat = "yaml";
+
+ sops.age.keyFile = "/home/boss/.config/sops/age/keys.txt";
+
+ sops.secrets = {
+ #"wg/nixnode/pub" = { };
+ "wg/nixy/priv" = {
+ restartUnits = [ "nm-file-secret-agent.service" ];
+ group = "networkmanager";
+ mode = "440";
+ };
+ };
+
+ networking.firewall = {
+ allowedUDPPorts = [ 51820 ];
+ allowedTCPPorts = [ 8081 ];
+ };
+ networking.networkmanager.ensureProfiles = {
+ profiles = {
+ wg-nixnode = {
+ connection = {
+ id = "wg-nixnode";
+ autoconnect = "false";
+ interface-name = "wg0";
+ type = "wireguard";
+ };
+ ipv4 = {
+ address1 = "10.100.0.2/32";
+ may-fail = "false";
+ method = "manual";
+ };
+ ipv6 = {
+ method = "disabled";
+ };
+ wireguard = {
+ listen-port = "51820";
+ private-key-flags = 1;
+ #private-key = "dummy";
+ };
+ proxy = { };
+ "wireguard-peer./6bWy02DhOSjaeXk+ol5ATgEYDDJvL+mTO9SCNvfIUQ=" = {
+ allowed-ips = "0.0.0.0/0;";
+ endpoint = "172.105.172.191:51820";
+ persistent-keepalive = "25";
+ };
+ };
+ };
+ secrets.entries = [
+ {
+ matchId = "wg-nixnode";
+ matchType = "wireguard";
+ matchSetting = "wireguard";
+ key = "private-key";
+ file = config.sops.secrets."wg/nixy/priv".path;
+ }
+ ];
+ };
+
+ systemd.services."nm-file-secret-agent" = {
+ serviceConfig.User = "boss";
+ };
+
+
+ # Set your time zone.
+ time.timeZone = "NZ";
+
+ # Configure network proxy if necessary
+ # networking.proxy.default = "http://user:password@proxy:port/";
+ # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
+
+ # Select internationalisation properties.
+ i18n.defaultLocale = "en_US.UTF-8";
+ console = {
+ font = "Lat2-Terminus16";
+ #keyMap = "us";
+ #useXkbConfig = true; # use xkbOptions in tty.
+ };
+
+ teh-nix.xorg = {
+ enable = true;
+ };
+
+ programs.hyprland = {
+ enable = false;
+ #package = inputs.hyprland.packages.${pkgs.system}.hyprland;
+ #portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;
+ };
+
+ security.pam.services.swaylock = {};
+
+ # Enable CUPS to print documents.
+ services.printing.enable = true;
+ services.printing.drivers = with pkgs;[
+ hplip
+ ];
+ services.avahi = {
+ enable = true;
+ nssmdns4 = true;
+ openFirewall = true;
+ };
+
+ # Enable sound.
+ #sound.enable = true;
+ services.pipewire = {
+ enable = true;
+ alsa.enable = false;
+ alsa.support32Bit = false;
+ pulse.enable = true;
+ };
+
+ services.upower.enable = true;
+
+ # Enable touchpad support (enabled default in most desktopManager).
+ security.rtkit.enable = true;
+ services.libinput = {
+ enable = true;
+ mouse = {
+ accelProfile = "flat";
+ };
+ };
+
+ # Define a user account. Don't forget to set a password with ‘passwd’.
+ users.users.boss = {
+ isNormalUser = true;
+ extraGroups = [ "wheel" "networkmanager" "input" "uinput" ];
+ };
+
+ fonts.packages = with pkgs; [
+ #(nerdfonts.override { fonts = [ "Cousine" ]; })
+ nerd-fonts.cousine
+ ];
+
+ # List packages installed in system profile. To search, run:
+ # $ nix search wget
+ environment.systemPackages = with pkgs;
+ [
+ vim
+ firefox
+ pfetch
+ fastfetch
+ pinentry-gtk2
+ git
+ nm-file-secret-agent
+ deploy-rs
+ ];
+ documentation.dev.enable = true;
+
+ hardware.graphics.enable32Bit = true;
+ programs.steam = {
+ enable = true;
+ package = pkgs.steam.override {
+ extraEnv = {
+ __NV_PRIME_RENDER_OFFLOAD=1;
+ __NV_PRIME_RENDER_OFFLOAD_PROVIDER="NVIDIA-G0";
+ __GLX_VENDOR_LIBRARY_NAME="nvidia";
+ __VK_LAYER_NV_optimus="NVIDIA_only";
+ };
+ };
+
+ extraCompatPackages = with pkgs; [
+ proton-ge-bin
+ ];
+ };
+
+ # Some programs need SUID wrappers, can be configured further or are
+ # started in user sessions.
+ # programs.mtr.enable = true;
+ programs.gnupg = {
+ agent = {
+ enable = true;
+ pinentryPackage = pkgs.pinentry-gtk2;
+ };
+ # enableSSHSupport = true;
+ };
+
+ hardware.bluetooth.enable = true; # enables support for Bluetooth
+ hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
+ services.blueman.enable = true;
+
+ systemd.tmpfiles.rules = [
+ "f /var/lib/systemd/linger/boss" # enables lingering
+ ];
+
+ # programs.dconf.enable = true;
+
+
+ services.ratbagd.enable = true;
+
+ # xdg.portal.enable = true;
+ # services.flatpak.enable = true;
+
+ stylix = {
+ enable = true;
+
+ base16Scheme = "${pkgs.base16-schemes}/share/themes/material-palenight.yaml";
+
+ image = ../../wallpaper.png;
+ targets.grub.useWallpaper = true;
+
+ opacity = {
+ terminal = 0.8;
+ };
+
+ polarity = "dark";
+
+ fonts = {
+ monospace = {
+ package = pkgs.nerd-fonts.cousine;
+ name = "Cousine Nerd Font Mono";
+ };
+
+ serif = {
+ package = pkgs.dejavu_fonts;
+ name = "DejaVu Serif";
+ };
+
+ sansSerif = {
+ package = pkgs.dejavu_fonts;
+ name = "DejaVu Sans";
+ };
+
+ emoji = {
+ package = pkgs.noto-fonts-color-emoji;
+ name = "Noto Color Emoji";
+ };
+
+ sizes = {
+ terminal = 10;
+ applications = 10;
+ desktop = 10;
+ popups = 10;
+ };
+ };
+
+ cursor = {
+ package = pkgs.nordzy-cursor-theme;
+ name = "Nordzy-cursors";
+ size = 20;
+ };
+ };
+
+ # Copy the NixOS configuration file and link it from the resulting system
+ # (/run/current-system/configuration.nix). This is useful in case you
+ # accidentally delete configuration.nix.
+ # system.copySystemConfiguration = true;
+
+ # This value determines the NixOS release from which the default
+ # settings for stateful data, like file locations and database versions
+ # on your system were taken. It‘s perfectly fine and recommended to leave
+ # this value at the release version of the first install of this system.
+ # Before changing this value read the documentation for this option
+ # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
+ system.stateVersion = "24.05"; # Did you read the comment?
+
+ };
+}
diff --git a/modules/default.nix b/modules/default.nix
deleted file mode 100644
index c523ae9..0000000
--- a/modules/default.nix
+++ /dev/null
@@ -1,6 +0,0 @@
-{ lib, ... }:
-{
- imports = lib.filter
- (n: (lib.strings.hasSuffix ".nix" n) && !(lib.strings.hasSuffix "default.nix" n))
- (lib.filesystem.listFilesRecursive ./.);
-}
diff --git a/modules/deploy.nix b/modules/deploy.nix
new file mode 100644
index 0000000..7cda026
--- /dev/null
+++ b/modules/deploy.nix
@@ -0,0 +1,30 @@
+{ inputs, config, ... }:
+let
+ system = "x86_64-linux";
+ pkgs = import inputs.nixpkgs { inherit system; };
+ deployPkgs = import inputs.nixpkgs {
+ inherit system;
+ overlays = [
+ inputs.deploy-rs.overlays.default # or deploy-rs.overlays.default
+ (self: super: { deploy-rs = { inherit (pkgs) deploy-rs; lib = super.deploy-rs.lib; }; })
+ ];
+ };
+ deployCfg = config.flake.deploy;
+in
+{
+ flake.deploy.nodes.nixnode = {
+ hostname = "tehbox.org";
+ profiles.system = {
+ user = "root";
+ sshUser = "boss";
+ interactiveSudo = true;
+ path = deployPkgs.deploy-rs.lib.activate.nixos config.flake.nixosConfigurations.nixnode;
+ };
+ };
+
+ perSystem =
+ { system, ... }:
+ {
+ checks = inputs.deploy-rs.lib.${system}.deployChecks deployCfg;
+ };
+}
diff --git a/modules/flake-parts.nix b/modules/flake-parts.nix
new file mode 100644
index 0000000..d7a467b
--- /dev/null
+++ b/modules/flake-parts.nix
@@ -0,0 +1,8 @@
+{ inputs, ... }:
+{
+ imports = [
+ inputs.flake-parts.flakeModules.modules
+ ];
+
+ systems = [ "x86_64-linux" ];
+}
diff --git a/modules/hardware-setups/linode.nix b/modules/hardware-setups/linode.nix
new file mode 100644
index 0000000..506c262
--- /dev/null
+++ b/modules/hardware-setups/linode.nix
@@ -0,0 +1,44 @@
+{ ... }:
+{
+ flake.modules.nixos.linode =
+ { config, lib, pkgs, modulesPath, ... }:
+
+ {
+ imports =
+ [ (modulesPath + "/profiles/qemu-guest.nix")
+ ];
+
+ boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_scsi" "ahci" "sd_mod" ];
+ boot.initrd.kernelModules = [ ];
+ boot.kernelModules = [ ];
+ boot.extraModulePackages = [ ];
+
+ boot.kernelParams = [ "console=ttyS0,19200n8" ];
+ boot.loader.grub.extraConfig = ''
+ serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1;
+ terminal_input serial;
+ terminal_output serial
+ '';
+ boot.loader.grub.forceInstall = true;
+ boot.loader.grub.device = "nodev";
+ boot.loader.timeout = 10;
+
+ fileSystems."/" =
+ { device = "/dev/sda";
+ fsType = "ext4";
+ };
+
+ swapDevices =
+ [ { device = "/dev/sdb"; }
+ ];
+
+ # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
+ # (the default) this is the recommended approach. When using systemd-networkd it's
+ # still possible to use this option, but it's recommended to use it in conjunction
+ # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
+ networking.useDHCP = lib.mkDefault true;
+ # networking.interfaces.enp0s5.useDHCP = lib.mkDefault true;
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ };
+}
diff --git a/modules/hardware-setups/tuf.nix b/modules/hardware-setups/tuf.nix
new file mode 100644
index 0000000..c36a0df
--- /dev/null
+++ b/modules/hardware-setups/tuf.nix
@@ -0,0 +1,57 @@
+{ ... }:
+{
+ flake.modules.nixos.tuf =
+ # Do not modify this file! It was generated by ‘nixos-generate-config’
+ # and may be overwritten by future invocations. Please make changes
+ # to /etc/nixos/configuration.nix instead.
+ { config, lib, pkgs, modulesPath, ... }:
+
+ {
+ imports =
+ [ (modulesPath + "/installer/scan/not-detected.nix")
+ ];
+
+ boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
+ boot.initrd.kernelModules = [ "dm-snapshot" "cryptd"];
+ boot.kernelModules = [ "kvm-amd" ];
+ boot.extraModulePackages = [ ];
+ boot.initrd.luks.devices.cryptroot = {
+ device = "/dev/disk/by-uuid/18e2ffad-9ffb-4c3a-a82f-dd8098171427";
+ preLVM = true;
+ };
+
+ fileSystems."/" =
+ { device = "/dev/disk/by-uuid/db909240-4006-4ca8-a03a-3e3fc60cba17";
+ fsType = "ext4";
+ };
+
+ fileSystems."/home" =
+ { device = "/dev/disk/by-uuid/9ef8fad1-08cb-4c7a-9db1-3a37097544b0";
+ fsType = "ext4";
+ neededForBoot = true;
+ };
+
+ fileSystems."/boot" =
+ { device = "/dev/disk/by-uuid/6FC0-9F1C";
+ fsType = "vfat";
+ options = [ "fmask=0022" "dmask=0022" ];
+ };
+
+ swapDevices =
+ [ { device = "/dev/disk/by-uuid/e1e972c8-3bb9-4131-a77f-fdea9f086a4d"; }
+ ];
+
+ # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
+ # (the default) this is the recommended approach. When using systemd-networkd it's
+ # still possible to use this option, but it's recommended to use it in conjunction
+ # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
+ networking.useDHCP = lib.mkDefault true;
+ # networking.interfaces.enp2s0.useDHCP = lib.mkDefault true;
+ # networking.interfaces.enp5s0f3u1.useDHCP = lib.mkDefault true;
+ # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+ hardware.enableAllFirmware = true;
+ };
+}
diff --git a/home-manager/YATwm/config b/modules/home-manager/YATwm/config
index e69de29..e69de29 100644
--- a/home-manager/YATwm/config
+++ b/modules/home-manager/YATwm/config
diff --git a/modules/home-manager/YATwm/default.nix b/modules/home-manager/YATwm/default.nix
new file mode 100644
index 0000000..587e929
--- /dev/null
+++ b/modules/home-manager/YATwm/default.nix
@@ -0,0 +1,117 @@
+{ inputs, config, ... }:
+let
+ hm = config.flake.modules.homeManager;
+in
+{
+ flake.modules.homeManager.YATwm =
+ {
+ pkgs,
+ lib,
+ ...
+ } : {
+ imports = [
+ hm.polybar
+ hm.rofi
+ hm.kitty
+ inputs.YATwm.homeManagerModules.default
+ ];
+ home.packages = with pkgs; [
+ i3lock
+ xss-lock
+ networkmanagerapplet
+ flameshot
+ picom
+ nitrogen
+ pamixer
+ kitty
+ alacritty
+ ];
+
+ xsession.windowManager.YATwm = {
+ enable = true;
+ package = inputs.YATwm.packages.x86_64-linux.YATwm;
+ useEmacsBinds = true;
+ quitKey = "C-s-g";
+ swapMods = false;
+ keybinds = let
+ left = "h";
+ right = "l";
+ up = "k";
+ down = "j";
+ wsBind = key: ws: {
+ "s-${key}" = "changeWS ${ws}";
+ "s-S-${key}" = "wToWS ${ws}";
+ };
+ wsBinds = workspaces: lib.attrsets.concatMapAttrs (key: ws: wsBind key ws) workspaces;
+ in {
+ # Important
+ "s-E" = "exit";
+ "s-R" = "reload";
+
+ # Directions
+ "s-${left}" = "focChange left";
+ "s-${right}" = "focChange right";
+ "s-${up}" = "focChange up";
+ "s-${down}" = "focChange down";
+
+ # Tiling
+ "s-t" = "toggle";
+ "s-f" = "fullscreen";
+
+ # Application shortcuts
+ "s-d" = "bashSpawn rofi -i -show drun -disable-history";
+ "s-D" = "bashSpawn prime-run rofi -i -show drun -disable-history";
+ "s-g" = "bashSpawn ~/bin/rofi-passmenu";
+ "s-RET" = "bashSpawn kitty";
+ # "s-r k" = "spawn kitty";
+ "s-c" = "spawn firefox";
+ "s-S--" = "bashSpawn emacsclient -c";
+ "s-S" = "spawn flameshot gui";
+ "s-x" = "spawn loginctl lock-session";
+ "s-X" = "bashSpawn loginctl lock-session && systemctl suspend";
+ "s-Q" = "kill";
+
+ # Sound
+ "s-[" = "spawn playerctl -p firefox play-pause";
+ "s-]" = "spawn playerctl -p spotify play-pause";
+
+ # Special workspaces
+ "s-p s" = "changeWS 11";
+ "s-S-p s" = "wToWS 11";
+ } //
+ wsBinds {
+ "1" = "1";
+ "2" = "2";
+ "3" = "3";
+ "4" = "4";
+ "5" = "5";
+ "6" = "6";
+ "7" = "7";
+ "8" = "8";
+ "9" = "9";
+ "0" = "10";
+ };
+ workspaces = [
+ {name = "1: A";}
+ {name = "2: B";}
+ {name = "3: C";}
+ {name = "4: D";}
+ {name = "5: E";}
+ {name = "6: F"; monitorPriorities = [2 1];}
+ {name = "7: G"; monitorPriorities = [2 1];}
+ {name = "8: H"; monitorPriorities = [2 1];}
+ {name = "9: I"; monitorPriorities = [2 1];}
+ {name = "10: J"; monitorPriorities = [2 1];}
+ {name = "S"; monitorPriorities = [1];}
+ ];
+ startup = [
+ {command = "~/.config/polybar/launch.sh"; once = false;}
+ {command = "picom --legacy-backends -fD 3"; once = false;}
+ {command = "xss-lock --transfer-sleep-lock -- i3lock -eti ~/Documents/lockscreen.png --nofork"; bash = false;}
+ {command = "nitrogen --restore";}
+ {command = "nm-applet"; once = false; bash = false;}
+ ];
+ #extraConfig = "bindmode normal\n" + (builtins.readFile ./config);
+ };
+ };
+}
diff --git a/home-manager/claude-code-manifest-2.1.282.json b/modules/home-manager/claude-code-manifest-2.1.282.json
index 78dbc55..78dbc55 100644
--- a/home-manager/claude-code-manifest-2.1.282.json
+++ b/modules/home-manager/claude-code-manifest-2.1.282.json
diff --git a/modules/home-manager/emacs/default.nix b/modules/home-manager/emacs/default.nix
new file mode 100644
index 0000000..c63e481
--- /dev/null
+++ b/modules/home-manager/emacs/default.nix
@@ -0,0 +1,39 @@
+{ ... }:
+{
+ flake.modules.homeManager.emacs =
+ { pkgs, config, ... } :
+ let
+ tex = (pkgs.texlive.combine {
+ inherit (pkgs.texlive) scheme-medium
+ dvisvgm dvipng # for preview and export as html
+ # svg transparent
+ etoolbox
+ subfiles
+ enumitem
+ wrapfig amsmath ulem hyperref capt-of;
+ });
+ myEmacs = (pkgs.emacsPackagesFor pkgs.emacs30).emacsWithPackages (epkgs: with epkgs; [
+ # vterm
+ # ghostel
+ treesit-grammars.with-all-grammars
+ ]);
+ in
+ {
+ services.emacs = {
+ enable = true;
+ package = myEmacs;
+ };
+
+ home.packages = with pkgs; [
+ mu
+ emacsPackages.mu4e
+ isync
+ ispell
+ poppler-utils
+ tex
+ ghostscript
+ haskell-language-server
+ myEmacs
+ ];
+ };
+}
diff --git a/modules/home-manager/home.nix b/modules/home-manager/home.nix
new file mode 100644
index 0000000..3f4eb02
--- /dev/null
+++ b/modules/home-manager/home.nix
@@ -0,0 +1,217 @@
+{ inputs, config, ... }:
+let
+ hm = config.flake.modules.homeManager;
+in
+{
+ flake.modules.homeManager.boss =
+ { pkgs, lib, ... }:
+ let
+ claude-code-latest = pkgs.claude-code.override {
+ manifest = lib.importJSON ./claude-code-manifest-2.1.282.json;
+ };
+ in
+ {
+
+ imports = [
+ hm.bash
+ hm.emacs
+ #hm.hyprland
+ hm.i3
+ # hm.YATwm
+ hm.kitty
+ inputs.spicetify-nix.homeManagerModules.default
+ inputs.nixcord.homeModules.nixcord
+ inputs.zen-browser.homeModules.twilight-official
+ #inputs.stylix.homeManagerModules.stylix
+ ];
+
+ home = {
+ stateVersion = "24.05";
+ username = "boss";
+ homeDirectory = "/home/boss";
+ };
+
+ # The home.packages option allows you to install Nix packages into your
+ # environment.
+ # nixpkgs.config.allowUnfree = true;
+ home.packages = with pkgs; [
+ feh
+ pass
+ # spotify
+ playerctl
+ libqalculate
+ libreoffice
+ hunspell
+ hunspellDicts.en_AU
+ logisim-evolution
+ thunderbird
+ xdotool
+ discord
+ # (discord.override {
+ # withOpenASAR = true;
+ # withVencord = true;
+ # })
+ # vesktop
+ mumble
+ gimp
+ bottom
+ xfce.thunar
+ mpv
+ man-pages
+ man-pages-posix
+ # (inputs.plover-flake.packages.${system}.plover.with-plugins (ps: with ps;[
+ # plover-dict-commands
+ # plover-console-ui
+ # plover-controller
+ # ]))
+ pavucontrol
+ unzip zip
+ appimage-run
+ # lunar-client
+ libnotify
+ xclip
+ (python3.withPackages (ps: with ps; [
+ python-lsp-server
+ numpy
+ matplotlib
+ jupyter
+ jupytext
+ pandas
+ pydot
+ scikit-learn
+ nbdev
+ pillow
+ ]))
+ graphviz
+ alacritty
+ # nyxt
+ wireguard-tools
+ brightnessctl
+ # inputs.nil.packages.${system}.default
+ nil
+ #inputs.polymc.packages.${system}.default
+ jre8
+ #inputs.zen-browser.packages."${system}".default
+ piper
+ qbittorrent
+ # sbcl
+ superTuxKart
+ typst
+ sops
+ ffmpeg
+ ghc
+ # hytale-launcher
+ # inputs.hytale-launcher.packages.${pkgs.system}.default
+ #adom
+ flatpak
+ deadlock-mod-manager
+ nh
+ claude-code-latest
+ inputs.claude-desktop.packages.${system}.claude-desktop
+ # openttd
+ ];
+
+ nix = {
+ #package = pkgs.nix;
+ settings.experimental-features = [ "nix-command" "flakes" ];
+ };
+
+ home.sessionVariables = {
+ EDITOR = "emacsclient -c";
+ MAKEFLAGS = " -j16 ";
+ MOZ_ENABLE_WAYLAND = 1;
+ };
+
+
+ programs.home-manager.enable = true;
+
+ programs.direnv = {
+ enable = true;
+ enableBashIntegration = true;
+ nix-direnv.enable = true;
+ };
+
+ services.gpg-agent.enable = true;
+ services.gpg-agent.pinentry.package = pkgs.pinentry-gtk2;
+
+ services.dunst = {
+ enable = true;
+ settings = {
+ global = {
+ follow = "keyboard";
+ frame_width = 0;
+ };
+ };
+ };
+
+ programs.obs-studio = {
+ enable = true;
+
+ # optional Nvidia hardware acceleration
+ # package = (
+ # pkgs.obs-studio.override {
+ # cudaSupport = true;
+ # }
+ # );
+
+ plugins = with pkgs.obs-studio-plugins; [
+ obs-pipewire-audio-capture
+ input-overlay
+ ];
+ };
+
+ # services.easyeffects.enable = true;
+
+ services.pass-secret-service.enable = true;
+ # Start with the X session rather than at boot, so it inherits DISPLAY/XAUTHORITY
+ # and gpg can show the GTK pinentry. Otherwise apps get logged out.
+ systemd.user.services.pass-secret-service = {
+ Unit.After = [ "graphical-session.target" ];
+ Unit.PartOf = lib.mkForce [ "graphical-session.target" ];
+ Install.WantedBy = lib.mkForce [ "graphical-session.target" ];
+ };
+
+
+ programs.firefox = {
+ enable = true;
+ };
+ programs.zen-browser = {
+ enable = true;
+ setAsDefaultBrowser = true;
+ };
+
+ # programs.nixcord = {
+ # enable = true;
+ # };
+
+
+ stylix.targets.spicetify.enable = true;
+ stylix.targets.firefox.profileNames = [ "default"];
+ stylix.targets.zen-browser.profileNames = [ "default" ];
+ # stylix.targets.nixcord.enable = true;
+
+ programs.spicetify =
+ let
+ spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
+ in
+ {
+ enable = true;
+ spotifyLaunchFlags = "--disable-gpu --disable-software-rasterizer";
+ enabledExtensions = with spicePkgs.extensions; [
+ fullAppDisplay
+ powerBar
+ # addToQueueTop
+ loopyLoop
+ ];
+ enabledCustomApps = with spicePkgs.apps; [
+ newReleases
+ lyricsPlus
+ betterLibrary
+ ];
+ # theme = spicePkgs.themes.nightlight;
+ };
+
+
+ xsession.windowManager.command = lib.mkForce "$@";
+ };
+}
diff --git a/modules/home-manager/hyprland/default.nix b/modules/home-manager/hyprland/default.nix
new file mode 100644
index 0000000..e5f041e
--- /dev/null
+++ b/modules/home-manager/hyprland/default.nix
@@ -0,0 +1,157 @@
+{ inputs, config, ... }:
+let
+ hm = config.flake.modules.homeManager;
+in
+{
+ flake.modules.homeManager.hyprland =
+ {
+ pkgs,
+ lib,
+ ...
+ }:
+ {
+ imports = [
+ hm.rofi
+ hm.kitty
+ hm.waybar
+ hm.hyprpaper
+ ];
+
+ home.file.".config/hypr/hyprlock.conf".source = ./hyprlock.conf;
+
+ wayland.windowManager.hyprland= {
+ enable = true;
+ xwayland.enable = true;
+ systemd.variables = ["--all"];
+ #package = inputs.hyprland.packages.${pkgs.system}.hyprland;
+ #portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;
+ settings = {
+ "$mod" = "SUPER";
+ exec-once = [
+ "waybar"
+ "xss-lock --transfer-sleep-lock -- hyprlock"
+ "nm-applet"
+ "hyprpaper"
+ ];
+ bind =
+ [
+ "$mod, C, exec, firefox"
+ ", Print, exec, grimblast copy area"
+ "$mod, D, exec, rofi -i -show drun -disable-history"
+ "$mod Shift, E, exit"
+ "$mod, Return, exec, kitty"
+ "$mod, T, togglesplit"
+ "$mod Control, left, workspace, m-1"
+ "$mod Control, h, workspace, m-1"
+ "$mod Control, right, workspace, m+1"
+ "$mod Control, l, workspace, m+1"
+ "$mod, x, exec, hyprlock"
+ "$mod Shift, x, exec, hyprlock"
+ "$mod Shift, x, exec, systemctl suspend"
+ "$mod Shift, MINUS, exec, emacsclient -c"
+ "ALT, Tab, focusmonitor, +1"
+ "$mod, G, exec, bash /home/boss/bin/rofi-passmenu"
+ ", XF86AudioRaiseVolume, exec, pamixer -i 5"
+ ", XF86AudioLowerVolume, exec, pamixer -d 5"
+ "$mod Shift, Q, killactive"
+ "$mod, F, fullscreen"
+ "$mod Shift, space, togglefloating"
+ "$mod, mouse:272, movewindow"
+ ", XF86AudioPlay, exec, playerctl play-pause"
+ "$mod, bracketleft, exec, playerctl -p firefox play-pause"
+ "$mod, bracketright, exec, playerctl -p spotify play-pause"
+ "$mod Shift, S, exec spectacle -r"
+ ]
+ ++ (
+ # workspaces
+ # binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
+ builtins.concatLists (builtins.genList (
+ x: let
+ key = let
+ c = (x + 1) / 10;
+ in toString (x + 1 - (c * 10));
+ in [
+ "$mod, ${key}, workspace, ${toString (x + 1)}"
+ "$mod SHIFT, ${key}, movetoworkspace, ${toString (x + 1)}"
+ (lib.mkIf (x < 5)
+ "$mod Control, ${key}, workspace, ${toString (x + 6)}"
+ )
+ "$mod Control, ${key}, workspace, ${toString (x + 1)}"
+ ]
+ )
+ 10)
+ )
+ ++ (
+ builtins.map (
+ x: "$mod, ${ builtins.elemAt x 0}, movefocus, ${builtins.elemAt x 1}\nbind=$mod Shift, ${builtins.elemAt x 0}, movewindow, ${builtins.elemAt x 1}"
+ )
+ [
+ ["h" "l"]
+ ["left" "l"]
+ ["j" "d"]
+ ["down" "d"]
+ ["k" "u"]
+ ["up" "u"]
+ ["l" "r"]
+ ["right" "r"]
+ ]
+ );
+ monitor =
+ [
+ "eDP-1, highrr, 0x0, 1"
+ "HDMI-A-1, highrr, 1920x0, 1"
+ ];
+ workspace =
+ (builtins.genList
+ (x : "${toString (x + 1)},monitor:eDP-1")
+ 5
+ )
+ ++ (builtins.genList
+ (x : "${toString (x + 6)},monitor:HDMI-A-1")
+ 5
+ );
+
+
+ input = {
+ touchpad.natural_scroll = true;
+ #touchpad.scroll_factor = 0.5;
+ accel_profile = "flat";
+ follow_mouse = true;
+ kb_options = "caps:super";
+ #sensitivity = 0.00;
+ };
+ decoration = {
+ rounding = 10;
+ drop_shadow = false;
+ };
+ animation = [
+ "workspaces,1,5,easeOutQuint,slide"
+ ];
+ bezier = [
+ "easeInOutCubic,0.65,0,0.35,1"
+ "easeOutQuint,0.22,1,0.36,1"
+ ];
+ general = {
+ #"col.inactive_border" = "rgb(2f2e43)";
+ #"col.active_border" = "rgb(ab47bc)";
+ border_size = 2;
+ gaps_in = 6;
+ gaps_out = 12;
+ };
+ windowrulev2 = [
+ "opacity 0.8 override 0.8 override, title:Spotify$"
+ ];
+ };
+ };
+
+ home.packages = with pkgs; [
+ ydotool
+ xss-lock
+ pamixer
+ grimblast
+ playerctl
+ libsForQt5.spectacle
+ inputs.hyprlock.packages.${system}.hyprlock
+ ];
+ };
+}
diff --git a/home-manager/hyprland/default.nix~ b/modules/home-manager/hyprland/default.nix~
index 569d7ff..569d7ff 100644
--- a/home-manager/hyprland/default.nix~
+++ b/modules/home-manager/hyprland/default.nix~
diff --git a/home-manager/hyprland/hyprlock.conf b/modules/home-manager/hyprland/hyprlock.conf
index dc2bc93..dc2bc93 100644
--- a/home-manager/hyprland/hyprlock.conf
+++ b/modules/home-manager/hyprland/hyprlock.conf
diff --git a/modules/home-manager/hyprpaper/default.nix b/modules/home-manager/hyprpaper/default.nix
new file mode 100644
index 0000000..4596331
--- /dev/null
+++ b/modules/home-manager/hyprpaper/default.nix
@@ -0,0 +1,14 @@
+{ ... }:
+{
+ flake.modules.homeManager.hyprpaper =
+ {
+ pkgs,
+ ...
+ }:
+ {
+ #home.file.".config/hypr/hyprpaper.conf".source = ./hyprpaper.conf;
+ home.packages = with pkgs; [
+ hyprpaper
+ ];
+ };
+}
diff --git a/home-manager/hyprpaper/hyprpaper.conf b/modules/home-manager/hyprpaper/hyprpaper.conf
index 02bec8b..02bec8b 100644
--- a/home-manager/hyprpaper/hyprpaper.conf
+++ b/modules/home-manager/hyprpaper/hyprpaper.conf
diff --git a/home-manager/i3/config b/modules/home-manager/i3/config
index fc0afae..fc0afae 100644
--- a/home-manager/i3/config
+++ b/modules/home-manager/i3/config
diff --git a/modules/home-manager/i3/default.nix b/modules/home-manager/i3/default.nix
new file mode 100644
index 0000000..982aea1
--- /dev/null
+++ b/modules/home-manager/i3/default.nix
@@ -0,0 +1,49 @@
+{ inputs, config, ... }:
+let
+ hm = config.flake.modules.homeManager;
+in
+{
+ flake.modules.homeManager.i3 =
+ # let
+ # nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-24.11";
+ # pkgs = import nixpkgs { config = {}; overlays = []; };
+ # in
+ # {
+ # i3-commands = pkgs.callPackage ./i3-commands.nix { };
+ # }
+
+
+ {
+ config,
+ pkgs,
+ ...
+ } : {
+ imports = [
+ hm.polybar
+ hm.rofi
+ hm.kitty
+ hm.picom
+ ];
+ xsession.enable = true;
+ xsession.windowManager.i3 = {
+ enable = true;
+ package = pkgs.i3;
+ };
+ xdg.configFile."i3/config".enable = false;
+ home.file.".config/i3/config" = {
+ source = ./config;
+ onChange = "${pkgs.i3}/bin/i3-msg restart";
+ };
+ home.packages = with pkgs; [
+ i3lock
+ xss-lock
+ networkmanagerapplet
+ flameshot
+ picom
+ nitrogen
+ pamixer
+ inputs.self.packages.${pkgs.stdenv.hostPlatform.system}.i3-commands
+ inputs.self.packages.${pkgs.stdenv.hostPlatform.system}.rofi-passmenu
+ ];
+ };
+}
diff --git a/modules/home-manager/i3/i3-commands.nix b/modules/home-manager/i3/i3-commands.nix
new file mode 100644
index 0000000..d3df9a4
--- /dev/null
+++ b/modules/home-manager/i3/i3-commands.nix
@@ -0,0 +1,28 @@
+{
+ perSystem =
+ { pkgs, ... }:
+ {
+ packages.i3-commands = pkgs.callPackage (
+ {
+ stdenv,
+ lib
+ }:
+ stdenv.mkDerivation {
+ pname = "i3-commands";
+ version = "0.0.1";
+
+ srcs = lib.cleanSourceWith {
+ src = ./scripts;
+ filter = path: type: baseNameOf path != "rofi-passmenu";
+ };
+
+ installPhase = ''
+ runHook preInstall
+ mkdir -p $out/bin
+ install -D -m 755 ./* $out/bin
+ runHook postInstall
+ '';
+ }
+ ) { };
+ };
+}
diff --git a/home-manager/i3/rofi-passmenu.nix b/modules/home-manager/i3/rofi-passmenu.nix
index 153ffc3..006fcb3 100644
--- a/home-manager/i3/rofi-passmenu.nix
+++ b/modules/home-manager/i3/rofi-passmenu.nix
@@ -1,22 +1,27 @@
{
- pkgs
-}:
+ perSystem =
+ { pkgs, ... }:
+ {
+ packages.rofi-passmenu = pkgs.callPackage (
+ {
+ pkgs
+ }:
-pkgs.writeShellApplication {
- name = "rofi-passmenu";
-
- runtimeInputs = with pkgs; [
- pass
- rofi
- xclip
- xdotool
- gnugrep
- gawk
- coreutils
- libnotify
- ];
+ pkgs.writeShellApplication {
+ name = "rofi-passmenu";
- text = ''
+ runtimeInputs = with pkgs; [
+ pass
+ rofi
+ xclip
+ xdotool
+ gnugrep
+ gawk
+ coreutils
+ libnotify
+ ];
+
+ text = ''
#!/usr/bin/env bash
store_dir="''${PASSWORD_STORE_DIR:-$HOME/.password-store}"
@@ -69,4 +74,7 @@ pkgs.writeShellApplication {
;;
esac
'';
+ }
+ ) { };
+ };
}
diff --git a/home-manager/i3/scripts/exit.sh b/modules/home-manager/i3/scripts/exit.sh
index 6e1f492..6e1f492 100755
--- a/home-manager/i3/scripts/exit.sh
+++ b/modules/home-manager/i3/scripts/exit.sh
diff --git a/home-manager/i3/scripts/image_upload.sh b/modules/home-manager/i3/scripts/image_upload.sh
index ea327ad..ea327ad 100755
--- a/home-manager/i3/scripts/image_upload.sh
+++ b/modules/home-manager/i3/scripts/image_upload.sh
diff --git a/home-manager/i3/scripts/monitor-config.sh b/modules/home-manager/i3/scripts/monitor-config.sh
index 8f17660..8f17660 100755
--- a/home-manager/i3/scripts/monitor-config.sh
+++ b/modules/home-manager/i3/scripts/monitor-config.sh
diff --git a/home-manager/i3/scripts/rofi-passmenu b/modules/home-manager/i3/scripts/rofi-passmenu
index 798961b..798961b 100755
--- a/home-manager/i3/scripts/rofi-passmenu
+++ b/modules/home-manager/i3/scripts/rofi-passmenu
diff --git a/home-manager/i3/scripts/workspaces.sh b/modules/home-manager/i3/scripts/workspaces.sh
index 3ad68ef..3ad68ef 100755
--- a/home-manager/i3/scripts/workspaces.sh
+++ b/modules/home-manager/i3/scripts/workspaces.sh
diff --git a/home-manager/i3/scripts/workspaces.txt b/modules/home-manager/i3/scripts/workspaces.txt
index 84b3bf0..84b3bf0 100644
--- a/home-manager/i3/scripts/workspaces.txt
+++ b/modules/home-manager/i3/scripts/workspaces.txt
diff --git a/modules/home-manager/kitty/default.nix b/modules/home-manager/kitty/default.nix
new file mode 100644
index 0000000..8b1721f
--- /dev/null
+++ b/modules/home-manager/kitty/default.nix
@@ -0,0 +1,28 @@
+{ ... }:
+{
+ flake.modules.homeManager.kitty =
+ {
+ pkgs,
+ config,
+ ...
+ }:
+ {
+ programs.kitty = {
+ enable = true;
+ keybindings = {
+ "control+shift+c" = "copy_to_clipboard";
+ "control+shift+v" = "paste_from_clipboard";
+ };
+ settings = {
+ #font_family = "Cousine Nerd Font";
+ #font_size = "10.0";
+ #background_opacity = "0.8";
+ term = "xterm-256color";
+ enable_audio_bell = "no";
+ mouse_hide_wait = 2;
+ window_padding_width = 4;
+ };
+ #extraConfig = (builtins.readFile ./palenight.conf);
+ };
+ };
+}
diff --git a/home-manager/kitty/palenight.conf b/modules/home-manager/kitty/palenight.conf
index 6a58ece..6a58ece 100644
--- a/home-manager/kitty/palenight.conf
+++ b/modules/home-manager/kitty/palenight.conf
diff --git a/modules/home-manager/picom/default.nix b/modules/home-manager/picom/default.nix
new file mode 100644
index 0000000..3fb1cf7
--- /dev/null
+++ b/modules/home-manager/picom/default.nix
@@ -0,0 +1,22 @@
+{ ... }:
+{
+ flake.modules.homeManager.picom =
+ {
+ pkgs,
+ config,
+ ...
+ }:
+ {
+ services.picom = {
+ enable = true;
+ fade = true;
+ fadeDelta = 3;
+ fadeExclude = [
+ "window_type *= 'tooltip'"
+ ];
+ settings = {
+ corner-radius = 10;
+ };
+ };
+ };
+}
diff --git a/home-manager/polybar/config.ini b/modules/home-manager/polybar/config.ini
index b7cf83e..b7cf83e 100644
--- a/home-manager/polybar/config.ini
+++ b/modules/home-manager/polybar/config.ini
diff --git a/modules/home-manager/polybar/default.nix b/modules/home-manager/polybar/default.nix
new file mode 100644
index 0000000..101e8a8
--- /dev/null
+++ b/modules/home-manager/polybar/default.nix
@@ -0,0 +1,24 @@
+{ ... }:
+{
+ flake.modules.homeManager.polybar =
+ {
+ config,
+ pkgs,
+ ...
+ } : {
+ home.file.".config/polybar/launch.sh" = {
+ source = ./launch.sh;
+ executable = true;
+ };
+ home.file.".config/polybar/config.ini" = {
+ source = ./config.ini;
+ # onChange = ''
+ #${pkgs.procps}/bin/pkill polybar
+ #PATH=$PATH:${pkgs.polybarFull}/bin:${pkgs.lxrandr}/bin ~/.config/polybar/launch.sh
+ #'';
+ };
+ home.packages = with pkgs; [
+ polybarFull
+ ];
+ };
+}
diff --git a/home-manager/polybar/launch.sh b/modules/home-manager/polybar/launch.sh
index 41d5f3d..41d5f3d 100755
--- a/home-manager/polybar/launch.sh
+++ b/modules/home-manager/polybar/launch.sh
diff --git a/home-manager/rofi/config/config.rasi b/modules/home-manager/rofi/config/config.rasi
index cfda0ba..cfda0ba 100644
--- a/home-manager/rofi/config/config.rasi
+++ b/modules/home-manager/rofi/config/config.rasi
diff --git a/home-manager/rofi/config/customised.rasi b/modules/home-manager/rofi/config/customised.rasi
index d953062..d953062 100644
--- a/home-manager/rofi/config/customised.rasi
+++ b/modules/home-manager/rofi/config/customised.rasi
diff --git a/modules/home-manager/rofi/default.nix b/modules/home-manager/rofi/default.nix
new file mode 100644
index 0000000..76cc56e
--- /dev/null
+++ b/modules/home-manager/rofi/default.nix
@@ -0,0 +1,17 @@
+{ ... }:
+{
+ flake.modules.homeManager.rofi =
+ {
+ pkgs,
+ config,
+ ...
+ }: {
+ home.file.".config/rofi" = {
+ source = ./config;
+ recursive = true;
+ };
+ home.packages = [
+ pkgs.rofi
+ ];
+ };
+}
diff --git a/home-manager/shells/bash.nix b/modules/home-manager/shells/bash.nix
index cd5f51d..a396594 100644
--- a/home-manager/shells/bash.nix
+++ b/modules/home-manager/shells/bash.nix
@@ -1,9 +1,12 @@
-{ pkgs, ... } :
+{ ... }:
{
- programs.bash = {
- enable = true;
- enableCompletion = true;
- initExtra = ''
+ flake.modules.homeManager.bash =
+ { pkgs, ... } :
+ {
+ programs.bash = {
+ enable = true;
+ enableCompletion = true;
+ initExtra = ''
tabs 4
clear
PF_INFO="ascii title os kernel uptime memory shell wm" pfetch
@@ -53,31 +56,32 @@ __prompt_command() {
#export PS1="\[\e[32m\]╭──\[\e[31m\](\[\e[34m\]\u\[\e[33m\]@\[\e[34m\]\h\[\e[31m\])\[\e[32m\]-\[\e[31m\](\[\e[34m\]\w\[\e[31m\])\[\e[32m\]-\[\e[31m\](\[\e[34m\]\d\[\e[31m\])
#\[\e[32m\]╰\[\e[0m\] "
'';
- shellAliases = {
- cm = "cmatrix -absu 2";
- pipes = "pipes.sh -KR -p 3 -t3 -c 1 -c 2 -c 3 -c 4 -c 5 -c 6";
- cl = "clear";
- ls = "lsd";
- la = "lsd -a";
- ll = "lsd -al";
- tree = "lsd --tree";
- pathfindsaver = "while sleep 1; do pathfind -f; done";
- qalc = "qalc -s 'varunits 0' -s 'angle 2'";
+ shellAliases = {
+ cm = "cmatrix -absu 2";
+ pipes = "pipes.sh -KR -p 3 -t3 -c 1 -c 2 -c 3 -c 4 -c 5 -c 6";
+ cl = "clear";
+ ls = "lsd";
+ la = "lsd -a";
+ ll = "lsd -al";
+ tree = "lsd --tree";
+ pathfindsaver = "while sleep 1; do pathfind -f; done";
+ qalc = "qalc -s 'varunits 0' -s 'angle 2'";
- flake-rebuild = "nixos-rebuild switch --flake ~/nixos-configuration";
- };
- };
+ flake-rebuild = "nixos-rebuild switch --flake ~/nixos-configuration";
+ };
+ };
+
+ programs.zoxide = {
+ enable = true;
+ enableBashIntegration = true;
+ options = [ "--cmd cd" ];
+ };
- programs.zoxide = {
- enable = true;
- enableBashIntegration = true;
- options = [ "--cmd cd" ];
- };
-
- home.packages = with pkgs; [
- zoxide
- pfetch
- lsd
- libqalculate
- ];
+ home.packages = with pkgs; [
+ zoxide
+ pfetch
+ lsd
+ libqalculate
+ ];
+ };
}
diff --git a/home-manager/waybar/config/config.jsonc b/modules/home-manager/waybar/config/config.jsonc
index 8dcf08a..8dcf08a 100644
--- a/home-manager/waybar/config/config.jsonc
+++ b/modules/home-manager/waybar/config/config.jsonc
diff --git a/home-manager/waybar/config/style.css b/modules/home-manager/waybar/config/style.css
index 3a9b5b5..3a9b5b5 100644
--- a/home-manager/waybar/config/style.css
+++ b/modules/home-manager/waybar/config/style.css
diff --git a/modules/home-manager/waybar/default.nix b/modules/home-manager/waybar/default.nix
new file mode 100644
index 0000000..fb084d7
--- /dev/null
+++ b/modules/home-manager/waybar/default.nix
@@ -0,0 +1,20 @@
+{ ... }:
+{
+ flake.modules.homeManager.waybar =
+ {
+ config,
+ pkgs,
+ ...
+ } : {
+ home.file.".config/waybar/" = {
+ source = ./config;
+ onChange = "${pkgs.procps}/bin/pkill waybar && ${pkgs.hyprland}/bin/hyprctl dispatch exec waybar || ${pkgs.hyprland}/bin/hyprctl dispatch exec waybar";
+ recursive = true;
+ };
+ home.packages = with pkgs; [
+ waybar
+ pamixer
+ wtype
+ ];
+ };
+}
diff --git a/modules/my-pkgs/adom.nix b/modules/my-pkgs/adom.nix
new file mode 100644
index 0000000..0c2ad03
--- /dev/null
+++ b/modules/my-pkgs/adom.nix
@@ -0,0 +1,59 @@
+{
+ perSystem =
+ { pkgs, ... }:
+ {
+ packages.adom = pkgs.callPackage (
+ { stdenv, fetchurl, autoPatchelfHook, makeDesktopItem, makeWrapper, ncurses5, libtinfo, SDL2, SDL2_image, SDL2_mixer, SDL2_net, SDL2_ttf, luajit} :
+
+ stdenv.mkDerivation rec {
+ pname = "adom";
+ version = "3.3.3";
+ src = fetchurl {
+ url = "https://sjc4.dl.dbolical.com/dl/2019/01/29/adom_noteye_linux_ubuntu_64_${version}.tar.gz?st=PcXL3PZSxDxr6H6v58PFfw==&e=1750223221";
+ hash = "sha256-7c39tEPlrpWIL6QH0BIOLLrFFIlhEHPw5F3knMUh+BA=";
+ };
+
+ nativeBuildInputs = [
+ autoPatchelfHook
+ makeWrapper
+ ];
+
+ buildInputs = [
+ (ncurses5.override { unicodeSupport = false; })
+ ncurses5
+ SDL2
+ SDL2_image
+ SDL2_mixer
+ SDL2_net
+ SDL2_ttf
+ luajit
+ stdenv.cc.cc.lib
+ ];
+
+ sourceRoot = "adom";
+ installPhase = let desktopEntry = makeDesktopItem {
+ name = "adom";
+ desktopName = "ADOM";
+ exec = "OUT_DIR/bin/adom";
+ #path = "OUT_DIR/share";
+ }; in ''
+ runHook preInstall
+ install -m755 -D adom $out/bin/adom
+ wrapProgram $out/bin/adom \
+ --chdir $out/share
+ install -m644 -D lib/libnoteye.so $out/lib/libnoteye.so
+ mkdir -p $out/share
+ cp -r common $out/share/
+ cp -r docs $out/share/
+ cp -r games $out/share/
+ cp -r gfx $out/share/
+ cp -r licenses $out/share/
+ cp -r sound $out/share/
+ mkdir -p $out/share/applications
+ sed -e "s|OUT_DIR|$out|g" ${desktopEntry}/share/applications/adom.desktop > $out/share/applications/adom.desktop
+ runHook postInstall
+'';
+ }
+ ) { };
+ };
+}
diff --git a/modules/my-pkgs/default.nix b/modules/my-pkgs/default.nix
new file mode 100644
index 0000000..fb227d0
--- /dev/null
+++ b/modules/my-pkgs/default.nix
@@ -0,0 +1,12 @@
+{ inputs, ... }:
+{
+ flake.modules.nixos.my-pkgs =
+ { config, pkgs, lib, ... }:
+ {
+ nixpkgs.overlays = [
+ (final: prev: {
+ adom = inputs.self.packages.${final.stdenv.hostPlatform.system}.adom;
+ })
+ ];
+ };
+}
diff --git a/modules/my-pkgs/stk-installers.nix b/modules/my-pkgs/stk-installers.nix
new file mode 100644
index 0000000..0558733
--- /dev/null
+++ b/modules/my-pkgs/stk-installers.nix
@@ -0,0 +1,44 @@
+{
+ perSystem =
+ { pkgs, ... }:
+ {
+ packages.stk-installers = pkgs.callPackage (
+ { stdenv, fetchurl, lib, writeText, ... }:
+ stdenv.mkDerivation rec {
+ pname = "stk-installers";
+ version = "0.1.0";
+
+ srcs = let
+ releaseHashes = {
+ #"installer-aarch64.exe" = "sha256-orLoDvW+fUDucqY4KcC0DQ4JbA2LaG3RQtaBEjtG6HU=";
+ #"installer-i686.exe" = "sha256-knC7XF6OeY/dQ2VnyjYm+IlJxU8g6s/S395Nr4HZ6Jk=";
+ # "installer-x86_64.exe" = "sha256-oSYOu3PdnaE+w+N/Um8p5JSztmwAwF/XB2ezCkSX2V4=";
+ # "linux-arm64.tar.gz" = "sha256-lhtLaRtEVHzcrae6OdrRVhpufnZskLIsot8foYqi5Hc=";
+ #"linux-armv7.tar.gz" = "sha256-jQYR2wkIu1j7c5xEfzdIa9fnQFU1wNKAVq35NZB/BzA=";
+ # "linux-x86.tar.gz" = "sha256-sT57jnRV7Wa4qC8p1/fOTwXfelM66fRckdfQvqMqOOs=";
+ "linux-x86_64.tar.gz" = "sha256-VwkLbCFj62kfIBBK6XEiBKy7ToNBBZ3uCl/1MV78QBs=";
+ # "mac-signed.zip" = "sha256-wmas24pjo/4w9SZS2bdJ9b66Sr655UOC+7k0sAxTswM=";
+ # "src.tar.gz" = "sha256-M8+IQeT/QILYC5JIAUKVu76mHRRoPobf8QDjq497J8s=";
+ # "win.zip" = "sha256-nffi1n6FYhJ6O7YzAw8b1O53+p5/CuEQiXRzAlr4rNw=";
+ };
+ in
+ lib.attrsets.mapAttrsToList (release: hash: fetchurl {
+ url = "https://github.com/supertuxkart/stk-code/releases/download/1.5/SuperTuxKart-1.5-${release}";
+ sha256 = hash;
+ }) releaseHashes
+ ++ [(writeText "hashes.txt" (builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (release: hash: "SuperTuxKart-1.5-${release} ${hash}") releaseHashes)))];
+
+ sourceRoot = ".";
+
+ unpackPhase = ":";
+
+ installPhase = ''
+mkdir -p $out/srv/www
+for srcFile in $srcs; do
+ cp $srcFile "$out/srv/www/$(stripHash $srcFile)"
+done
+'';
+ }
+ ) { };
+ };
+}
diff --git a/modules/nix.nix b/modules/nix.nix
deleted file mode 100644
index 64fc4a3..0000000
--- a/modules/nix.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-{ inputs, config, lib, ... }:
-{
- options.teh-nix.nix = with lib; {
- enable = mkEnableOption "Use the TehNix nix settings";
- };
-
- config = lib.mkIf config.teh-nix.nix.enable {
- nix.nixPath = [ "/etc/nix/path" ];
- nix.registry.nixpkgs.flake = inputs.nixpkgs;
- environment.etc."nix/path/nixpkgs".source = inputs.nixpkgs;
-
- nix = {
- settings = {
- experimental-features = [ "nix-command" "flakes" ];
- auto-optimise-store = true;
-
- trusted-users = [ "boss" ];
-
- substituters = [
- "https://cache.nixos.org"
- ];
-
- # trusted-public-keys = [
- # "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
- # ];
- };
- optimise.automatic = true;
- };
-
- # nh's cleaner replaces nix.gc (the nh module asserts they aren't both on)
- programs.nh = {
- enable = true;
- clean = {
- enable = true;
- dates = "weekly";
- # --no-direnv keeps nix-direnv's gcroots so dev shells survive
- extraArgs = "--keep-since 7d --keep 5 --no-direnv";
- };
- };
- };
-}
diff --git a/modules/nvidia.nix b/modules/nvidia.nix
deleted file mode 100644
index d315238..0000000
--- a/modules/nvidia.nix
+++ /dev/null
@@ -1,36 +0,0 @@
-{ config, pkgs, lib, inputs, ... }:
-let
- nvidia-offload = pkgs.writeShellScriptBin "prime-run" ''
-export __NV_PRIME_RENDER_OFFLOAD=1
-export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0
-export __GLX_VENDOR_LIBRARY_NAME=nvidia
-export __VK_LAYER_NV_optimus=NVIDIA_only
-exec "$@"
-'';
-in
-{
- options.teh-nix.nvidia = with lib; {
- enable = mkEnableOption "Enable nvidia";
- };
-
- config = lib.mkIf config.teh-nix.nvidia.enable {
- nixpkgs.config.allowUnfree = true;
- hardware.graphics.enable = true;
- hardware.nvidia.modesetting.enable = true;
- # hardware.nvidia.dynamicBoost.enable = true;
- hardware.nvidia.open = true;
- hardware.nvidia.prime = {
- # sync.enable = true;
- offload.enable = true;
- # offload.offloadCmdMainProgram = "prime-run";
-
- nvidiaBusId = "PCI:1:0:0";
- intelBusId = "PCI:5:0:0";
- };
- hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable;
-
- services.xserver.videoDrivers = [ "nvidia" ];
-
- environment.systemPackages = [ nvidia-offload ];
- };
-}
diff --git a/modules/teh-nix/cgit.nix b/modules/teh-nix/cgit.nix
new file mode 100644
index 0000000..ff3aee0
--- /dev/null
+++ b/modules/teh-nix/cgit.nix
@@ -0,0 +1,161 @@
+{ ... }:
+{
+ flake.modules.nixos.teh-nix =
+ { pkgs, lib, config, ... }:
+ let
+ cfg = config.teh-nix.services.cgit;
+ cgitrc = pkgs.writeText "cgitrc" ''
+css=/static/cgit.css
+logo=/static/cgit.png
+favicon=/static/favicon.ico
+repository-sort=age
+
+root-title=${cfg.title}
+root-desc=${cfg.description}
+
+enable-blame=1
+enable-commit-graph=1
+enable-log-filecount=1
+enable-log-linecount=1
+enable-index-links=1
+
+snapshots=tar.gz zip
+enable-http-clone=1
+clone-prefix=https://${cfg.domain}
+
+readme=:README
+readme=:readme
+readme=:readme.txt
+readme=:README.txt
+readme=:readme.md
+readme=:README.md
+
+${cfg.extraConfig}
+
+about-filter=${cfg.package}/lib/cgit/filters/about-formatting.sh
+source-filter=${cfg.package}/lib/cgit/filters/syntax-highlighting.py
+
+enable-git-config=1
+scan-path=${cfg.directory}
+'';
+ in
+ {
+ options.teh-nix.services.cgit = with lib;{
+ enable = mkEnableOption "Enable cgit";
+ user = mkOption {
+ type = types.str;
+ default = "cgit";
+ description = "Username for the user that will run cgit";
+ };
+ authorizedKeys = lib.mkOption {
+ type = types.listOf types.str;
+ default = [ ];
+ description = "List of ssh keys for the cgit user (cgit user should own all repos)";
+ };
+ authorizedUsers = lib.mkOption {
+ type = types.listOf types.str;
+ default = [ ];
+ description = "List of users that should have access to the cgit directory";
+ };
+ directory = mkOption {
+ type = types.str;
+ default = "/srv/cgit/repos";
+ description = "Directory for cgit (cgit user's home directory";
+ };
+ description = mkOption {
+ type = types.str;
+ default = "Cgit instance hosted with nixos";
+ description = "Description of the cgit website";
+ };
+ title = mkOption {
+ type = types.str;
+ default = "Cgit + Nix";
+ description = "Title of the cgit website";
+ };
+ domain = mkOption {
+ type = types.str;
+ default = "git.example.com";
+ description = "Domain to host it on";
+ };
+ useACMEHost = mkOption {
+ type = types.str;
+ default = "";
+ description = "SSL cert to use if already aquired using security.acme.certs";
+ };
+ enableACME = mkEnableOption "Enable ACME with nginx";
+ onlySSL = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Only allow ssl connections";
+ };
+ forceSSL = mkOption {
+ type = types.bool;
+ default = true;
+ description = "Force ssl connections";
+ };
+ package = mkPackageOption pkgs "cgit" { };
+ extraConfig = mkOption {
+ type = types.str;
+ default = "";
+ description = "Extra config to be appended to cgitrc";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ environment.systemPackages = [ pkgs.git cfg.package ];
+ users = {
+ groups.${cfg.user} = {
+ members = cfg.authorizedUsers;
+ };
+ users.${cfg.user} = {
+ createHome = true;
+ homeMode = "770";
+ home = cfg.directory;
+ isSystemUser = true;
+ shell = "${pkgs.git}/bin/git-shell";
+ openssh.authorizedKeys.keys = cfg.authorizedKeys;
+ group = cfg.user;
+ };
+ };
+
+
+ services.fcgiwrap.instances.cgit = {
+ socket = {
+ user = cfg.user;
+ group = "nginx";
+ type = "unix";
+ mode = "0660";
+ };
+ process = {
+ user = cfg.user;
+ group = cfg.user;
+ };
+ };
+
+ services.nginx.enable = true;
+ services.nginx.virtualHosts.${cfg.domain} = {
+ locations."~* ^/static/(.+.(ico|css|png))$" = {
+ extraConfig = ''
+alias ${cfg.package}/cgit/$1;
+'';
+ };
+ locations."/" = {
+ extraConfig = ''
+include ${pkgs.nginx}/conf/fastcgi_params;
+fastcgi_param CGIT_CONFIG ${cgitrc};
+fastcgi_param SCRIPT_FILENAME ${cfg.package}/cgit/cgit.cgi;
+fastcgi_split_path_info ^(/?)(.+)$;
+fastcgi_param PATH_INFO $fastcgi_path_info;
+fastcgi_param QUERY_STRING $args;
+fastcgi_param HTTP_HOST $server_name;
+fastcgi_pass unix:${config.services.fcgiwrap.instances.cgit.socket.address};
+ '';
+ };
+ enableACME = cfg.enableACME;
+ forceSSL = cfg.forceSSL;
+ } // lib.optionalAttrs (cfg.useACMEHost != "") {
+ useACMEHost = "${cfg.useACMEHost}";
+ };
+ };
+ };
+}
diff --git a/modules/teh-nix/nix.nix b/modules/teh-nix/nix.nix
new file mode 100644
index 0000000..d0b6cb3
--- /dev/null
+++ b/modules/teh-nix/nix.nix
@@ -0,0 +1,45 @@
+{ inputs, ... }:
+{
+ flake.modules.nixos.teh-nix =
+ { config, lib, ... }:
+ {
+ options.teh-nix.nix = with lib; {
+ enable = mkEnableOption "Use the TehNix nix settings";
+ };
+
+ config = lib.mkIf config.teh-nix.nix.enable {
+ nix.nixPath = [ "/etc/nix/path" ];
+ nix.registry.nixpkgs.flake = inputs.nixpkgs;
+ environment.etc."nix/path/nixpkgs".source = inputs.nixpkgs;
+
+ nix = {
+ settings = {
+ experimental-features = [ "nix-command" "flakes" ];
+ auto-optimise-store = true;
+
+ trusted-users = [ "boss" ];
+
+ substituters = [
+ "https://cache.nixos.org"
+ ];
+
+ # trusted-public-keys = [
+ # "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
+ # ];
+ };
+ optimise.automatic = true;
+ };
+
+ # nh's cleaner replaces nix.gc (the nh module asserts they aren't both on)
+ programs.nh = {
+ enable = true;
+ clean = {
+ enable = true;
+ dates = "weekly";
+ # --no-direnv keeps nix-direnv's gcroots so dev shells survive
+ extraArgs = "--keep-since 7d --keep 5 --no-direnv";
+ };
+ };
+ };
+ };
+}
diff --git a/modules/teh-nix/nvidia.nix b/modules/teh-nix/nvidia.nix
new file mode 100644
index 0000000..f14d20c
--- /dev/null
+++ b/modules/teh-nix/nvidia.nix
@@ -0,0 +1,40 @@
+{ ... }:
+{
+ flake.modules.nixos.teh-nix =
+ { config, pkgs, lib, ... }:
+ let
+ nvidia-offload = pkgs.writeShellScriptBin "prime-run" ''
+export __NV_PRIME_RENDER_OFFLOAD=1
+export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0
+export __GLX_VENDOR_LIBRARY_NAME=nvidia
+export __VK_LAYER_NV_optimus=NVIDIA_only
+exec "$@"
+'';
+ in
+ {
+ options.teh-nix.nvidia = with lib; {
+ enable = mkEnableOption "Enable nvidia";
+ };
+
+ config = lib.mkIf config.teh-nix.nvidia.enable {
+ nixpkgs.config.allowUnfree = true;
+ hardware.graphics.enable = true;
+ hardware.nvidia.modesetting.enable = true;
+ # hardware.nvidia.dynamicBoost.enable = true;
+ hardware.nvidia.open = true;
+ hardware.nvidia.prime = {
+ # sync.enable = true;
+ offload.enable = true;
+ # offload.offloadCmdMainProgram = "prime-run";
+
+ nvidiaBusId = "PCI:1:0:0";
+ intelBusId = "PCI:5:0:0";
+ };
+ hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable;
+
+ services.xserver.videoDrivers = [ "nvidia" ];
+
+ environment.systemPackages = [ nvidia-offload ];
+ };
+ };
+}
diff --git a/modules/teh-nix/xorg.nix b/modules/teh-nix/xorg.nix
new file mode 100644
index 0000000..17febd3
--- /dev/null
+++ b/modules/teh-nix/xorg.nix
@@ -0,0 +1,60 @@
+{ inputs, ... }:
+{
+ flake.modules.nixos.teh-nix =
+ { config, lib, pkgs, ... }:
+ {
+ imports = [
+ # inputs.YATwm.nixosModules.YATwm
+ ];
+
+ options.teh-nix.xorg = with lib; {
+ enable = mkEnableOption "Enable xorg";
+ nvidia = mkOption {
+ type = types.bool;
+ default = true;
+ description = "Enable nvidia with xorg";
+ };
+ };
+
+ config = lib.mkIf config.teh-nix.xorg.enable {
+
+ teh-nix.nvidia.enable = lib.mkIf config.teh-nix.xorg.nvidia (lib.mkDefault true);
+
+ services.xserver = {
+ enable = true;
+
+ desktopManager = {
+ xterm.enable = false;
+ #default = "none";
+ };
+
+ deviceSection = ''
+ Option "DRI" "2"
+ Option "TearFree" "true"
+ '';
+
+ windowManager.i3 = {
+ enable = true;
+ package = pkgs.i3;
+ };
+
+ # windowManager.YATwm = {
+ # enable = true;
+ # package = inputs.YATwm.packages.x86_64-linux.YATwm;
+ # };
+ };
+ programs.i3lock.enable = true;
+
+ services.displayManager = {
+ #defaultSession = "none+i3";
+ sddm.enable = true;
+ #sddm.theme = "catppuccin-macchiato";
+ # ly.enable = true;
+ };
+
+
+ services.xserver.xkb.layout = "us";
+ services.xserver.xkb.options = "caps:super";
+ };
+ };
+}
diff --git a/modules/website/default.nix b/modules/website/default.nix
new file mode 100644
index 0000000..8fc2477
--- /dev/null
+++ b/modules/website/default.nix
@@ -0,0 +1,20 @@
+{
+ perSystem =
+ { pkgs, ... }:
+ {
+ packages.teh-website = pkgs.callPackage (
+ { stdenv, ... }:
+ stdenv.mkDerivation {
+ pname = "TehWebsite";
+ version = "0.0.1";
+
+ src = ./src;
+
+ installPhase = ''
+mkdir -p $out/srv/www
+cp -r ./* $out/srv/www
+'';
+ }
+ ) { };
+ };
+}
diff --git a/website/src/index.html b/modules/website/src/index.html
index a28d898..a28d898 100644
--- a/website/src/index.html
+++ b/modules/website/src/index.html
diff --git a/website/src/other-page.html b/modules/website/src/other-page.html
index cbd5c8b..cbd5c8b 100644
--- a/website/src/other-page.html
+++ b/modules/website/src/other-page.html
diff --git a/modules/xorg.nix b/modules/xorg.nix
deleted file mode 100644
index 6fb8e64..0000000
--- a/modules/xorg.nix
+++ /dev/null
@@ -1,57 +0,0 @@
-{ config, lib, pkgs, inputs, ... }:
-{
- imports = [
- ./nvidia.nix
- # inputs.YATwm.nixosModules.YATwm
- ];
-
- options.teh-nix.xorg = with lib; {
- enable = mkEnableOption "Enable xorg";
- nvidia = mkOption {
- type = types.bool;
- default = true;
- description = "Enable nvidia with xorg";
- };
- };
-
- config = lib.mkIf config.teh-nix.xorg.enable {
-
- teh-nix.nvidia.enable = lib.mkIf config.teh-nix.xorg.nvidia (lib.mkDefault true);
-
- services.xserver = {
- enable = true;
-
- desktopManager = {
- xterm.enable = false;
- #default = "none";
- };
-
- deviceSection = ''
- Option "DRI" "2"
- Option "TearFree" "true"
- '';
-
- windowManager.i3 = {
- enable = true;
- package = pkgs.i3;
- };
-
- # windowManager.YATwm = {
- # enable = true;
- # package = inputs.YATwm.packages.x86_64-linux.YATwm;
- # };
- };
- programs.i3lock.enable = true;
-
- services.displayManager = {
- #defaultSession = "none+i3";
- sddm.enable = true;
- #sddm.theme = "catppuccin-macchiato";
- # ly.enable = true;
- };
-
-
- services.xserver.xkb.layout = "us";
- services.xserver.xkb.options = "caps:super";
- };
-}
diff --git a/my-pkgs/adom.nix b/my-pkgs/adom.nix
deleted file mode 100644
index e91842a..0000000
--- a/my-pkgs/adom.nix
+++ /dev/null
@@ -1,51 +0,0 @@
-{ stdenv, fetchurl, autoPatchelfHook, makeDesktopItem, makeWrapper, ncurses5, libtinfo, SDL2, SDL2_image, SDL2_mixer, SDL2_net, SDL2_ttf, luajit} :
-
-stdenv.mkDerivation rec {
- pname = "adom";
- version = "3.3.3";
- src = fetchurl {
- url = "https://sjc4.dl.dbolical.com/dl/2019/01/29/adom_noteye_linux_ubuntu_64_${version}.tar.gz?st=PcXL3PZSxDxr6H6v58PFfw==&e=1750223221";
- hash = "sha256-7c39tEPlrpWIL6QH0BIOLLrFFIlhEHPw5F3knMUh+BA=";
- };
-
- nativeBuildInputs = [
- autoPatchelfHook
- makeWrapper
- ];
-
- buildInputs = [
- (ncurses5.override { unicodeSupport = false; })
- ncurses5
- SDL2
- SDL2_image
- SDL2_mixer
- SDL2_net
- SDL2_ttf
- luajit
- stdenv.cc.cc.lib
- ];
-
- sourceRoot = "adom";
- installPhase = let desktopEntry = makeDesktopItem {
- name = "adom";
- desktopName = "ADOM";
- exec = "OUT_DIR/bin/adom";
- #path = "OUT_DIR/share";
- }; in ''
- runHook preInstall
- install -m755 -D adom $out/bin/adom
- wrapProgram $out/bin/adom \
- --chdir $out/share
- install -m644 -D lib/libnoteye.so $out/lib/libnoteye.so
- mkdir -p $out/share
- cp -r common $out/share/
- cp -r docs $out/share/
- cp -r games $out/share/
- cp -r gfx $out/share/
- cp -r licenses $out/share/
- cp -r sound $out/share/
- mkdir -p $out/share/applications
- sed -e "s|OUT_DIR|$out|g" ${desktopEntry}/share/applications/adom.desktop > $out/share/applications/adom.desktop
- runHook postInstall
-'';
-}
diff --git a/my-pkgs/default.nix b/my-pkgs/default.nix
deleted file mode 100644
index ccf18f5..0000000
--- a/my-pkgs/default.nix
+++ /dev/null
@@ -1,8 +0,0 @@
-{ config, pkgs, lib, ... }:
-{
- nixpkgs.overlays = [
- (final: prev: {
- adom = prev.callPackage ./adom.nix { };
- })
- ];
-}
diff --git a/my-pkgs/stk-installers.nix b/my-pkgs/stk-installers.nix
deleted file mode 100644
index 9718626..0000000
--- a/my-pkgs/stk-installers.nix
+++ /dev/null
@@ -1,36 +0,0 @@
-{ stdenv, fetchurl, lib, writeText, ... }:
-stdenv.mkDerivation rec {
- pname = "stk-installers";
- version = "0.1.0";
-
- srcs = let
- releaseHashes = {
- #"installer-aarch64.exe" = "sha256-orLoDvW+fUDucqY4KcC0DQ4JbA2LaG3RQtaBEjtG6HU=";
- #"installer-i686.exe" = "sha256-knC7XF6OeY/dQ2VnyjYm+IlJxU8g6s/S395Nr4HZ6Jk=";
- # "installer-x86_64.exe" = "sha256-oSYOu3PdnaE+w+N/Um8p5JSztmwAwF/XB2ezCkSX2V4=";
- # "linux-arm64.tar.gz" = "sha256-lhtLaRtEVHzcrae6OdrRVhpufnZskLIsot8foYqi5Hc=";
- #"linux-armv7.tar.gz" = "sha256-jQYR2wkIu1j7c5xEfzdIa9fnQFU1wNKAVq35NZB/BzA=";
- # "linux-x86.tar.gz" = "sha256-sT57jnRV7Wa4qC8p1/fOTwXfelM66fRckdfQvqMqOOs=";
- "linux-x86_64.tar.gz" = "sha256-VwkLbCFj62kfIBBK6XEiBKy7ToNBBZ3uCl/1MV78QBs=";
- # "mac-signed.zip" = "sha256-wmas24pjo/4w9SZS2bdJ9b66Sr655UOC+7k0sAxTswM=";
- # "src.tar.gz" = "sha256-M8+IQeT/QILYC5JIAUKVu76mHRRoPobf8QDjq497J8s=";
- # "win.zip" = "sha256-nffi1n6FYhJ6O7YzAw8b1O53+p5/CuEQiXRzAlr4rNw=";
- };
- in
- lib.attrsets.mapAttrsToList (release: hash: fetchurl {
- url = "https://github.com/supertuxkart/stk-code/releases/download/1.5/SuperTuxKart-1.5-${release}";
- sha256 = hash;
- }) releaseHashes
- ++ [(writeText "hashes.txt" (builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (release: hash: "SuperTuxKart-1.5-${release} ${hash}") releaseHashes)))];
-
- sourceRoot = ".";
-
- unpackPhase = ":";
-
- installPhase = ''
-mkdir -p $out/srv/www
-for srcFile in $srcs; do
- cp $srcFile "$out/srv/www/$(stripHash $srcFile)"
-done
-'';
-}
diff --git a/website/default.nix b/website/default.nix
deleted file mode 100644
index 1b78a77..0000000
--- a/website/default.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{ stdenv, ... }:
-stdenv.mkDerivation {
- pname = "TehWebsite";
- version = "0.0.1";
-
- src = ./src;
-
- installPhase = ''
-mkdir -p $out/srv/www
-cp -r ./* $out/srv/www
-'';
-}