From c3c3d6f1fd19a5da015c9a9d3ae5c54f2d177be0 Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Tue, 26 Aug 2025 21:36:16 -0500 Subject: reogranize files more only working on optiplex for now prepare for home manager refactoring --- archetypes/collections/bluetooth.nix | 12 ++ archetypes/collections/desktop/cad.nix | 15 ++ archetypes/collections/desktop/chromium.nix | 18 ++ archetypes/collections/desktop/crypto.nix | 13 ++ archetypes/collections/desktop/default.nix | 13 ++ archetypes/collections/desktop/extra.nix | 16 ++ archetypes/collections/desktop/firefox.nix | 12 ++ archetypes/collections/desktop/graphics.nix | 16 ++ archetypes/collections/desktop/office.nix | 18 ++ archetypes/collections/desktop/utilities.nix | 29 +++ archetypes/collections/desktop/xserver.nix | 34 ++++ archetypes/collections/development/default.nix | 45 +++++ archetypes/collections/development/docker.nix | 23 +++ archetypes/collections/fonts.nix | 16 ++ archetypes/collections/utilities.nix | 35 ++++ archetypes/collections/virtualization.nix | 22 +++ archetypes/default.nix | 15 ++ archetypes/profiles/desktop/default.nix | 53 ++++++ archetypes/profiles/headless/default.nix | 32 ++++ archetypes/tjkeller/default.nix | 10 + archetypes/tjkeller/hosts.nix | 16 ++ archetypes/tjkeller/localization.nix | 5 + archetypes/tjkeller/nas.nix | 35 ++++ archetypes/tjkeller/printing.nix | 39 ++++ .../resources/secrets/hashed-root-password.yaml | 25 +++ .../resources/secrets/wpa_supplicant-conf.yaml | 16 ++ archetypes/tjkeller/user.nix | 22 +++ archetypes/tjkeller/wifi.nix | 38 ++++ archetypes/users/primary.nix | 37 ++++ flake.nix | 17 +- home-manager/default.nix | 25 +++ home-manager/firefox.nix | 83 +++++++++ home-manager/git.nix | 7 + home-manager/gtk-bookmarks.nix | 17 ++ home-manager/htop.nix | 38 ++++ home-manager/initial-home-setup.nix | 22 +++ home-manager/pcmanfm.nix | 6 + .../resources/activation-scripts/clone-repos.sh | 30 +++ .../resources/firefox/uiCustomization.json | 1 + home-manager/resources/firefox/userChrome.css | 204 +++++++++++++++++++++ home-manager/resources/pcmanfm/root.desktop | 11 ++ home-manager/theme-st.nix | 22 +++ home-manager/theme.nix | 101 ++++++++++ home-manager/userdirs.nix | 5 + home-manager/wallpapers.nix | 14 ++ hosts/T495/configuration.nix | 64 +++++++ hosts/T495/hardware-configuration.nix | 49 +++++ hosts/T495/home.nix | 19 ++ hosts/T495/resources/input-leap/input-leap.conf | 12 ++ hosts/T495/resources/secrets/wg0.yaml | 21 +++ hosts/T495/wg.nix | 7 + hosts/X230/configuration.nix | 30 +++ hosts/X230/hardware-configuration.nix | 48 +++++ hosts/X230/home.nix | 18 ++ hosts/flex-wg-router/configuration.nix | 17 ++ hosts/flex-wg-router/hardware-configuration.nix | 45 +++++ hosts/flex-wg-router/home.nix | 7 + hosts/hp-envy-office/configuration.nix | 52 ++++++ hosts/hp-envy-office/hardware-configuration.nix | 48 +++++ hosts/hp-envy-office/home.nix | 12 ++ hosts/libreX60/bios-flashing.nix | 8 + hosts/libreX60/configuration.nix | 25 +++ hosts/libreX60/hardware-configuration.nix | 46 +++++ hosts/libreX60/home.nix | 18 ++ hosts/libreX60/powertop-auto-tune.nix | 17 ++ hosts/optiplex/configuration.nix | 73 ++++++++ hosts/optiplex/hardware-configuration.nix | 45 +++++ hosts/optiplex/home.nix | 7 + hosts/poweredge/configuration.nix | 19 ++ modules/home/alacritty.nix | 67 ------- modules/home/chrome.nix | 28 --- modules/home/default.nix | 26 --- modules/home/firefox.nix | 83 --------- modules/home/git.nix | 7 - modules/home/gtk-bookmarks.nix | 17 -- modules/home/htop.nix | 38 ---- modules/home/initial-home-setup.nix | 22 --- modules/home/pcmanfm.nix | 6 - .../resources/activation-scripts/clone-repos.sh | 30 --- .../home/resources/firefox/uiCustomization.json | 1 - modules/home/resources/firefox/userChrome.css | 204 --------------------- modules/home/resources/pcmanfm/root.desktop | 11 -- modules/home/theme-st.nix | 22 --- modules/home/theme.nix | 101 ---------- modules/home/userdirs.nix | 5 - modules/home/wallpapers.nix | 14 -- modules/hosts/T495/configuration.nix | 64 ------- modules/hosts/T495/hardware-configuration.nix | 49 ----- modules/hosts/T495/home.nix | 19 -- .../T495/resources/input-leap/input-leap.conf | 12 -- modules/hosts/T495/resources/secrets/wg0.yaml | 21 --- modules/hosts/T495/wg.nix | 7 - modules/hosts/X230/configuration.nix | 30 --- modules/hosts/X230/hardware-configuration.nix | 48 ----- modules/hosts/X230/home.nix | 18 -- modules/hosts/flex-wg-router/configuration.nix | 17 -- .../flex-wg-router/hardware-configuration.nix | 45 ----- modules/hosts/flex-wg-router/home.nix | 7 - modules/hosts/hp-envy-office/configuration.nix | 52 ------ .../hp-envy-office/hardware-configuration.nix | 48 ----- modules/hosts/hp-envy-office/home.nix | 12 -- modules/hosts/libreX60/bios-flashing.nix | 8 - modules/hosts/libreX60/configuration.nix | 25 --- modules/hosts/libreX60/hardware-configuration.nix | 46 ----- modules/hosts/libreX60/home.nix | 18 -- modules/hosts/libreX60/powertop-auto-tune.nix | 17 -- modules/hosts/optiplex/configuration.nix | 73 -------- modules/hosts/optiplex/hardware-configuration.nix | 45 ----- modules/hosts/optiplex/home.nix | 7 - modules/hosts/poweredge/configuration.nix | 19 -- modules/nixos/archetypes/collections/bluetooth.nix | 12 -- .../nixos/archetypes/collections/desktop/cad.nix | 15 -- .../archetypes/collections/desktop/chromium.nix | 18 -- .../archetypes/collections/desktop/crypto.nix | 13 -- .../archetypes/collections/desktop/default.nix | 13 -- .../nixos/archetypes/collections/desktop/extra.nix | 16 -- .../archetypes/collections/desktop/firefox.nix | 12 -- .../archetypes/collections/desktop/graphics.nix | 16 -- .../archetypes/collections/desktop/office.nix | 18 -- .../archetypes/collections/desktop/utilities.nix | 29 --- .../archetypes/collections/desktop/xserver.nix | 34 ---- .../archetypes/collections/development/default.nix | 45 ----- .../archetypes/collections/development/docker.nix | 23 --- modules/nixos/archetypes/collections/fonts.nix | 16 -- modules/nixos/archetypes/collections/utilities.nix | 35 ---- .../archetypes/collections/virtualization.nix | 22 --- .../nixos/archetypes/profiles/desktop/default.nix | 53 ------ .../nixos/archetypes/profiles/headless/default.nix | 32 ---- modules/nixos/archetypes/tjkeller/default.nix | 10 - modules/nixos/archetypes/tjkeller/hosts.nix | 16 -- modules/nixos/archetypes/tjkeller/localization.nix | 5 - modules/nixos/archetypes/tjkeller/nas.nix | 35 ---- modules/nixos/archetypes/tjkeller/printing.nix | 39 ---- .../resources/secrets/hashed-root-password.yaml | 25 --- .../resources/secrets/wpa_supplicant-conf.yaml | 16 -- modules/nixos/archetypes/tjkeller/user.nix | 22 --- modules/nixos/archetypes/tjkeller/wifi.nix | 38 ---- modules/nixos/archetypes/users/primary.nix | 37 ---- modules/nixos/bootloader.nix | 48 ----- modules/nixos/default.nix | 37 ---- modules/nixos/doas.nix | 17 -- modules/nixos/filesystems.nix | 7 - modules/nixos/hosts.nix | 4 - modules/nixos/net-iface-labels.nix | 28 --- modules/nixos/nix.nix | 11 -- modules/nixos/pipewire.nix | 14 -- modules/nixos/powerkeys.nix | 7 - modules/nixos/printing.nix | 18 -- modules/nixos/programs/awesome.nix | 22 --- modules/nixos/programs/ddcutil.nix | 12 -- modules/nixos/programs/home-manager.nix | 15 -- modules/nixos/secrets.nix | 10 - modules/nixos/services/cgit.nix | 126 ------------- modules/nixos/services/gitea.nix | 60 ------ modules/nixos/services/searxng.nix | 119 ------------ modules/nixos/ssh.nix | 16 -- modules/nixos/sudo.nix | 15 -- modules/nixos/suspend.nix | 18 -- modules/overlays/crazydiskinfo/default.nix | 41 ----- modules/overlays/default.nix | 31 ---- modules/overlays/lowbat/default.nix | 28 --- modules/overlays/st/overrides.nix | 19 -- .../default.nix | 86 --------- modules/overlays/xorg/overrides.nix | 20 -- nixos/bootloader.nix | 48 +++++ nixos/default.nix | 25 +++ nixos/doas.nix | 17 ++ nixos/filesystems.nix | 7 + nixos/hosts.nix | 4 + nixos/net-iface-labels.nix | 28 +++ nixos/nix.nix | 11 ++ nixos/pipewire.nix | 14 ++ nixos/powerkeys.nix | 7 + nixos/printing.nix | 18 ++ nixos/programs/awesome.nix | 22 +++ nixos/programs/ddcutil.nix | 12 ++ nixos/programs/home-manager.nix | 15 ++ nixos/secrets.nix | 10 + nixos/services/cgit.nix | 126 +++++++++++++ nixos/services/gitea.nix | 60 ++++++ nixos/services/searxng.nix | 119 ++++++++++++ nixos/ssh.nix | 16 ++ nixos/sudo.nix | 15 ++ nixos/suspend.nix | 18 ++ pkgs/crazydiskinfo/default.nix | 41 +++++ pkgs/default.nix | 31 ++++ pkgs/lowbat/default.nix | 28 +++ pkgs/st/overrides.nix | 19 ++ .../default.nix | 86 +++++++++ pkgs/xorg/overrides.nix | 20 ++ 190 files changed, 2799 insertions(+), 2891 deletions(-) create mode 100644 archetypes/collections/bluetooth.nix create mode 100644 archetypes/collections/desktop/cad.nix create mode 100644 archetypes/collections/desktop/chromium.nix create mode 100644 archetypes/collections/desktop/crypto.nix create mode 100644 archetypes/collections/desktop/default.nix create mode 100644 archetypes/collections/desktop/extra.nix create mode 100644 archetypes/collections/desktop/firefox.nix create mode 100644 archetypes/collections/desktop/graphics.nix create mode 100644 archetypes/collections/desktop/office.nix create mode 100644 archetypes/collections/desktop/utilities.nix create mode 100644 archetypes/collections/desktop/xserver.nix create mode 100644 archetypes/collections/development/default.nix create mode 100644 archetypes/collections/development/docker.nix create mode 100644 archetypes/collections/fonts.nix create mode 100644 archetypes/collections/utilities.nix create mode 100644 archetypes/collections/virtualization.nix create mode 100644 archetypes/default.nix create mode 100644 archetypes/profiles/desktop/default.nix create mode 100644 archetypes/profiles/headless/default.nix create mode 100644 archetypes/tjkeller/default.nix create mode 100644 archetypes/tjkeller/hosts.nix create mode 100644 archetypes/tjkeller/localization.nix create mode 100644 archetypes/tjkeller/nas.nix create mode 100644 archetypes/tjkeller/printing.nix create mode 100644 archetypes/tjkeller/resources/secrets/hashed-root-password.yaml create mode 100644 archetypes/tjkeller/resources/secrets/wpa_supplicant-conf.yaml create mode 100644 archetypes/tjkeller/user.nix create mode 100644 archetypes/tjkeller/wifi.nix create mode 100644 archetypes/users/primary.nix create mode 100644 home-manager/default.nix create mode 100644 home-manager/firefox.nix create mode 100644 home-manager/git.nix create mode 100644 home-manager/gtk-bookmarks.nix create mode 100644 home-manager/htop.nix create mode 100644 home-manager/initial-home-setup.nix create mode 100644 home-manager/pcmanfm.nix create mode 100644 home-manager/resources/activation-scripts/clone-repos.sh create mode 100644 home-manager/resources/firefox/uiCustomization.json create mode 100644 home-manager/resources/firefox/userChrome.css create mode 100644 home-manager/resources/pcmanfm/root.desktop create mode 100644 home-manager/theme-st.nix create mode 100644 home-manager/theme.nix create mode 100644 home-manager/userdirs.nix create mode 100644 home-manager/wallpapers.nix create mode 100644 hosts/T495/configuration.nix create mode 100644 hosts/T495/hardware-configuration.nix create mode 100644 hosts/T495/home.nix create mode 100644 hosts/T495/resources/input-leap/input-leap.conf create mode 100644 hosts/T495/resources/secrets/wg0.yaml create mode 100644 hosts/T495/wg.nix create mode 100644 hosts/X230/configuration.nix create mode 100644 hosts/X230/hardware-configuration.nix create mode 100644 hosts/X230/home.nix create mode 100644 hosts/flex-wg-router/configuration.nix create mode 100644 hosts/flex-wg-router/hardware-configuration.nix create mode 100644 hosts/flex-wg-router/home.nix create mode 100644 hosts/hp-envy-office/configuration.nix create mode 100644 hosts/hp-envy-office/hardware-configuration.nix create mode 100644 hosts/hp-envy-office/home.nix create mode 100644 hosts/libreX60/bios-flashing.nix create mode 100644 hosts/libreX60/configuration.nix create mode 100644 hosts/libreX60/hardware-configuration.nix create mode 100644 hosts/libreX60/home.nix create mode 100644 hosts/libreX60/powertop-auto-tune.nix create mode 100644 hosts/optiplex/configuration.nix create mode 100644 hosts/optiplex/hardware-configuration.nix create mode 100644 hosts/optiplex/home.nix create mode 100644 hosts/poweredge/configuration.nix delete mode 100644 modules/home/alacritty.nix delete mode 100644 modules/home/chrome.nix delete mode 100644 modules/home/default.nix delete mode 100644 modules/home/firefox.nix delete mode 100644 modules/home/git.nix delete mode 100644 modules/home/gtk-bookmarks.nix delete mode 100644 modules/home/htop.nix delete mode 100644 modules/home/initial-home-setup.nix delete mode 100644 modules/home/pcmanfm.nix delete mode 100644 modules/home/resources/activation-scripts/clone-repos.sh delete mode 100644 modules/home/resources/firefox/uiCustomization.json delete mode 100644 modules/home/resources/firefox/userChrome.css delete mode 100644 modules/home/resources/pcmanfm/root.desktop delete mode 100644 modules/home/theme-st.nix delete mode 100644 modules/home/theme.nix delete mode 100644 modules/home/userdirs.nix delete mode 100644 modules/home/wallpapers.nix delete mode 100644 modules/hosts/T495/configuration.nix delete mode 100644 modules/hosts/T495/hardware-configuration.nix delete mode 100644 modules/hosts/T495/home.nix delete mode 100644 modules/hosts/T495/resources/input-leap/input-leap.conf delete mode 100644 modules/hosts/T495/resources/secrets/wg0.yaml delete mode 100644 modules/hosts/T495/wg.nix delete mode 100644 modules/hosts/X230/configuration.nix delete mode 100644 modules/hosts/X230/hardware-configuration.nix delete mode 100644 modules/hosts/X230/home.nix delete mode 100644 modules/hosts/flex-wg-router/configuration.nix delete mode 100644 modules/hosts/flex-wg-router/hardware-configuration.nix delete mode 100644 modules/hosts/flex-wg-router/home.nix delete mode 100644 modules/hosts/hp-envy-office/configuration.nix delete mode 100644 modules/hosts/hp-envy-office/hardware-configuration.nix delete mode 100644 modules/hosts/hp-envy-office/home.nix delete mode 100644 modules/hosts/libreX60/bios-flashing.nix delete mode 100644 modules/hosts/libreX60/configuration.nix delete mode 100644 modules/hosts/libreX60/hardware-configuration.nix delete mode 100644 modules/hosts/libreX60/home.nix delete mode 100644 modules/hosts/libreX60/powertop-auto-tune.nix delete mode 100644 modules/hosts/optiplex/configuration.nix delete mode 100644 modules/hosts/optiplex/hardware-configuration.nix delete mode 100644 modules/hosts/optiplex/home.nix delete mode 100644 modules/hosts/poweredge/configuration.nix delete mode 100644 modules/nixos/archetypes/collections/bluetooth.nix delete mode 100644 modules/nixos/archetypes/collections/desktop/cad.nix delete mode 100644 modules/nixos/archetypes/collections/desktop/chromium.nix delete mode 100644 modules/nixos/archetypes/collections/desktop/crypto.nix delete mode 100644 modules/nixos/archetypes/collections/desktop/default.nix delete mode 100644 modules/nixos/archetypes/collections/desktop/extra.nix delete mode 100644 modules/nixos/archetypes/collections/desktop/firefox.nix delete mode 100644 modules/nixos/archetypes/collections/desktop/graphics.nix delete mode 100644 modules/nixos/archetypes/collections/desktop/office.nix delete mode 100644 modules/nixos/archetypes/collections/desktop/utilities.nix delete mode 100644 modules/nixos/archetypes/collections/desktop/xserver.nix delete mode 100644 modules/nixos/archetypes/collections/development/default.nix delete mode 100644 modules/nixos/archetypes/collections/development/docker.nix delete mode 100644 modules/nixos/archetypes/collections/fonts.nix delete mode 100644 modules/nixos/archetypes/collections/utilities.nix delete mode 100644 modules/nixos/archetypes/collections/virtualization.nix delete mode 100644 modules/nixos/archetypes/profiles/desktop/default.nix delete mode 100644 modules/nixos/archetypes/profiles/headless/default.nix delete mode 100644 modules/nixos/archetypes/tjkeller/default.nix delete mode 100644 modules/nixos/archetypes/tjkeller/hosts.nix delete mode 100644 modules/nixos/archetypes/tjkeller/localization.nix delete mode 100644 modules/nixos/archetypes/tjkeller/nas.nix delete mode 100644 modules/nixos/archetypes/tjkeller/printing.nix delete mode 100644 modules/nixos/archetypes/tjkeller/resources/secrets/hashed-root-password.yaml delete mode 100644 modules/nixos/archetypes/tjkeller/resources/secrets/wpa_supplicant-conf.yaml delete mode 100644 modules/nixos/archetypes/tjkeller/user.nix delete mode 100644 modules/nixos/archetypes/tjkeller/wifi.nix delete mode 100644 modules/nixos/archetypes/users/primary.nix delete mode 100644 modules/nixos/bootloader.nix delete mode 100644 modules/nixos/default.nix delete mode 100644 modules/nixos/doas.nix delete mode 100644 modules/nixos/filesystems.nix delete mode 100644 modules/nixos/hosts.nix delete mode 100644 modules/nixos/net-iface-labels.nix delete mode 100644 modules/nixos/nix.nix delete mode 100644 modules/nixos/pipewire.nix delete mode 100644 modules/nixos/powerkeys.nix delete mode 100644 modules/nixos/printing.nix delete mode 100644 modules/nixos/programs/awesome.nix delete mode 100644 modules/nixos/programs/ddcutil.nix delete mode 100644 modules/nixos/programs/home-manager.nix delete mode 100644 modules/nixos/secrets.nix delete mode 100644 modules/nixos/services/cgit.nix delete mode 100644 modules/nixos/services/gitea.nix delete mode 100644 modules/nixos/services/searxng.nix delete mode 100644 modules/nixos/ssh.nix delete mode 100644 modules/nixos/sudo.nix delete mode 100644 modules/nixos/suspend.nix delete mode 100644 modules/overlays/crazydiskinfo/default.nix delete mode 100644 modules/overlays/default.nix delete mode 100644 modules/overlays/lowbat/default.nix delete mode 100644 modules/overlays/st/overrides.nix delete mode 100644 modules/overlays/xerox-workcentre-7800-series-driver/default.nix delete mode 100644 modules/overlays/xorg/overrides.nix create mode 100644 nixos/bootloader.nix create mode 100644 nixos/default.nix create mode 100644 nixos/doas.nix create mode 100644 nixos/filesystems.nix create mode 100644 nixos/hosts.nix create mode 100644 nixos/net-iface-labels.nix create mode 100644 nixos/nix.nix create mode 100644 nixos/pipewire.nix create mode 100644 nixos/powerkeys.nix create mode 100644 nixos/printing.nix create mode 100644 nixos/programs/awesome.nix create mode 100644 nixos/programs/ddcutil.nix create mode 100644 nixos/programs/home-manager.nix create mode 100644 nixos/secrets.nix create mode 100644 nixos/services/cgit.nix create mode 100644 nixos/services/gitea.nix create mode 100644 nixos/services/searxng.nix create mode 100644 nixos/ssh.nix create mode 100644 nixos/sudo.nix create mode 100644 nixos/suspend.nix create mode 100644 pkgs/crazydiskinfo/default.nix create mode 100644 pkgs/default.nix create mode 100644 pkgs/lowbat/default.nix create mode 100644 pkgs/st/overrides.nix create mode 100644 pkgs/xerox-workcentre-7800-series-driver/default.nix create mode 100644 pkgs/xorg/overrides.nix diff --git a/archetypes/collections/bluetooth.nix b/archetypes/collections/bluetooth.nix new file mode 100644 index 0000000..749a9f1 --- /dev/null +++ b/archetypes/collections/bluetooth.nix @@ -0,0 +1,12 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.bluetooth; +in { + options._archetypes.collections.bluetooth = { + enable = lib.mkEnableOption "enables bluetooth and blueman"; + }; + + config = lib.mkIf cfg.enable { + hardware.bluetooth.enable = true; + services.blueman.enable = config._archetypes.collections.desktop.utilities.enable; # FIXME + }; +} diff --git a/archetypes/collections/desktop/cad.nix b/archetypes/collections/desktop/cad.nix new file mode 100644 index 0000000..33edcd5 --- /dev/null +++ b/archetypes/collections/desktop/cad.nix @@ -0,0 +1,15 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.desktop.cad; +in { + options._archetypes.collections.desktop.cad = { + enable = lib.mkEnableOption "install cad and 3d printing software"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + blender + freecad + prusa-slicer + ]; + }; +} diff --git a/archetypes/collections/desktop/chromium.nix b/archetypes/collections/desktop/chromium.nix new file mode 100644 index 0000000..b4638f0 --- /dev/null +++ b/archetypes/collections/desktop/chromium.nix @@ -0,0 +1,18 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.desktop.chromium; +in { + options._archetypes.collections.desktop.chromium = { + enable = lib.mkEnableOption "install chromium browser"; + package = lib.mkOption { + type = lib.types.package; + default = pkgs.ungoogled-chromium; + description = "chromium package to install"; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ + cfg.package + ]; + }; +} diff --git a/archetypes/collections/desktop/crypto.nix b/archetypes/collections/desktop/crypto.nix new file mode 100644 index 0000000..f90919e --- /dev/null +++ b/archetypes/collections/desktop/crypto.nix @@ -0,0 +1,13 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.desktop.crypto; +in { + options._archetypes.collections.desktop.crypto = { + enable = lib.mkEnableOption "install crypto wallets"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + sparrow + ]; + }; +} diff --git a/archetypes/collections/desktop/default.nix b/archetypes/collections/desktop/default.nix new file mode 100644 index 0000000..bbca8df --- /dev/null +++ b/archetypes/collections/desktop/default.nix @@ -0,0 +1,13 @@ +{ + imports = [ + ./cad.nix + ./chromium.nix + ./crypto.nix + ./extra.nix + ./firefox.nix + ./graphics.nix + ./office.nix + ./utilities.nix + ./xserver.nix + ]; +} diff --git a/archetypes/collections/desktop/extra.nix b/archetypes/collections/desktop/extra.nix new file mode 100644 index 0000000..699b20f --- /dev/null +++ b/archetypes/collections/desktop/extra.nix @@ -0,0 +1,16 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.desktop.extraUtilities; +in { + options._archetypes.collections.desktop.extraUtilities = { + enable = lib.mkEnableOption "install extra desktop utilities"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + jellyfin-mpv-shim + qbittorrent + qdirstat + remmina + ]; + }; +} diff --git a/archetypes/collections/desktop/firefox.nix b/archetypes/collections/desktop/firefox.nix new file mode 100644 index 0000000..02656f6 --- /dev/null +++ b/archetypes/collections/desktop/firefox.nix @@ -0,0 +1,12 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.desktop.firefox; +in { + options._archetypes.collections.desktop.firefox = { + enable = lib.mkEnableOption "install firefox"; + }; + + config = lib.mkIf cfg.enable { + programs.firefox.enable = true; + }; +} + diff --git a/archetypes/collections/desktop/graphics.nix b/archetypes/collections/desktop/graphics.nix new file mode 100644 index 0000000..f4242d1 --- /dev/null +++ b/archetypes/collections/desktop/graphics.nix @@ -0,0 +1,16 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.desktop.graphics; +in { + options._archetypes.collections.desktop.graphics = { + enable = lib.mkEnableOption "install graphic design software"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + blender + geeqie + gimp3 + inkscape + ]; + }; +} diff --git a/archetypes/collections/desktop/office.nix b/archetypes/collections/desktop/office.nix new file mode 100644 index 0000000..23e6862 --- /dev/null +++ b/archetypes/collections/desktop/office.nix @@ -0,0 +1,18 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.desktop.office; +in { + options._archetypes.collections.desktop.office = { + enable = lib.mkEnableOption "install office software"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + hunspell # Spell checking in libreoffice + hunspellDicts.en_US + kdePackages.okular + libreoffice + pdfchain + thunderbird + ]; + }; +} diff --git a/archetypes/collections/desktop/utilities.nix b/archetypes/collections/desktop/utilities.nix new file mode 100644 index 0000000..43d4973 --- /dev/null +++ b/archetypes/collections/desktop/utilities.nix @@ -0,0 +1,29 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.desktop.utilities; +in { + options._archetypes.collections.desktop.utilities = { + enable = lib.mkEnableOption "install basic desktop utilities"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + arandr + dmenu + libnotify + lowbat + mpv + pavolctld + pavucontrol + pcmanfm + redshift + scrot + st + sxiv + wpa_supplicant_gui + zathura + ]; + + programs.localsend.enable = true; # Installs & opens firewall + services.gvfs.enable = true; # GVfs allows for mounting drives in a graphical file manager + }; +} diff --git a/archetypes/collections/desktop/xserver.nix b/archetypes/collections/desktop/xserver.nix new file mode 100644 index 0000000..4cbdae8 --- /dev/null +++ b/archetypes/collections/desktop/xserver.nix @@ -0,0 +1,34 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.desktop.xserver; +in { + options._archetypes.collections.desktop.xserver = { + enable = lib.mkEnableOption "installs xserver"; + utilities.enable = lib.mkEnableOption "installs basic xserver utilities"; + }; + + config = lib.mkIf cfg.enable { + services.xserver.enable = true; + services.xserver.displayManager.startx.enable = true; + services.libinput.enable = true; # Enable touchpad support + + # Install basic X utilities + environment.systemPackages = with pkgs; lib.optionals cfg.utilities.enable [ + unclutter + xcape + xclip + xdotool + xorg.setxkbmap + xorg.xinput + xorg.xkill + xorg.xrandr + xorg.xset + xwallpaper + ]; + + # Enable TearFree option by default + # Not all video drivers support this option + services.xserver.deviceSection = '' + Option "TearFree" "true" + ''; + }; +} diff --git a/archetypes/collections/development/default.nix b/archetypes/collections/development/default.nix new file mode 100644 index 0000000..87fe2d2 --- /dev/null +++ b/archetypes/collections/development/default.nix @@ -0,0 +1,45 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.development; + hugoFirewallPort = 1313; +in { + imports = [ + ./docker.nix + ]; + + options._archetypes.collections.development = { + utilities.enable = lib.mkEnableOption "install basic dev utilities"; + android.enable = lib.mkEnableOption "install android dev tools"; + c.enable = lib.mkEnableOption "install c dev tools"; + lua.enable = lib.mkEnableOption "install lua dev tools"; + web = { + hugo = { + enable = lib.mkEnableOption "install hugo"; + openFirewall = lib.mkEnableOption "open the port ${hugoFirewallPort} for viewing content from hugo serve on other devices"; + }; + node.enable = lib.mkEnableOption "install node"; + }; + }; + + config = { + environment.systemPackages = with pkgs; [ + git + python3 + ] ++ lib.optionals cfg.android.enable [ + #adb-sync + android-tools + ] ++ lib.optionals cfg.c.enable [ + gcc + git + gnumake + pkg-config + ] ++ lib.optionals cfg.lua.enable [ + lua + ] ++ lib.optionals cfg.web.hugo.enable [ + hugo + ] ++ lib.optionals cfg.web.node.enable [ + nodejs + ]; + + networking.firewall.allowedTCPPorts = lib.mkIf cfg.web.hugo.openFirewall [ hugoFirewallPort ]; + }; +} diff --git a/archetypes/collections/development/docker.nix b/archetypes/collections/development/docker.nix new file mode 100644 index 0000000..629dff3 --- /dev/null +++ b/archetypes/collections/development/docker.nix @@ -0,0 +1,23 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.development.docker; +in { + options._archetypes.collections.development.docker = { + enable = lib.mkEnableOption "enables docker"; + btrfsSupport = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Changes docker storageDriver to btrfs."; + }; + }; + + config = lib.mkIf cfg.enable { + virtualisation.docker = { + enable = true; + storageDriver = lib.mkIf cfg.btrfsSupport "btrfs"; + }; + + environment.systemPackages = with pkgs; [ + docker-compose + ]; + }; +} diff --git a/archetypes/collections/fonts.nix b/archetypes/collections/fonts.nix new file mode 100644 index 0000000..136e31b --- /dev/null +++ b/archetypes/collections/fonts.nix @@ -0,0 +1,16 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.fonts; +in { + options._archetypes.collections.fonts = { + enable = lib.mkEnableOption "enables fonts"; + }; + + config = lib.mkIf cfg.enable { + fonts.packages = with pkgs; [ + commit-mono + inter + nerd-fonts.jetbrains-mono + tamzen + ]; + }; +} diff --git a/archetypes/collections/utilities.nix b/archetypes/collections/utilities.nix new file mode 100644 index 0000000..85763a4 --- /dev/null +++ b/archetypes/collections/utilities.nix @@ -0,0 +1,35 @@ +{ pkgs, ... }: { + environment.systemPackages = with pkgs; [ + crazydiskinfo + dash # TODO should be default /bin/sh + entr + fastfetch + ffmpeg + htop + jq + light + lm_sensors + mediainfo + neovim + nmap + openssl + p7zip + powertop + pv + rsync + screen + smartmontools + sslscan + stress + testdisk + tmux + uhubctl + vimv-rs + wget + wireguard-tools + xxHash + yt-dlp + ]; + + services.gpm.enable = true; +} diff --git a/archetypes/collections/virtualization.nix b/archetypes/collections/virtualization.nix new file mode 100644 index 0000000..fda0e48 --- /dev/null +++ b/archetypes/collections/virtualization.nix @@ -0,0 +1,22 @@ +{ pkgs, lib, config, ... }: let + cfg = config._archetypes.collections.virtualization; +in { + options._archetypes.collections.virtualization = { + enable = lib.mkEnableOption "enables virtualization and virt-manager"; + }; + + config = lib.mkIf cfg.enable { + virtualisation = { + spiceUSBRedirection.enable = true; + libvirtd.enable = true; + # Enable efi support with ovmf firmware + libvirtd.qemu = { + package = pkgs.qemu_kvm; + runAsRoot = true; + swtpm.enable = true; + ovmf.enable = true; + }; + }; + programs.virt-manager.enable = config._archetypes.collections.desktop.utilities.enable; # FIXME + }; +} diff --git a/archetypes/default.nix b/archetypes/default.nix new file mode 100644 index 0000000..f201fc3 --- /dev/null +++ b/archetypes/default.nix @@ -0,0 +1,15 @@ +{ + imports = [ + ./collections/bluetooth.nix + ./collections/desktop + ./collections/development + ./collections/fonts.nix + ./collections/utilities.nix + ./collections/virtualization.nix + + ./profiles/desktop + ./profiles/headless + + ./users/primary.nix + ]; +} diff --git a/archetypes/profiles/desktop/default.nix b/archetypes/profiles/desktop/default.nix new file mode 100644 index 0000000..d9a7dc7 --- /dev/null +++ b/archetypes/profiles/desktop/default.nix @@ -0,0 +1,53 @@ +{ lib, config, pkgs, ... }: let + mkDesktop = lib.mkOverride 920; + cfg = config._archetypes.profiles.desktop; +in { + options._archetypes.profiles.desktop = { + enable = lib.mkEnableOption "enable desktop profile"; + }; + + config = lib.mkIf cfg.enable { + _archetypes.collections = { + desktop = { + utilities.enable = mkDesktop true; + firefox.enable = mkDesktop true; + xserver = { + enable = mkDesktop true; + utilities.enable = mkDesktop true; + }; + }; + development = { + utilities.enable = mkDesktop true; + }; + fonts.enable = mkDesktop true; + }; + + _archetypes.users.primary = { + enable = mkDesktop true; + }; + + security = { + _doas.enable = mkDesktop true; + }; + + programs = { + _ddcutil.enable = mkDesktop true; + _home-manager.enable = mkDesktop true; + }; + + services = { + xserver = { + windowManager._awesome.enable = mkDesktop true; + }; + _pipewire.enable = mkDesktop true; + _printing.enable = mkDesktop true; + _ssh.enable = mkDesktop true; + tlp.enable = mkDesktop true; + + # Ensure video group can change backlight + udev.extraRules = '' + SUBSYSTEM=="backlight", ACTION=="add", RUN+="${pkgs.coreutils}/bin/chgrp video /sys/class/backlight/%k/brightness", RUN+="${pkgs.coreutils}/bin/chmod g+w /sys/class/backlight/%k/brightness" + ''; + }; + }; +} diff --git a/archetypes/profiles/headless/default.nix b/archetypes/profiles/headless/default.nix new file mode 100644 index 0000000..ef17db0 --- /dev/null +++ b/archetypes/profiles/headless/default.nix @@ -0,0 +1,32 @@ +{ lib, config, ... }: let + mkHeadless = lib.mkOverride 910; + cfg = config._archetypes.profiles.headless; +in { + options._archetypes.profiles.headless = { + enable = lib.mkEnableOption "enable headless profile"; + }; + + config = lib.mkIf cfg.enable { + _archetypes.collections = { + development = { + utilities.enable = mkHeadless true; + }; + }; + + _archetypes.users = { + primary.enable = mkHeadless true; + }; + + security = { + _doas.enable = mkHeadless true; + }; + + programs = { + _ddcutil.enable = mkHeadless true; + }; + + services = { + _ssh.enable = mkHeadless true; + }; + }; +} diff --git a/archetypes/tjkeller/default.nix b/archetypes/tjkeller/default.nix new file mode 100644 index 0000000..6a9bbd9 --- /dev/null +++ b/archetypes/tjkeller/default.nix @@ -0,0 +1,10 @@ +{ + imports = [ + ./hosts.nix + ./localization.nix + ./nas.nix + ./printing.nix + ./user.nix + ./wifi.nix + ]; +} diff --git a/archetypes/tjkeller/hosts.nix b/archetypes/tjkeller/hosts.nix new file mode 100644 index 0000000..66c6ccc --- /dev/null +++ b/archetypes/tjkeller/hosts.nix @@ -0,0 +1,16 @@ +{ + networking.hosts = { + "192.168.1.9" = [ "optiplex" ]; + "192.168.1.30" = [ "localgit" ]; + "192.168.1.11" = [ "truenas-home" ]; + "192.168.77.11" = [ "truenas-office" ]; + "192.168.77.8" = [ "publicgit" "tjkeller" ]; + "192.168.77.3" = [ "devel" ]; + "173.9.253.3" = [ + "git.tjkeller.xyz" + "piped.tjkeller.xyz" + "search.tjkeller.xyz" + "tjkeller.xyz" + ]; + }; +} diff --git a/archetypes/tjkeller/localization.nix b/archetypes/tjkeller/localization.nix new file mode 100644 index 0000000..8313f07 --- /dev/null +++ b/archetypes/tjkeller/localization.nix @@ -0,0 +1,5 @@ +{ + time.timeZone = "America/Chicago"; + i18n.defaultLocale = "en_US.UTF-8"; + services.xserver.xkb.layout = "us"; +} diff --git a/archetypes/tjkeller/nas.nix b/archetypes/tjkeller/nas.nix new file mode 100644 index 0000000..1ed0ca3 --- /dev/null +++ b/archetypes/tjkeller/nas.nix @@ -0,0 +1,35 @@ +{ lib, config, ... } : +let + cfg = config._archetypes.tjkeller.nas; + mkNetworkFileSystem = device: automount: { + device = "${device}"; + fsType = "nfs"; + options = [ "defaults" ] ++ lib.optionals (!automount) [ "noauto" ]; + }; +in { + options._archetypes.tjkeller.nas = { + enable = lib.mkEnableOption "enable network shares"; + home = { + enable = lib.mkEnableOption "enable home network shares"; + automount = lib.mkEnableOption "automount home network shares"; + }; + office = { + enable = lib.mkEnableOption "enable office network shares"; + automount = lib.mkEnableOption "automount home network shares"; + }; + }; + + config = lib.mkIf cfg.enable { + fileSystems = lib.optionalAttrs cfg.home.enable { + "/media/Storage/Media" = mkNetworkFileSystem "truenas-home:/mnt/Storage/Media" cfg.home.automount; + "/media/Storage/Backups" = mkNetworkFileSystem "truenas-home:/mnt/Storage/Backups" cfg.home.automount; + "/media/Storage/Tapes" = mkNetworkFileSystem "truenas-home:/mnt/Storage/Backups/Tapes" cfg.home.automount; + "/media/Family Photos" = mkNetworkFileSystem "truenas-home:/mnt/Media/Photos" cfg.home.automount; + } // lib.optionalAttrs cfg.office.enable { + "/media/chexx/chexx" = mkNetworkFileSystem "truenas-office:/mnt/Storage/chexx" cfg.office.automount; + "/media/chexx/tkdocs" = mkNetworkFileSystem "truenas-office:/mnt/Storage/Users/Tim-Keller" cfg.office.automount; + "/media/chexx/scans" = mkNetworkFileSystem "truenas-office:/mnt/Storage/Scans" cfg.office.automount; + }; + # TODO auto mkdirz + }; +} diff --git a/archetypes/tjkeller/printing.nix b/archetypes/tjkeller/printing.nix new file mode 100644 index 0000000..d5cceab --- /dev/null +++ b/archetypes/tjkeller/printing.nix @@ -0,0 +1,39 @@ +{ lib, config, pkgs, ... }: { + config = lib.mkIf config.services.printing.enable { + # Printer drivers + services.printing.drivers = [ + pkgs.epson-escpr2 + pkgs.workcentre-7800-series + ]; + + # Scanning programs + environment.systemPackages = with pkgs; [ + epsonscan2 + ]; + + # Printers + networking.hosts = { + "192.168.1.35" = [ "Epson_ET-8500" ]; + "192.168.77.40" = [ "Xerox_WorkCentre_7855" ]; + }; + + # Add printers to cups + hardware.printers.ensurePrinters = [ + { + name = "Epson_ET-8500"; + description = "Epson ET-8500"; + location = "Home"; + deviceUri = "ipp://Epson_ET-8500:631/ipp/print"; + model = "epson-inkjet-printer-escpr2/Epson-ET-8500_Series-epson-escpr2-en.ppd"; + } + #{ + # name = "Xerox_WorkCentre_7855"; + # description = "Xerox WorkCentre 7855"; + # location = "Office"; + # deviceUri = "ipp://Xerox_WorkCentre_7855:631/ipp/print"; + # model = "everywhere IPP Everywhere"; + #} + ]; + hardware.printers.ensureDefaultPrinter = "Epson_ET-8500"; + }; +} diff --git a/archetypes/tjkeller/resources/secrets/hashed-root-password.yaml b/archetypes/tjkeller/resources/secrets/hashed-root-password.yaml new file mode 100644 index 0000000..a42fd42 --- /dev/null +++ b/archetypes/tjkeller/resources/secrets/hashed-root-password.yaml @@ -0,0 +1,25 @@ +hashed-root-password: ENC[AES256_GCM,data:7Qgoeb/6JPNupkHCBEzCs0FMP2cDEw972bjCRWeMrBrAMZzLsZc3Mbv03s1zLztUp6Ie93R5lVsamxKPUnaPt+Tnr/l+0E9aTmt7j7L6UzmWr12nj3FHxxTSU9ief6+ioIk+S4eICJspIQ==,iv:VoWP4qBCGzuYRpQw4nilUXByJ+ZwyZR/BdKowi+53DM=,tag:x6A00VCm8BEOhtv/WySXrQ==,type:str] +sops: + age: + - recipient: age1w80rc0dnuu8nw99gw64c596qqetm78jdnsqajr0u7ephykekr39qfz8vnv + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2Z3dTbW1GUzgyRUwyZGtF + alZSeFBmdEdhNER3UEtGRGd4MnliK1l1eGpJCm80SHFNZ3NZOTNxVkM4R3ZLY005 + OFVtUGN3OXZJblRxOFNMOFhsV25CS0EKLS0tIEE5SG5NekxWbytXY2xNeUN6TWhG + RldJZms3RDFuRk40ck42Mkd5RTd4YVUKgyWE8Cs0yLO/82w2muGWTlcjY86BVSUy + bFeIcQT33dEPiNUmynTqEGpN2NVQbfVDw17QbA9GNhGClanTTXmX4A== + -----END AGE ENCRYPTED FILE----- + - recipient: age1f0tmpy2nam58skmznjyqd3zf54rxtfrk6fda0vlpq9y3yg6wac7sjf0vja + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxcUprWjBXTVlidTRwMEZ6 + WHE4dWp6OWtybkFCaTkyY2JyaWYrRHNhZWtNCi9xamwreEsyVFdnWWhJeUVsdUpT + UHlkRVJZZTEvMDluTWNJSnRSUXN6Q0kKLS0tIHNsQk92SUd2ekowY0hvQi9LNjIx + Q0oxVFNtRkpZTlVHeEY3YXFoSlc4Zk0K7RaqH/Qf2dTPBuCz9DH0xgU+Tq8ATKUq + tfAuuAU9HBtLFiZjhWsZmj5XUy5Z18IiUKDIxlw41mNtbcsUnjm30w== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-07-17T22:34:07Z" + mac: ENC[AES256_GCM,data:B95HuJC2o8B+P1f9kAtJTcSty7YSAByuqe/Xs6ce6780p05FuzWM5X9bwvwsYXngGNKqCHksWf50UXzJ3eyc6y4ISxdxljAv2FmJFKw4NkfGaOMiRLlGPMn1uFpOtkRT+qL0+mupWG/Ap3zcpbxjsDx46PUur+e6yRxlAHw8mGw=,iv:DYobhWK+4+7vOog7BrBASiHrEzzz0P6zqgWxexfcLG8=,tag:skGwUpDEB8e3TCjrxs5peA==,type:str] + unencrypted_suffix: _unencrypted + version: 3.10.2 diff --git a/archetypes/tjkeller/resources/secrets/wpa_supplicant-conf.yaml b/archetypes/tjkeller/resources/secrets/wpa_supplicant-conf.yaml new file mode 100644 index 0000000..2fd7a0e --- /dev/null +++ b/archetypes/tjkeller/resources/secrets/wpa_supplicant-conf.yaml @@ -0,0 +1,16 @@ +wpa_supplicant-conf: ENC[AES256_GCM,data:QoHQhTuEsSCW/K2ArOzNMfpSV7RtyTgezg4bM6eyNwhBhuJ/fCExzrniZtFzZ3zfs+ROFOYYxkx5lu4N/AQ6xEdCjJ3DYKHpeveqQ3GcWaldDr6aUDxLnBmLGBgSskGoOOANCwGvXGtFsChlCah02/W3YIhLWKIC1pfw1t9ANw9ErtLt7Fxt8TphJ1n9KdCXCJCMFrDjWDTrvbDzrvkJh6EGJIoaXuJSN+9asKrFvTwXyvHPbJmw8ZRbYgtlJtv5c1Q+PZoMtEeBRI/q2y/xUX5nvhnyy3HO1CaZPq+2XP9w+Zz90PyehVvbFVSl3V3Wg3rg9uu/c1rRGgfNkVJSHdhN+7nWYobSI28uoA8L9oXono9mNYwfcN2c4R6xwW9yOH72KabKRbD0Qq0mXcwNjU0HNneqvnMFURbDVstWmKt39gHg2xoZkG774EEDdXBAmKe5nbj0wVk8TBPWPcyR8gQ3uQrXPElqC7CWHMvajzi/hq02gmzkq1DAiheVWHxVmSQUUP3M52vvFBDdWip4X7IM3r5H4uBmcF6wGHl7JS+okDno5BuInIXvrApDV3rTqnam7YeQZao9pbx8WRWg/ZQFUysiXf9tcAl4ror71+SLKa5MfeP9AV431DbcsrIS1XQ=,iv:7qdltuNvesslz32SfEXqu9WFu2uGOGg1sjfskfqfXnk=,tag:N1RhL1M9YtDlvxLBRC2gAg==,type:str] +sops: + age: + - recipient: age1w80rc0dnuu8nw99gw64c596qqetm78jdnsqajr0u7ephykekr39qfz8vnv + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxdXBUWXEvRU85Tk1lNWgz + ZHpENjdudmRuaEJIeVRHOHlDbWNzK0tQMGs4CmV6MVBpdE5PMTBWMm1PcDVFQ2VM + b0IwWDFxLy8xYUcxRVZFSEsyYlBFS1UKLS0tIHpCbDQ0a29TZlVFTGp4aXJCSmJ4 + ZGxqMFQ1NDk1OHJIOUd0cVV0dzNNQlkKzYX36u0rEq6dMTCJf6OON6LzcEEnAB5A + +M9t3OKUUNtwgksjBUEwqBLJ1sU9amijpK63GUxwp74YDtsb0YXHiw== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-07-17T22:33:44Z" + mac: ENC[AES256_GCM,data:leJsAdcWFE0EA1syXfd7yDu1Ct+vTkKiHUEc46O31uUeaWVFwgH8EKC0ImqiHMgbDJv+a9UHm7GtsWy1aMQNVRBXL3R2HbNQkOqGkIIdGsrrbjslQl8UwI7wx1g2P3ORhlGRYXTscDUl53+e4i3YrYOEDDPL5EAWuQEWldJXLZc=,iv:banL6qqV2EqfZFKHn5dawUq95Ima06z8H6Kso1qRdcA=,tag:g6M95M6bT4UPTfiEZT4ljw==,type:str] + unencrypted_suffix: _unencrypted + version: 3.10.2 diff --git a/archetypes/tjkeller/user.nix b/archetypes/tjkeller/user.nix new file mode 100644 index 0000000..2695549 --- /dev/null +++ b/archetypes/tjkeller/user.nix @@ -0,0 +1,22 @@ +{ lib, config, pkgs, userDetails, ... }: let + cfg = config._archetypes.tjkeller.setPasswords; + hashedPasswordFile = config.sops.secrets.hashed-root-password.path; +in { + options._archetypes.tjkeller.setPasswords = { + enable = lib.mkEnableOption "set users password. requires hashed root password from sops"; + }; + + config = lib.mkIf cfg.enable { + # Load hashed root password secret + sops.secrets.hashed-root-password = { + sopsFile = ./resources/secrets/hashed-root-password.yaml; + neededForUsers = true; + }; + + # Apply password file + users.users = { + root = { inherit hashedPasswordFile; }; + ${userDetails.username} = lib.mkIf config._archetypes.users.primary.enable { inherit hashedPasswordFile; }; + }; + }; +} diff --git a/archetypes/tjkeller/wifi.nix b/archetypes/tjkeller/wifi.nix new file mode 100644 index 0000000..32b6ef8 --- /dev/null +++ b/archetypes/tjkeller/wifi.nix @@ -0,0 +1,38 @@ +{ lib, config, ... }: let + cfg = config._archetypes.tjkeller.wifi; +in { + options._archetypes.tjkeller.wifi = { + enable = lib.mkEnableOption "enables wifi"; + }; + + config = lib.mkIf cfg.enable { + networking.wireless = { + enable = true; # Enables wireless support via wpa_supplicant. + userControlled.enable = true; + allowAuxiliaryImperativeNetworks = true; # Networks defined in aux imperitive networks (/etc/wpa_supplicant.conf) + }; + + # Load wpa_supplicant.conf secret config + sops.secrets.wpa_supplicant-conf = { + sopsFile = ./resources/secrets/wpa_supplicant-conf.yaml; + }; + + # Link /etc/wpa_supplicant.conf -> secret config + environment.etc."wpa_supplicant.conf" = { + source = config.sops.secrets.wpa_supplicant-conf.path; + }; + + # This service is a workaround to ensure that secrets are available on + # reboot when the secret keys are on a separate subvolume + systemd.services.npcnix-force-rebuild-sops-hack = { + wantedBy = [ "multi-user.target" ]; + before = [ "wpa_supplicant.service" ]; + serviceConfig = { + ExecStart = "/run/current-system/activate"; + Type = "oneshot"; + Restart = "on-failure"; # because oneshot + RestartSec = "10s"; + }; + }; + }; +} diff --git a/archetypes/users/primary.nix b/archetypes/users/primary.nix new file mode 100644 index 0000000..a29c3b8 --- /dev/null +++ b/archetypes/users/primary.nix @@ -0,0 +1,37 @@ +{ lib, config, pkgs, userDetails, ... }: let + cfg = config._archetypes.users.primary; +in { + options._archetypes.users.primary = { + enable = lib.mkEnableOption "create primary user"; + autologin.enable = lib.mkEnableOption "enables getty automatic login"; + }; + + config = lib.mkIf cfg.enable { + # Enable zsh + programs.zsh.enable = true; + + # Setup normal user + users.users.${userDetails.username} = { + home = userDetails.home; + description = userDetails.fullname; + isNormalUser = true; + shell = pkgs.zsh; + extraGroups = [ + "nixbld" + "video" + "wheel" + ] ++ lib.optionals config.hardware.i2c.enable [ + "i2c" + ] ++ lib.optionals config.virtualisation.libvirtd.enable [ + "libvirtd" + ] ++ lib.optionals config.virtualisation.docker.enable [ + "docker" + ]; + }; + + # Configure automatic login with getty + services.getty = lib.mkIf cfg.autologin.enable { + autologinUser = userDetails.username; + }; + }; +} diff --git a/flake.nix b/flake.nix index d2112ca..007bd8e 100644 --- a/flake.nix +++ b/flake.nix @@ -21,7 +21,7 @@ rec { outputs = { nixpkgs, home-manager, arkenfox, ... }@inputs : let system = "x86_64-linux"; - pkgs = nixpkgs.legacyPackages.${system}; + #pkgs = nixpkgs.legacyPackages.${system}; userDetails = { username = "timmy"; email = "tjk@tjkeller.xyz"; @@ -44,22 +44,23 @@ rec { inherit userDetails; }; modules = [ - ./modules/hosts/${hostname}/configuration.nix - ./modules/nixos - ./modules/overlays + ./hosts/${hostname}/configuration.nix + ./nixos + ./archetypes + ./pkgs home-manager.nixosModules.home-manager { home-manager = { - backupFileExtension = "backup"; + backupFileExtension = "backup"; # In case file is overwritten useGlobalPkgs = true; useUserPackages = true; - users.${userDetails.username} = import ./modules/home; + users.${userDetails.username} = import ./home-manager; extraSpecialArgs = { inherit userDetails; inherit homeStateVersion; }; sharedModules = [ - inputs.arkenfox.hmModules.arkenfox - ./modules/hosts/${hostname}/home.nix + arkenfox.hmModules.arkenfox + ./hosts/${hostname}/home.nix ]; }; } diff --git a/home-manager/default.nix b/home-manager/default.nix new file mode 100644 index 0000000..bcd99eb --- /dev/null +++ b/home-manager/default.nix @@ -0,0 +1,25 @@ +{ lib, userDetails, homeStateVersion, ... }: { + home = { + username = userDetails.username; + homeDirectory = lib.mkForce userDetails.home; + stateVersion = homeStateVersion; + }; + + imports = [ + ./firefox.nix + ./git.nix + ./gtk-bookmarks.nix + ./htop.nix + ./initial-home-setup.nix + ./pcmanfm.nix # TODO mk name changeable & doesn't seem to work right now + ./theme-st.nix + ./theme.nix + ./userdirs.nix + ./wallpapers.nix + ]; + + theme.enable = lib.mkDefault true; + theme.st.enable = lib.mkDefault false; + theme.mint.enable = lib.mkDefault true; + wallpapers.enable = lib.mkDefault false; +} diff --git a/home-manager/firefox.nix b/home-manager/firefox.nix new file mode 100644 index 0000000..8aa1af3 --- /dev/null +++ b/home-manager/firefox.nix @@ -0,0 +1,83 @@ +{ lib, pkgs, userDetails, ... }: { + programs.firefox = { + enable = lib.mkDefault true; + arkenfox.enable = true; + profiles = let + search = { + engines = { + "Timmy Search" = { + urls = [{ + template = "https://search.tjkeller.xyz/search"; + params = [ { name = "q"; value = "{searchTerms}"; } ]; + }]; + iconURI = "https://search.tjkeller.xyz/static/themes/simple/img/favicon.svg"; # TODO doesn't seem to work + }; + "Nix Packages" = { + urls = [{ + template = "https://search.nixos.org/packages"; + params = [ { name = "query"; value = "{searchTerms}"; } ]; + }]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@np" ]; + }; + "NixOS Options" = { + urls = [{ + template = "https://search.nixos.org/options"; + params = [ { name = "query"; value = "{searchTerms}"; } ]; + }]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@no" ]; + }; + }; + default = "Timmy Search"; + privateDefault = "Timmy Search"; + force = true; # Overwrite old + }; + userChrome = builtins.readFile ./resources/firefox/userChrome.css; + arkenfox = { + enable = true; + enableAllSections = true; + "0100"."0102"."browser.startup.page".value = 3; # 0=blank, 1=home, 2=last visited page, 3=resume previous session + "0100"."0103"."browser.startup.homepage".enable = false; + "0100"."0104"."browser.newtabpage.enabled".enable = false; + #"2800"."2811"."privacy.clearOnShutdown.history".enable = false; + }; + settings = { + "browser.compactmode.show" = true; + "browser.uiCustomization.state" = builtins.readFile ./resources/firefox/uiCustomization.json; # Toolbar etc. + "browser.uidensity" = 1; # Compact + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; # userchrome + + "app.normandy.first_run" = false; + "browser.aboutConfig.showWarning" = false; # arkenfox does + #"browser.download.dir" = userDetails.userDirs.downloads; + "browser.newtabpage.activity-stream.feeds.section.topstories" = false; + "browser.newtabpage.activity-stream.feeds.topsites" = false; + "browser.urlbar.suggest.topsites" = false; + "devtools.toolbox.host" = "window"; + "dom.push.enabled" = false; # + "extensions.pocket.enabled" = false; + "general.smoothScroll" = false; + }; + workSettings = settings // { + "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org"; # Use builtin dark theme instead of system theme + }; + in { + Personal = { + id = 0; + isDefault = true; + inherit search; + inherit userChrome; + inherit arkenfox; + inherit settings; + }; + Work = { + id = 1; + inherit search; + inherit userChrome; + inherit arkenfox; + settings = workSettings; + }; + }; + }; +} diff --git a/home-manager/git.nix b/home-manager/git.nix new file mode 100644 index 0000000..9d15a90 --- /dev/null +++ b/home-manager/git.nix @@ -0,0 +1,7 @@ +{ userDetails, ... }: { + programs.git = { + enable = true; + userName = userDetails.fullname; + userEmail = userDetails.email; + }; +} diff --git a/home-manager/gtk-bookmarks.nix b/home-manager/gtk-bookmarks.nix new file mode 100644 index 0000000..24c6563 --- /dev/null +++ b/home-manager/gtk-bookmarks.nix @@ -0,0 +1,17 @@ +{ config, lib, userDetails, ... }: { + options = { + additional-gtk-bookmarks = lib.mkOption { + type = with lib.types; listOf str; + default = []; + description = "gtk bookmarks for file managers, etc."; + }; + }; + + config = { + gtk.gtk3.bookmarks = ( + lib.mapAttrsToList (name: path: + "file://${path} ${lib.toUpper (lib.substring 0 1 name)}${lib.substring 1 (-1) name}" + ) userDetails.userDirs + ) ++ config.additional-gtk-bookmarks; + }; +} diff --git a/home-manager/htop.nix b/home-manager/htop.nix new file mode 100644 index 0000000..523fee8 --- /dev/null +++ b/home-manager/htop.nix @@ -0,0 +1,38 @@ +{ config, ... }: { + programs.htop.enable = true; + programs.htop.settings = { + fields = with config.lib.htop.fields; [ + PID + USER + 124 # EXE + PERCENT_CPU + PERCENT_MEM + STARTTIME + ELAPSED # time elapsed since process start + IO_READ_RATE + RBYTES # num read bytes + IO_WRITE_RATE + WBYTES # num written bytes + TIME + STIME # sys time + CSTIME # child sys time + NICE + STATE + PRIORITY + 125 # CWD + ]; + } // (with config.lib.htop; leftMeters [ + (bar "AllCPUs2") + (bar "CPU") + (bar "Memory") + (bar "DiskIO") + (bar "NetworkIO") + ]) // (with config.lib.htop; rightMeters [ + (text "Hostname") + (text "Clock") + (text "Uptime") + (text "Battery") + (text "LoadAverage") + (text "Tasks") + ]); +} diff --git a/home-manager/initial-home-setup.nix b/home-manager/initial-home-setup.nix new file mode 100644 index 0000000..4132386 --- /dev/null +++ b/home-manager/initial-home-setup.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, userDetails, ... }: { + home.activation = { + cloneRepos = lib.hm.dag.entryAfter ["writeBoundary"] '' + export PATH="${config.home.path}/bin:$PATH" + ${builtins.readFile ./resources/activation-scripts/clone-repos.sh} + ''; + linkZshProfile = lib.hm.dag.entryAfter ["writeBoundary"] '' + run ln -sf $VERBOSE_ARG $HOME/.config/zsh/zprofile $HOME/.zprofile + ''; + cleanupHome = lib.hm.dag.entryAfter ["writeBoundary"] '' + run rm -f $VERBOSE_ARG $HOME/{.zcompdump,.zshrc,.zsh_history,.bash_history} + ''; + mimewiz = lib.hm.dag.entryAfter ["writeBoundary"] '' + export PATH="${pkgs.xdg-utils}/bin:$PATH" + export PATH="$HOME/.local/bin/misc:$PATH" + run mimewiz -i # already verbose + ''; + createDirs = lib.hm.dag.entryAfter ["writeBoundary"] '' + run mkdir -p $VERBOSE_ARG ${ lib.concatStringsSep " " (lib.attrValues userDetails.userDirs) } + ''; + }; +} diff --git a/home-manager/pcmanfm.nix b/home-manager/pcmanfm.nix new file mode 100644 index 0000000..3c70521 --- /dev/null +++ b/home-manager/pcmanfm.nix @@ -0,0 +1,6 @@ +{ + home.file.pcmanfm-root = { + target = ".local/share/file-manager/actions/root.desktop"; + source = ./resources/pcmanfm/root.desktop; + }; +} diff --git a/home-manager/resources/activation-scripts/clone-repos.sh b/home-manager/resources/activation-scripts/clone-repos.sh new file mode 100644 index 0000000..eaee4dc --- /dev/null +++ b/home-manager/resources/activation-scripts/clone-repos.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +server="https://git.tjkeller.xyz/" + +clonemissing() { + # pull and return if already existing + if [ -d "$2"/.git ]; then + run cd $VERBOSE_ARG "$2" + run git pull $VERBOSE_ARG || echo "$2: failed to pull from remote" + return + fi + + # clone to $2 + run mkdir -p $VERBOSE_ARG "$2" + run git clone $VERBOSE_ARG "$server$1" "$2" + + # link to $3 + [ -z "$3" ] && return + run mkdir -p $VERBOSE_ARG "$3" + run ln -sf $VERBOSE_ARG "$2"/* "$3" +} + +# # repo # clone to # link to +clonemissing scripts $HOME/docs/src/scripts $HOME/.local/bin +clonemissing dotconfig $HOME/docs/src/config $HOME/.config +clonemissing userscripts $HOME/docs/src/userscripts '' +clonemissing nixos $HOME/docs/src/nixos '' +clonemissing awesome $HOME/.config/awesome '' +clonemissing nvim $HOME/.config/nvim '' +clonemissing zsh $HOME/.config/zsh '' diff --git a/home-manager/resources/firefox/uiCustomization.json b/home-manager/resources/firefox/uiCustomization.json new file mode 100644 index 0000000..339b716 --- /dev/null +++ b/home-manager/resources/firefox/uiCustomization.json @@ -0,0 +1 @@ +{"placements":{"widget-overflow-fixed-list":[],"unified-extensions-area":["ublock0_raymondhill_net-browser-action","sponsorblocker_ajay_app-browser-action","_e6e36c9a-8323-446c-b720-a176017e38ff_-browser-action","dearrow_ajay_app-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","idcac-pub_guus_ninja-browser-action","addon_darkreader_org-browser-action","_74145f27-f039-47ce-a470-a662b129930a_-browser-action","_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action","jid1-bofifl9vbdl2zq_jetpack-browser-action","addon_fastforward_team-browser-action","jid1-tsgsxbhncspbwq_jetpack-browser-action","_aecec67f-0d10-4fa7-b7c7-609a2db280cf_-browser-action"],"nav-bar":["back-button","forward-button","stop-reload-button","home-button","urlbar-container","downloads-button","unified-extensions-button"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["personal-bookmarks"]},"seen":["save-to-pocket-button","developer-button","dearrow_ajay_app-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","_e6e36c9a-8323-446c-b720-a176017e38ff_-browser-action","sponsorblocker_ajay_app-browser-action","ublock0_raymondhill_net-browser-action","idcac-pub_guus_ninja-browser-action","addon_darkreader_org-browser-action","_74145f27-f039-47ce-a470-a662b129930a_-browser-action","_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action","jid1-bofifl9vbdl2zq_jetpack-browser-action","addon_fastforward_team-browser-action","jid1-tsgsxbhncspbwq_jetpack-browser-action","_aecec67f-0d10-4fa7-b7c7-609a2db280cf_-browser-action"],"dirtyAreaCache":["nav-bar","PersonalToolbar","unified-extensions-area","toolbar-menubar","TabsToolbar"],"currentVersion":20,"newElementCount":5} diff --git a/home-manager/resources/firefox/userChrome.css b/home-manager/resources/firefox/userChrome.css new file mode 100644 index 0000000..624ab26 --- /dev/null +++ b/home-manager/resources/firefox/userChrome.css @@ -0,0 +1,204 @@ +/* TOP BAR */ +#navigator-toolbox { + --uc-navigationbar-width: 40vw; +} + +/* Remove overflow button */ +#nav-bar-overflow-button { display: none; } + +/* remove alltabs button */ +#alltabs-button { display: none; } + +/* Change background color of toolbar */ +#navigator-toolbox-background { + background: var(--toolbar-field-border-color) !important; +} + +/* Change background color of bookmarks toolbar */ +#PersonalToolbar { + background: var(--toolbox-bgcolor) !important; +} + +/* Adjust spacing of toolbar items */ +#PlacesToolbarItems { + gap: .35rem; + margin-block: .2rem; +} + +/* Fix vertical spacing of tabs */ +#TabsToolbar { + margin-top: -1px; +} + +/* Move new tab to far right */ +#tabbrowser-arrowscrollbox-periphery { + margin-left: auto; +} + +/* Fix spacing around tabs by removing nav bar top border */ +#nav-bar { + border: none !important; +} + +/* Media queries for width of nav bar */ +@media screen and (max-width: 1000px) { + #navigator-toolbox { + --uc-navigationbar-width: 50vw; + } +} +@media screen and (max-width: 800px) { + #navigator-toolbox { + --uc-navigationbar-width: 60vw; + } +} + +/* Change look of tabs in smaller view */ +@media screen and (max-width: 800px) { + .tab-background { + margin-block: .2em !important; + } + #TabsToolbar { + margin-left: 5px; + } +} + + +/* COMBINE TOP BAR */ +/* Combine top bar into single line if width >= 800px */ +@media screen and (min-width: 800px) { + :root { + --uc-toolbar-height: 36px; /* Half height bar */ + } + + /* Modify these to change relative widths or default height */ + #navigator-toolbox { + margin-bottom: 0px; + padding-top: 1px; /* Top bar is cut off otherwise */ + } + + #TabsToolbar { + margin-left: calc(var(--uc-navigationbar-width) + 2px); /* Resize tab bar */ + margin-top: -4px; + margin-bottom: 2px; + } + + /* Tabs extend to bottom of bar */ + .tab-background { + margin-bottom: 0 !important; + margin-top: 3px !important; /* See above navigator-toolbox rule. Avoid cutting off top */ + } + + /* Center tab buttons */ + #tabs-newtab-button, + #alltabs-button + { + margin-top: 4px !important; + } + + /* Integrate url / nav bar */ + #nav-bar { + margin-right:calc(100vw - var(--uc-navigationbar-width)); + margin-top: calc(0px - var(--uc-toolbar-height)); + border-radius: 0 var(--tab-border-radius) var(--tab-border-radius) 0; + border-right: 1px solid ThreeDShadow !important; + box-shadow: 0 0 4px rgba(0,0,0,.4) !important; + } + + /* 1px margin on touch density causes tabs to be too high */ + .tab-close-button { + margin-top: 0 !important + } + + /* Make opened urlbar overlay the toolbar */ + #urlbar[open]:focus-within { + min-width: 50vw !important; + } + + /* Remove min and max width of urlbar */ + #urlbar-container { + width: 0 !important; + } + + /* Fix customization view */ + #customization-panelWrapper .panel-arrowbox .panel-arrow { + margin-inline-end: initial !important; + } + + /* Shorten findbar */ + findbar { + width: 600px !important; + border-radius: 0 0 0 5px; + border-bottom: none !important; + box-shadow: 0 2px 4px rgba(0,0,0,.4); /* Move down 2px so it doesn't go over the tab bar */ + } +} + + +/* FINDBAR */ +findbar { + width: 100vw; + position: absolute; + top: 0; + right: 0; + padding: 0 !important; + padding-top: 1px !important; + background: -moz-headerbar Field !important; + border-top-width: 0px !important; + border-bottom: 1px solid ThreeDShadow; +} + +findbar .findbar-container { + padding-bottom: 5px !important; /* Move search bar closer to left edge */ + padding-top: 2px !important; /* Move search bar closer to left edge */ + height: max-content !important; + gap: 2px; + justify-content: space-between; + flex-wrap: wrap; +} + +/* Force textbox to fill up first line */ +findbar .findbar-textbox { + width: 100% !important; + background: Field !important; /* Set the background color to be consistent with found-matches label when unfocused */ +} + +/* Hide description showing wrap conditions etc. */ +findbar description { + display: none; +} + +/* Move found matches label (roughly) into the textbox */ +findbar label.found-matches, +findbar description { + position: absolute; + top: 6.5px; + right: 110px; + color: color-mix(in srgb, -moz-headerbartext, transparent 46%) !important; + /* So this text overrides the text below, TODO find a more elegant solution */ + padding-inline: 1ex; + background: Field; +} + +/* Show description when it says "Phrase Not Found" */ +findbar description[status=notfound] { + display: inline-block; +} + +/* Force checkboxes onto second line */ +findbar .findbar-container hbox { + width: 100%; +} + + +/* BOOKMARK BAR */ +@-moz-document url(chrome://browser/content/browser.xhtml) { + #PersonalToolbar { + background: -moz-headerbar Field !important; + border-top: 1px solid ThreeDShadow !important; + z-index: 1000; /* To not be affected by shadow from navbar */ + } + /* Space out bookmark items */ + .bookmark-item .toolbarbutton-text { + padding: 2.5px 4px; + } +} diff --git a/home-manager/resources/pcmanfm/root.desktop b/home-manager/resources/pcmanfm/root.desktop new file mode 100644 index 0000000..4b4d263 --- /dev/null +++ b/home-manager/resources/pcmanfm/root.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Type=Action +Tooltip=Open Directory As Root +Name=Open Directory As Root +Profiles=profile-zero; +Icon=gtk-dialog-authentication + +[X-Action-Profile profile-zero] +MimeTypes=inode/directory; +Exec=/home/timmy/.local/bin/x11/xsudo /usr/bin/pcmanfm %u +Name=Default profile diff --git a/home-manager/theme-st.nix b/home-manager/theme-st.nix new file mode 100644 index 0000000..0a06cd0 --- /dev/null +++ b/home-manager/theme-st.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, ... }: { + options = { + theme.st = { + enable = lib.mkEnableOption "enables theming st with home manager"; + font = lib.mkOption { + type = lib.types.str; + default = "JetBrainsMonoNL Nerd Font Mono:size=12:antialias=true:autohint=true"; + }; + }; + }; + config = let + themed-st = pkgs.st.overrideAttrs (old: { + buildInputs = old.buildInputs or [] ++ [ pkgs.makeWrapper ]; + postInstall = old.postInstall or "" + '' + wrapProgram $out/bin/st \ + --add-flags '-f"${config.theme.st.font}"' + ''; + }); + in lib.mkIf config.theme.enable { + home.packages = [ themed-st ]; + }; +} diff --git a/home-manager/theme.nix b/home-manager/theme.nix new file mode 100644 index 0000000..9e4edae --- /dev/null +++ b/home-manager/theme.nix @@ -0,0 +1,101 @@ +{ config, lib, pkgs, ... }: +let + transformColorValue = color : + if color == "Green" then "Mint-Y" + else if color == "Dark-Green" then "Mint-Y-Dark" + else "Mint-Y-${color}" + ; +in { + options = { + theme.enable = lib.mkEnableOption "enables theming"; + theme.mint = { + enable = lib.mkEnableOption "enables mint theme"; + # TODO add theme.dark option instead of specifying Dark-Color + theme.color = lib.mkOption { + type = lib.types.enum [ + "Aqua" "Blue" "Green" "Grey" "Orange" "Pink" "Purple" "Red" + "Sand" "Teal" "Dark-Aqua" "Dark-Blue" "Dark-Green" + "Dark-Grey" "Dark-Orange" "Dark-Pink" "Dark-Purple" + "Dark-Red" "Dark-Sand" "Dark-Teal" + ]; + default = "Dark-Aqua"; + description = "mint-y theme color eg. 'Dark-Aqua' or 'Red'"; + }; + icons.color = lib.mkOption { + type = lib.types.enum [ + "Aqua" "Blue" "Green" "Grey" "Orange" "Pink" "Purple" "Red" + "Sand" "Teal" + ]; + default = "Aqua"; + description = "mint-y icons color eg. 'Aqua' or 'Red'"; + }; + }; + theme.font = { + sansSerif = lib.mkOption { + type = lib.types.str; + default = "Inter"; + description = "default sans serif font"; + }; + monospace = lib.mkOption { + type = lib.types.str; + default = "CommitMono"; + description = "default monospace font"; + }; + gtk = { + name = lib.mkOption { + type = lib.types.str; + default = "sans-serif"; + description = "default gtk font"; + }; + size = lib.mkOption { + type = with lib.types; nullOr int; + default = null; + description = "default gtk font size"; + }; + }; + }; + theme.cursor = { + name = lib.mkOption { + type = lib.types.str; + default = "Adwaita"; + description = "gtk cursor theme"; + }; + size = lib.mkOption { + type = with lib.types; nullOr int; + default = null; + description = "gtk cursor size"; + }; + }; + }; + + config = lib.mkIf config.theme.enable { + gtk = { + enable = true; + theme = lib.mkIf config.theme.mint.enable { + package = pkgs.mint-themes; + name = transformColorValue config.theme.mint.theme.color; + }; + iconTheme = lib.mkIf config.theme.mint.enable { + package = pkgs.mint-y-icons; + name = transformColorValue config.theme.mint.icons.color; + }; + font = { + name = config.theme.font.gtk.name; + size = config.theme.font.gtk.size; + }; + cursorTheme = { + name = config.theme.cursor.name; + size = config.theme.cursor.size; + }; + gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; + }; + qt = { + enable = true; + platformTheme.name = "gtk3"; + }; + fonts.fontconfig.defaultFonts = { + sansSerif = [ config.theme.font.sansSerif ]; + monospace = [ config.theme.font.monospace ]; + }; + }; +} diff --git a/home-manager/userdirs.nix b/home-manager/userdirs.nix new file mode 100644 index 0000000..58c1d59 --- /dev/null +++ b/home-manager/userdirs.nix @@ -0,0 +1,5 @@ +{ userDetails, ... }: { + xdg.userDirs = { + enable = true; + } // userDetails.userDirs; +} diff --git a/home-manager/wallpapers.nix b/home-manager/wallpapers.nix new file mode 100644 index 0000000..d7e067a --- /dev/null +++ b/home-manager/wallpapers.nix @@ -0,0 +1,14 @@ +{ lib, config, pkgs, ... }: { + options = { + wallpapers.enable = lib.mkEnableOption "enables all wallpapers"; + }; + + config = lib.mkIf config.wallpapers.enable { + home.file.".local/share/wallpaper" = { + source = pkgs.fetchzip { + url = "https://tjkeller.xyz/permalinks/wallpapers.tar"; + hash = "sha256-lhj9wUMZfd0XOrUtWY9HB64oXrS/EjsvsaJHzu4ucFg="; + }; + }; + }; +} diff --git a/hosts/T495/configuration.nix b/hosts/T495/configuration.nix new file mode 100644 index 0000000..171f746 --- /dev/null +++ b/hosts/T495/configuration.nix @@ -0,0 +1,64 @@ +{ config, lib, pkgs, ... }: { + imports = [ + ./hardware-configuration.nix + ./wg.nix + ../../nixos/archetypes/tjkeller + ]; + + # Setup bootloader + boot._loader.enable = true; + + # Enable common options + _archetypes = { + # Use desktop profile + profiles.desktop.enable = true; + # Install software + collections = { + desktop = { + extraUtilities.enable = true; + cad.enable = true; + chromium.enable = true; + crypto.enable = true; + graphics.enable = true; + office.enable = true; + }; + development = { + android.enable = true; + c.enable = true; + docker.enable = true; + lua.enable = true; + web = { + hugo = { + enable = true; + openFirewall = true; + }; + node.enable = true; + }; + }; + bluetooth.enable = true; + }; + # Setup user + users.primary = { + enable = true; + autologin.enable = true; + }; + # Enable network drives + tjkeller = { + nas = { + enable = true; + office.enable = true; + }; + }; + }; + + # Install spotify + nixpkgs.config.allowUnfree = true; + environment.systemPackages = with pkgs; [ + spotify + ]; + + # Use amdgpu driver for x11 + services.xserver.videoDrivers = [ "amdgpu" ]; + + system.stateVersion = "24.05"; +} diff --git a/hosts/T495/hardware-configuration.nix b/hosts/T495/hardware-configuration.nix new file mode 100644 index 0000000..6258a83 --- /dev/null +++ b/hosts/T495/hardware-configuration.nix @@ -0,0 +1,49 @@ +# 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" "ehci_pci" "xhci_pci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/4256823f-107b-41a9-851d-6bd9939f1f4b"; + fsType = "btrfs"; + options = [ "subvol=@" ]; + }; + + boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-uuid/f20115a9-0a0e-43d2-9cee-c705b2de43b9"; + + fileSystems."/home" = + { device = "/dev/disk/by-uuid/4256823f-107b-41a9-851d-6bd9939f1f4b"; + fsType = "btrfs"; + options = [ "subvol=@home" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/9441-53B1"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = [ ]; + + # 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..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp3s0f0.useDHCP = lib.mkDefault true; + # networking.interfaces.enp4s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/T495/home.nix b/hosts/T495/home.nix new file mode 100644 index 0000000..f233c08 --- /dev/null +++ b/hosts/T495/home.nix @@ -0,0 +1,19 @@ +{ ... }: { + imports = [ ../../home ]; + + theme = { + mint.theme.color = "Dark-Purple"; + mint.icons.color = "Purple"; + st = { + enable = true; + font = "TamzenForPowerline:pixelsize=20"; + }; + }; + wallpapers.enable = true; + + home.file.input-leap-config = { + source = ./resources/input-leap; + recursive = true; + target = "./.config/input-leap"; + }; +} diff --git a/hosts/T495/resources/input-leap/input-leap.conf b/hosts/T495/resources/input-leap/input-leap.conf new file mode 100644 index 0000000..c2d5176 --- /dev/null +++ b/hosts/T495/resources/input-leap/input-leap.conf @@ -0,0 +1,12 @@ +section: screens + T495: + optiplex: +end + +section: links + T495: + up = optiplex + + optiplex: + down = T495 +end diff --git a/hosts/T495/resources/secrets/wg0.yaml b/hosts/T495/resources/secrets/wg0.yaml new file mode 100644 index 0000000..6df5ff6 --- /dev/null +++ b/hosts/T495/resources/secrets/wg0.yaml @@ -0,0 +1,21 @@ +wg0: ENC[AES256_GCM,data:Zxw98YrH2QYyU8u4sk0geOUQXfOZK9scGPECbKruehcDffJlRspmsS2k3sSahdAIcJjIjauGmZ7usXus2wKAiRnYsl2e4P/0IUVp8L8UJp52iPZVEvT9JRELPYQ9gBBNmp/HDYglxP7uHx2bzcCTvCr4fFdQZgsUSl/pd6pBtSMwupsK5U9Xfz9Sh7JNTlpgpU4jlkl676XnrCo0HyL7rXMp4S6Ruhfve8gwJYP8QLn4DiwnP69Flc54MDQRKSvlvYca8dZIrS1N3h9k6aO1eB/z4I3qPN0/p7yT9pdfemaDpEqf1+byRKGYuED1Ge8P3D0+qRWJBd5GmoSHC8NV9KVV3DrAJ/QLOLCqm8oN0UGxQW5lbWi6lIQ708kodEDOsBREexRPOzjYAjajBr6O6wCtRThgce4yOg9ZwqxVDERqIz1fR034b56LrZtKjOSlJtmkmMCuCGrVkKj4L7JvBfKtCjBN+TOyONsClY/Vhd+XzNWWk8d8FVraOE2rJN4+ss7UL+jBth3DfSbr739cEQDhHRKoMPvXy0FhPVw=,iv:CN82pOBNCtICzM0Ac9Gh+x8pUSK1Fc2v2KmM+de3A78=,tag:KuGiC+Ak550d6njSdX4muA==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1w80rc0dnuu8nw99gw64c596qqetm78jdnsqajr0u7ephykekr39qfz8vnv + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4NEN4NGxDR1oreGVoSGhE + TzMxSEY0QVBhS2Z6MW15ci9aVlJ0a3IyVlZBCldPRVNvcUhJSHhWSEk3akd4RjN0 + ajhUV2d1ZWRsRFU4cTE2dGl6RmM4MGsKLS0tIFhnUjl5aDJqWVB1NE15SlNzR2Iv + YTNydURsOUMrSXZGdk9UOUdUQlA0SFUKxEDJRR6tpYva9qpWo9NxwCxk/xpRVoTl + YJkmDZzMcXikXXiro96AprP9dXJXvMPKYPGl2Zsal8PlGFPBoHW2GA== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-01-05T18:21:12Z" + mac: ENC[AES256_GCM,data:VEtpQLHMoQK7Qg4PT2DkNNMurjRE0ZadyiQ0uYsPJ0K2lS0gD8pPwb8btiq7KXXOGWWZOMYRDaRKOENy44f/k+16GOpO6jaKAfN6eEcidaWlP7zvpeNzt7LImFqn/Sjv4rq1+DmvGxyyNjuK8BwvvAfnZwG6KXbn7Bh6xgfTnLs=,iv:Jf4f5j6BTkDBmah3izIESsAn7wDMUFU6NbsqpFIdui4=,tag:yNg374unwHaDEK43+Y0eWg==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.2 diff --git a/hosts/T495/wg.nix b/hosts/T495/wg.nix new file mode 100644 index 0000000..3881b63 --- /dev/null +++ b/hosts/T495/wg.nix @@ -0,0 +1,7 @@ +{ config, pkgs, inputs, ... }: { + sops.secrets.wg0.sopsFile = ./resources/secrets/wg0.yaml; + + networking.wg-quick.interfaces = { + wg0.configFile = config.sops.secrets.wg0.path; + }; +} diff --git a/hosts/X230/configuration.nix b/hosts/X230/configuration.nix new file mode 100644 index 0000000..accbb1c --- /dev/null +++ b/hosts/X230/configuration.nix @@ -0,0 +1,30 @@ +{ config, lib, pkgs, ... }: { + imports = [ + ./hardware-configuration.nix + ../../nixos/archetypes/tjkeller + ]; + + # Setup bootloader + boot._loader.enable = true; + + # Enable common options + _archetypes = { + # Use desktop profile + profiles.desktop.enable = true; + # Install software + collections = { + desktop = { + crypto.enable = true; + graphics.enable = true; + office.enable = true; + }; + }; + # Setup user + users.primary = { + enable = true; + autologin.enable = true; + }; + }; + + system.stateVersion = "24.05"; +} diff --git a/hosts/X230/hardware-configuration.nix b/hosts/X230/hardware-configuration.nix new file mode 100644 index 0000000..0791585 --- /dev/null +++ b/hosts/X230/hardware-configuration.nix @@ -0,0 +1,48 @@ +# 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 = [ "xhci_pci" "ehci_pci" "ahci" "usb_storage" "sd_mod" "sdhci_pci" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/41036740-73bc-4004-a302-01233b4d83b8"; + fsType = "btrfs"; + options = [ "subvol=@" ]; + }; + + boot.initrd.luks.devices."enc".device = "/dev/disk/by-uuid/6019772f-4a1c-4abd-9c70-b1d71cc2de65"; + + fileSystems."/home" = + { device = "/dev/disk/by-uuid/41036740-73bc-4004-a302-01233b4d83b8"; + fsType = "btrfs"; + options = [ "subvol=@home" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/72D4-F66A"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = [ ]; + + # 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..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp0s25.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/X230/home.nix b/hosts/X230/home.nix new file mode 100644 index 0000000..03b559d --- /dev/null +++ b/hosts/X230/home.nix @@ -0,0 +1,18 @@ +{ ... }: { + imports = [ ../../home ]; + + theme = { + mint.theme.color = "Dark-Teal"; + mint.icons.color = "Teal"; + font = { + monospace = "TamzenForPowerline"; + gtk.name = "monospace"; + gtk.size = 8; + }; + cursor.size = 24; + st = { + enable = true; + font = "TamzenForPowerline:pixelsize=14"; + }; + }; +} diff --git a/hosts/flex-wg-router/configuration.nix b/hosts/flex-wg-router/configuration.nix new file mode 100644 index 0000000..f21046d --- /dev/null +++ b/hosts/flex-wg-router/configuration.nix @@ -0,0 +1,17 @@ +{ config, lib, pkgs, ... }: { + imports = [ + ./hardware-configuration.nix + ../../archetypes/headless + ]; + bootloader.mode = "efi"; + + # Enable docker + software.development = { + docker.enable = true; + }; + + # Enable set root password + users.setPassword.enable = true; + + system.stateVersion = "25.05"; +} diff --git a/hosts/flex-wg-router/hardware-configuration.nix b/hosts/flex-wg-router/hardware-configuration.nix new file mode 100644 index 0000000..01cff6d --- /dev/null +++ b/hosts/flex-wg-router/hardware-configuration.nix @@ -0,0 +1,45 @@ +# 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 = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/01eae5fd-a46e-4a36-8a9d-247a0b16bcef"; + fsType = "btrfs"; + options = [ "subvol=@" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/345A-436A"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + fileSystems."/home" = + { device = "/dev/disk/by-uuid/01eae5fd-a46e-4a36-8a9d-247a0b16bcef"; + fsType = "btrfs"; + options = [ "subvol=@home" ]; + }; + + swapDevices = [ ]; + + # 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..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp3s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/flex-wg-router/home.nix b/hosts/flex-wg-router/home.nix new file mode 100644 index 0000000..21d548f --- /dev/null +++ b/hosts/flex-wg-router/home.nix @@ -0,0 +1,7 @@ +{ ... }: { + imports = [ ../../home ]; + + theme.enable = false; + programs.firefox.enable = false; + gtk.enable = false; +} diff --git a/hosts/hp-envy-office/configuration.nix b/hosts/hp-envy-office/configuration.nix new file mode 100644 index 0000000..60be56d --- /dev/null +++ b/hosts/hp-envy-office/configuration.nix @@ -0,0 +1,52 @@ +{ config, lib, pkgs, ... }: { + imports = [ + ./hardware-configuration.nix + ../../nixos/archetypes/tjkeller + ]; + + # Setup bootloader + boot._loader.enable = true; + boot.loader.timeout = 15; # Show for longer since it's usually skipped + + # Enable common options + _archetypes = { + # Use desktop profile + profiles.desktop.enable = true; + # Install software + collections = { + desktop = { + extraUtilities.enable = true; + chromium.enable = true; + graphics.enable = true; + office.enable = true; + }; + development = { + docker.enable = true; + web = { + node.enable = true; + }; + }; + virtualization.enable = true; + bluetooth.enable = true; + }; + # Setup user + users.primary = { + enable = true; + }; + tjkeller = { + nas = { + enable = true; + office.enable = true; + office.automount = true; + }; + }; + }; + + # Disable suspend + systemd._suspend.disable = true; + + # Use amdgpu driver for x11 + services.xserver.videoDrivers = [ "amdgpu" ]; + + system.stateVersion = "24.11"; +} diff --git a/hosts/hp-envy-office/hardware-configuration.nix b/hosts/hp-envy-office/hardware-configuration.nix new file mode 100644 index 0000000..22a8c24 --- /dev/null +++ b/hosts/hp-envy-office/hardware-configuration.nix @@ -0,0 +1,48 @@ +# 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 = [ "xhci_pci" "ahci" "ums_realtek" "usb_storage" "usbhid" "sd_mod" "sr_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/5749d84b-690b-43a2-b834-f94675003189"; + fsType = "btrfs"; + options = [ "subvol=@" ]; + }; + + boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-uuid/4a617e54-4800-4474-b1fd-3bca5f66e55a"; + + fileSystems."/home" = + { device = "/dev/disk/by-uuid/5749d84b-690b-43a2-b834-f94675003189"; + fsType = "btrfs"; + options = [ "subvol=@home" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/5E93-7CE3"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = [ ]; + + # 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..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp3s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/hp-envy-office/home.nix b/hosts/hp-envy-office/home.nix new file mode 100644 index 0000000..2e4f61f --- /dev/null +++ b/hosts/hp-envy-office/home.nix @@ -0,0 +1,12 @@ +{ userDetails, ... }: { + imports = [ ../../home ]; + + theme.mint.theme.color = "Dark-Green"; + theme.mint.icons.color = "Green"; + wallpapers.enable = true; + + additional-gtk-bookmarks = with userDetails.userDirs; [ + "file://${documents}/src/sites/admin Admin" + "file:///media/chexx/chexx cHEXx" + ]; +} diff --git a/hosts/libreX60/bios-flashing.nix b/hosts/libreX60/bios-flashing.nix new file mode 100644 index 0000000..6117813 --- /dev/null +++ b/hosts/libreX60/bios-flashing.nix @@ -0,0 +1,8 @@ +# https://libreboot.org/docs/install/#thinkpad-t60x60x60tabletx60s + +{ pkgs, ... }: { + environment.systemPackages = [ pkgs.flashprog ]; + + boot.kernelParams = [ "iomem=relaxed" ]; +} + diff --git a/hosts/libreX60/configuration.nix b/hosts/libreX60/configuration.nix new file mode 100644 index 0000000..9c83a42 --- /dev/null +++ b/hosts/libreX60/configuration.nix @@ -0,0 +1,25 @@ +{ config, lib, pkgs, ... }: { + imports = [ + ./hardware-configuration.nix + ./powertop-auto-tune.nix + ../../nixos/archetypes/tjkeller + # Uncomment this module and reboot to enable bios flashing + #./bios-flashing.nix + ]; + + # Use grub + boot._loader = { + enable = true; + loader = "grub"; + mode = "bios"; + grub.biosDevice = "/dev/sda"; + }; + + # Use libre kernel + boot.kernelPackages = pkgs.linuxPackages-libre; + + # i915 Gpu requires intel driver + services.xserver.videoDrivers = [ "intel" ]; + + system.stateVersion = "24.11"; +} diff --git a/hosts/libreX60/hardware-configuration.nix b/hosts/libreX60/hardware-configuration.nix new file mode 100644 index 0000000..b0a7868 --- /dev/null +++ b/hosts/libreX60/hardware-configuration.nix @@ -0,0 +1,46 @@ +# 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 = [ "uhci_hcd" "ehci_pci" "ata_piix" "ahci" "firewire_ohci" "usb_storage" "sd_mod" "sdhci_pci" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/91572803-436d-4f43-b41f-dfba2103752e"; + fsType = "btrfs"; + options = [ "subvol=@" ]; + }; + + fileSystems."/home" = + { device = "/dev/disk/by-uuid/91572803-436d-4f43-b41f-dfba2103752e"; + fsType = "btrfs"; + options = [ "subvol=@home" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/F618-D6C2"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = [ ]; + + # 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..useDHCP`. + networking.useDHCP = lib.mkDefault true; + networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; + networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/libreX60/home.nix b/hosts/libreX60/home.nix new file mode 100644 index 0000000..f5957d6 --- /dev/null +++ b/hosts/libreX60/home.nix @@ -0,0 +1,18 @@ +{ ... }: { + imports = [ ../../home ]; + + theme = { + mint.theme.color = "Dark-Red"; + mint.icons.color = "Red"; + font = { + monospace = "TamzenForPowerline"; + gtk.name = "monospace"; + gtk.size = 8; + }; + cursor.size = 24; + st = { + enable = true; + font = "TamzenForPowerline:pixelsize=14"; + }; + }; +} diff --git a/hosts/libreX60/powertop-auto-tune.nix b/hosts/libreX60/powertop-auto-tune.nix new file mode 100644 index 0000000..0eb9578 --- /dev/null +++ b/hosts/libreX60/powertop-auto-tune.nix @@ -0,0 +1,17 @@ +# https://en.wikibooks.org/wiki/Libreboot/ThinkPad_X60#Remove_High_Pitched_Whining_Noise +# TLDR; running `powertop --auto-tune` is supposed to kill the high pitched noises produced by the X60 + +{ pkgs, ... }: { + environment.systemPackages = [ pkgs.powertop ]; + + # Create systemd service + systemd.services.powertop-autotune = { + description = "Powertop Auto-Tune"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${pkgs.powertop}/bin/powertop --auto-tune"; + }; + }; +} diff --git a/hosts/optiplex/configuration.nix b/hosts/optiplex/configuration.nix new file mode 100644 index 0000000..8a06294 --- /dev/null +++ b/hosts/optiplex/configuration.nix @@ -0,0 +1,73 @@ +{ config, lib, pkgs, ... }: { + imports = [ + ./hardware-configuration.nix + ../../archetypes/tjkeller + ]; + + # Setup bootloader + boot._loader.enable = true; + + # Enable common options + _archetypes = { + # Use desktop profile + profiles.desktop.enable = true; + # Install software + collections = { + desktop = { + extraUtilities.enable = true; + cad.enable = true; + chromium.enable = true; + crypto.enable = true; + graphics.enable = true; + office.enable = true; + }; + development = { + android.enable = true; + c.enable = true; + docker.enable = true; + lua.enable = true; + web = { + hugo = { + enable = true; + openFirewall = true; + }; + node.enable = true; + }; + }; + }; + # Setup user + users.primary = { + enable = true; + autologin.enable = true; + }; + tjkeller = { + nas.enable = true; + }; + }; + + # Disable suspend + systemd._suspend.disable = true; + + # Allow unfree for nvidia + others + nixpkgs.config.allowUnfree = true; + + # Install more software + environment.systemPackages = with pkgs; [ + prismlauncher + spotify + #vintagestory + ]; + + # Use nvidia driver + services.xserver.videoDrivers = [ "nvidia" ]; + hardware.nvidia = { + modesetting.enable = true; # Required + powerManagement.enable = false; # Can cause bugs + nvidiaSettings = true; + open = false; # Not compatible w/ GTX-1050 + package = config.boot.kernelPackages.nvidiaPackages.stable; # Still good for 1050 + forceFullCompositionPipeline = true; # Enables vsync + }; + + system.stateVersion = "24.11"; +} diff --git a/hosts/optiplex/hardware-configuration.nix b/hosts/optiplex/hardware-configuration.nix new file mode 100644 index 0000000..3d9651e --- /dev/null +++ b/hosts/optiplex/hardware-configuration.nix @@ -0,0 +1,45 @@ +# 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 = [ "xhci_pci" "ahci" "nvme" "firewire_ohci" "usbhid" "usb_storage" "sd_mod" "sr_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/a9d54117-31f6-4cad-b1b2-250f6bfd7808"; + fsType = "btrfs"; + options = [ "subvol=@" ]; + }; + + fileSystems."/home" = + { device = "/dev/disk/by-uuid/a9d54117-31f6-4cad-b1b2-250f6bfd7808"; + fsType = "btrfs"; + options = [ "subvol=@home" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/6987-81B6"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = [ ]; + + # 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..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.eno1.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/optiplex/home.nix b/hosts/optiplex/home.nix new file mode 100644 index 0000000..d293ae0 --- /dev/null +++ b/hosts/optiplex/home.nix @@ -0,0 +1,7 @@ +{ ... }: { + imports = [ ../../home-manager ]; + + theme.mint.theme.color = "Dark-Green"; + theme.mint.icons.color = "Green"; + wallpapers.enable = true; +} diff --git a/hosts/poweredge/configuration.nix b/hosts/poweredge/configuration.nix new file mode 100644 index 0000000..08e392d --- /dev/null +++ b/hosts/poweredge/configuration.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ... }: { + imports = [ ./hardware-configuration.nix ]; + + # ZFS bootloader + bootloader.loader = "grub"; + bootloader.mode = "efi"; + boot.loader.grub = { + zfsSupport = true; + efiInstallAsRemovable = true; + mirroredBoots = [ + { devices = [ "nodev" ]; path = "/boot"; } + ]; + }; + + # Disable suspend + suspend.enable = false; + + system.stateVersion = "25.05"; +} diff --git a/modules/home/alacritty.nix b/modules/home/alacritty.nix deleted file mode 100644 index f60fe01..0000000 --- a/modules/home/alacritty.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ config, lib, ... }: { - options = { - alacritty = { - enable = lib.mkEnableOption "enables creation of alacritty config file"; - font.size = lib.mkOption { - type = lib.types.int; - default = 12; - }; - font.family = lib.mkOption { - type = lib.types.str; - default = "JetBrainsMonoNL Nerd Font Mono"; - }; - }; - }; - - config = { - programs.alacritty.enable = config.alacritty.enable; - programs.alacritty.settings = lib.mkIf config.alacritty.enable { - colors = { - bright = { - black = "#7f7f7f"; - blue = "#1578c1"; - cyan = "#00c4a3"; - green = "#2bb500"; - magenta = "#b14ff7"; - red = "#ed1207"; - white = "#ffffff"; - yellow = "#fc9700"; - }; - normal = { - black = "#101010"; - blue = "#1578c1"; - cyan = "#00c4a3"; - green = "#2bb500"; - magenta = "#b14ff7"; - red = "#ed1207"; - white = "#ffffff"; - yellow = "#fc9700"; - }; - primary = { - background = "#101010"; - foreground = "#ffffff"; - }; - }; - cursor.style.blinking = "Never"; - env.TERM = "xterm-256color"; - font = { - size = config.alacritty.font.size; - normal.family = config.alacritty.font.family; - }; - mouse.bindings = [{ - action = "PasteSelection"; - mouse = "Right"; - }]; - window = { - dynamic_padding = true; - dynamic_title = true; - title = "Terminal"; - # Pretend to be st - class = { - general = "st"; - instance = "st"; - }; - }; - }; - }; -} diff --git a/modules/home/chrome.nix b/modules/home/chrome.nix deleted file mode 100644 index 976a74b..0000000 --- a/modules/home/chrome.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ pkgs, lib, ... }: { - programs.chromium = { - enable = true; - package = pkgs.ungoogled-chromium; - }; - programs.chromium.extensions = - let - createChromiumExtensionFor = browserVersion: { id, sha256, version }: - { - inherit id; - crxPath = builtins.fetchurl { - url = "https://clients2.google.com/service/update2/crx?response=redirect&acceptformat=crx2,crx3&prodversion=${browserVersion}&x=id%3D${id}%26installsource%3Dondemand%26uc"; - name = "${id}.crx"; - inherit sha256; - }; - inherit version; - }; - createChromiumExtension = createChromiumExtensionFor (lib.versions.major pkgs.ungoogled-chromium.version); - in - [ - (createChromiumExtension { - # ublock origin - id = "cjpalhdlnbpafiamejdnhcphjbkeiagm"; - sha256 = "sha256:1i0668xhq5iflb4fn0ghwp79iz6mwspgxdqwp6incbvsyzr596kg"; - version = "1.61.0"; - }) - ]; -} diff --git a/modules/home/default.nix b/modules/home/default.nix deleted file mode 100644 index 022ee9f..0000000 --- a/modules/home/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ lib, userDetails, homeStateVersion, ... }: { - home = { - username = userDetails.username; - homeDirectory = lib.mkForce userDetails.home; - stateVersion = homeStateVersion; - }; - - imports = [ - #./chrome.nix - ./firefox.nix - ./git.nix - ./gtk-bookmarks.nix - ./htop.nix - ./initial-home-setup.nix - ./pcmanfm.nix # TODO mk name changeable & doesn't seem to work right now - ./theme-st.nix - ./theme.nix - ./userdirs.nix - ./wallpapers.nix - ]; - - theme.enable = lib.mkDefault true; - theme.st.enable = lib.mkDefault false; - theme.mint.enable = lib.mkDefault true; - wallpapers.enable = lib.mkDefault false; -} diff --git a/modules/home/firefox.nix b/modules/home/firefox.nix deleted file mode 100644 index 8aa1af3..0000000 --- a/modules/home/firefox.nix +++ /dev/null @@ -1,83 +0,0 @@ -{ lib, pkgs, userDetails, ... }: { - programs.firefox = { - enable = lib.mkDefault true; - arkenfox.enable = true; - profiles = let - search = { - engines = { - "Timmy Search" = { - urls = [{ - template = "https://search.tjkeller.xyz/search"; - params = [ { name = "q"; value = "{searchTerms}"; } ]; - }]; - iconURI = "https://search.tjkeller.xyz/static/themes/simple/img/favicon.svg"; # TODO doesn't seem to work - }; - "Nix Packages" = { - urls = [{ - template = "https://search.nixos.org/packages"; - params = [ { name = "query"; value = "{searchTerms}"; } ]; - }]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = [ "@np" ]; - }; - "NixOS Options" = { - urls = [{ - template = "https://search.nixos.org/options"; - params = [ { name = "query"; value = "{searchTerms}"; } ]; - }]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = [ "@no" ]; - }; - }; - default = "Timmy Search"; - privateDefault = "Timmy Search"; - force = true; # Overwrite old - }; - userChrome = builtins.readFile ./resources/firefox/userChrome.css; - arkenfox = { - enable = true; - enableAllSections = true; - "0100"."0102"."browser.startup.page".value = 3; # 0=blank, 1=home, 2=last visited page, 3=resume previous session - "0100"."0103"."browser.startup.homepage".enable = false; - "0100"."0104"."browser.newtabpage.enabled".enable = false; - #"2800"."2811"."privacy.clearOnShutdown.history".enable = false; - }; - settings = { - "browser.compactmode.show" = true; - "browser.uiCustomization.state" = builtins.readFile ./resources/firefox/uiCustomization.json; # Toolbar etc. - "browser.uidensity" = 1; # Compact - "toolkit.legacyUserProfileCustomizations.stylesheets" = true; # userchrome - - "app.normandy.first_run" = false; - "browser.aboutConfig.showWarning" = false; # arkenfox does - #"browser.download.dir" = userDetails.userDirs.downloads; - "browser.newtabpage.activity-stream.feeds.section.topstories" = false; - "browser.newtabpage.activity-stream.feeds.topsites" = false; - "browser.urlbar.suggest.topsites" = false; - "devtools.toolbox.host" = "window"; - "dom.push.enabled" = false; # - "extensions.pocket.enabled" = false; - "general.smoothScroll" = false; - }; - workSettings = settings // { - "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org"; # Use builtin dark theme instead of system theme - }; - in { - Personal = { - id = 0; - isDefault = true; - inherit search; - inherit userChrome; - inherit arkenfox; - inherit settings; - }; - Work = { - id = 1; - inherit search; - inherit userChrome; - inherit arkenfox; - settings = workSettings; - }; - }; - }; -} diff --git a/modules/home/git.nix b/modules/home/git.nix deleted file mode 100644 index 9d15a90..0000000 --- a/modules/home/git.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ userDetails, ... }: { - programs.git = { - enable = true; - userName = userDetails.fullname; - userEmail = userDetails.email; - }; -} diff --git a/modules/home/gtk-bookmarks.nix b/modules/home/gtk-bookmarks.nix deleted file mode 100644 index 24c6563..0000000 --- a/modules/home/gtk-bookmarks.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ config, lib, userDetails, ... }: { - options = { - additional-gtk-bookmarks = lib.mkOption { - type = with lib.types; listOf str; - default = []; - description = "gtk bookmarks for file managers, etc."; - }; - }; - - config = { - gtk.gtk3.bookmarks = ( - lib.mapAttrsToList (name: path: - "file://${path} ${lib.toUpper (lib.substring 0 1 name)}${lib.substring 1 (-1) name}" - ) userDetails.userDirs - ) ++ config.additional-gtk-bookmarks; - }; -} diff --git a/modules/home/htop.nix b/modules/home/htop.nix deleted file mode 100644 index 523fee8..0000000 --- a/modules/home/htop.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ config, ... }: { - programs.htop.enable = true; - programs.htop.settings = { - fields = with config.lib.htop.fields; [ - PID - USER - 124 # EXE - PERCENT_CPU - PERCENT_MEM - STARTTIME - ELAPSED # time elapsed since process start - IO_READ_RATE - RBYTES # num read bytes - IO_WRITE_RATE - WBYTES # num written bytes - TIME - STIME # sys time - CSTIME # child sys time - NICE - STATE - PRIORITY - 125 # CWD - ]; - } // (with config.lib.htop; leftMeters [ - (bar "AllCPUs2") - (bar "CPU") - (bar "Memory") - (bar "DiskIO") - (bar "NetworkIO") - ]) // (with config.lib.htop; rightMeters [ - (text "Hostname") - (text "Clock") - (text "Uptime") - (text "Battery") - (text "LoadAverage") - (text "Tasks") - ]); -} diff --git a/modules/home/initial-home-setup.nix b/modules/home/initial-home-setup.nix deleted file mode 100644 index 4132386..0000000 --- a/modules/home/initial-home-setup.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ config, lib, pkgs, userDetails, ... }: { - home.activation = { - cloneRepos = lib.hm.dag.entryAfter ["writeBoundary"] '' - export PATH="${config.home.path}/bin:$PATH" - ${builtins.readFile ./resources/activation-scripts/clone-repos.sh} - ''; - linkZshProfile = lib.hm.dag.entryAfter ["writeBoundary"] '' - run ln -sf $VERBOSE_ARG $HOME/.config/zsh/zprofile $HOME/.zprofile - ''; - cleanupHome = lib.hm.dag.entryAfter ["writeBoundary"] '' - run rm -f $VERBOSE_ARG $HOME/{.zcompdump,.zshrc,.zsh_history,.bash_history} - ''; - mimewiz = lib.hm.dag.entryAfter ["writeBoundary"] '' - export PATH="${pkgs.xdg-utils}/bin:$PATH" - export PATH="$HOME/.local/bin/misc:$PATH" - run mimewiz -i # already verbose - ''; - createDirs = lib.hm.dag.entryAfter ["writeBoundary"] '' - run mkdir -p $VERBOSE_ARG ${ lib.concatStringsSep " " (lib.attrValues userDetails.userDirs) } - ''; - }; -} diff --git a/modules/home/pcmanfm.nix b/modules/home/pcmanfm.nix deleted file mode 100644 index 3c70521..0000000 --- a/modules/home/pcmanfm.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - home.file.pcmanfm-root = { - target = ".local/share/file-manager/actions/root.desktop"; - source = ./resources/pcmanfm/root.desktop; - }; -} diff --git a/modules/home/resources/activation-scripts/clone-repos.sh b/modules/home/resources/activation-scripts/clone-repos.sh deleted file mode 100644 index eaee4dc..0000000 --- a/modules/home/resources/activation-scripts/clone-repos.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh - -server="https://git.tjkeller.xyz/" - -clonemissing() { - # pull and return if already existing - if [ -d "$2"/.git ]; then - run cd $VERBOSE_ARG "$2" - run git pull $VERBOSE_ARG || echo "$2: failed to pull from remote" - return - fi - - # clone to $2 - run mkdir -p $VERBOSE_ARG "$2" - run git clone $VERBOSE_ARG "$server$1" "$2" - - # link to $3 - [ -z "$3" ] && return - run mkdir -p $VERBOSE_ARG "$3" - run ln -sf $VERBOSE_ARG "$2"/* "$3" -} - -# # repo # clone to # link to -clonemissing scripts $HOME/docs/src/scripts $HOME/.local/bin -clonemissing dotconfig $HOME/docs/src/config $HOME/.config -clonemissing userscripts $HOME/docs/src/userscripts '' -clonemissing nixos $HOME/docs/src/nixos '' -clonemissing awesome $HOME/.config/awesome '' -clonemissing nvim $HOME/.config/nvim '' -clonemissing zsh $HOME/.config/zsh '' diff --git a/modules/home/resources/firefox/uiCustomization.json b/modules/home/resources/firefox/uiCustomization.json deleted file mode 100644 index 339b716..0000000 --- a/modules/home/resources/firefox/uiCustomization.json +++ /dev/null @@ -1 +0,0 @@ -{"placements":{"widget-overflow-fixed-list":[],"unified-extensions-area":["ublock0_raymondhill_net-browser-action","sponsorblocker_ajay_app-browser-action","_e6e36c9a-8323-446c-b720-a176017e38ff_-browser-action","dearrow_ajay_app-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","idcac-pub_guus_ninja-browser-action","addon_darkreader_org-browser-action","_74145f27-f039-47ce-a470-a662b129930a_-browser-action","_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action","jid1-bofifl9vbdl2zq_jetpack-browser-action","addon_fastforward_team-browser-action","jid1-tsgsxbhncspbwq_jetpack-browser-action","_aecec67f-0d10-4fa7-b7c7-609a2db280cf_-browser-action"],"nav-bar":["back-button","forward-button","stop-reload-button","home-button","urlbar-container","downloads-button","unified-extensions-button"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["personal-bookmarks"]},"seen":["save-to-pocket-button","developer-button","dearrow_ajay_app-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","_e6e36c9a-8323-446c-b720-a176017e38ff_-browser-action","sponsorblocker_ajay_app-browser-action","ublock0_raymondhill_net-browser-action","idcac-pub_guus_ninja-browser-action","addon_darkreader_org-browser-action","_74145f27-f039-47ce-a470-a662b129930a_-browser-action","_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action","jid1-bofifl9vbdl2zq_jetpack-browser-action","addon_fastforward_team-browser-action","jid1-tsgsxbhncspbwq_jetpack-browser-action","_aecec67f-0d10-4fa7-b7c7-609a2db280cf_-browser-action"],"dirtyAreaCache":["nav-bar","PersonalToolbar","unified-extensions-area","toolbar-menubar","TabsToolbar"],"currentVersion":20,"newElementCount":5} diff --git a/modules/home/resources/firefox/userChrome.css b/modules/home/resources/firefox/userChrome.css deleted file mode 100644 index 624ab26..0000000 --- a/modules/home/resources/firefox/userChrome.css +++ /dev/null @@ -1,204 +0,0 @@ -/* TOP BAR */ -#navigator-toolbox { - --uc-navigationbar-width: 40vw; -} - -/* Remove overflow button */ -#nav-bar-overflow-button { display: none; } - -/* remove alltabs button */ -#alltabs-button { display: none; } - -/* Change background color of toolbar */ -#navigator-toolbox-background { - background: var(--toolbar-field-border-color) !important; -} - -/* Change background color of bookmarks toolbar */ -#PersonalToolbar { - background: var(--toolbox-bgcolor) !important; -} - -/* Adjust spacing of toolbar items */ -#PlacesToolbarItems { - gap: .35rem; - margin-block: .2rem; -} - -/* Fix vertical spacing of tabs */ -#TabsToolbar { - margin-top: -1px; -} - -/* Move new tab to far right */ -#tabbrowser-arrowscrollbox-periphery { - margin-left: auto; -} - -/* Fix spacing around tabs by removing nav bar top border */ -#nav-bar { - border: none !important; -} - -/* Media queries for width of nav bar */ -@media screen and (max-width: 1000px) { - #navigator-toolbox { - --uc-navigationbar-width: 50vw; - } -} -@media screen and (max-width: 800px) { - #navigator-toolbox { - --uc-navigationbar-width: 60vw; - } -} - -/* Change look of tabs in smaller view */ -@media screen and (max-width: 800px) { - .tab-background { - margin-block: .2em !important; - } - #TabsToolbar { - margin-left: 5px; - } -} - - -/* COMBINE TOP BAR */ -/* Combine top bar into single line if width >= 800px */ -@media screen and (min-width: 800px) { - :root { - --uc-toolbar-height: 36px; /* Half height bar */ - } - - /* Modify these to change relative widths or default height */ - #navigator-toolbox { - margin-bottom: 0px; - padding-top: 1px; /* Top bar is cut off otherwise */ - } - - #TabsToolbar { - margin-left: calc(var(--uc-navigationbar-width) + 2px); /* Resize tab bar */ - margin-top: -4px; - margin-bottom: 2px; - } - - /* Tabs extend to bottom of bar */ - .tab-background { - margin-bottom: 0 !important; - margin-top: 3px !important; /* See above navigator-toolbox rule. Avoid cutting off top */ - } - - /* Center tab buttons */ - #tabs-newtab-button, - #alltabs-button - { - margin-top: 4px !important; - } - - /* Integrate url / nav bar */ - #nav-bar { - margin-right:calc(100vw - var(--uc-navigationbar-width)); - margin-top: calc(0px - var(--uc-toolbar-height)); - border-radius: 0 var(--tab-border-radius) var(--tab-border-radius) 0; - border-right: 1px solid ThreeDShadow !important; - box-shadow: 0 0 4px rgba(0,0,0,.4) !important; - } - - /* 1px margin on touch density causes tabs to be too high */ - .tab-close-button { - margin-top: 0 !important - } - - /* Make opened urlbar overlay the toolbar */ - #urlbar[open]:focus-within { - min-width: 50vw !important; - } - - /* Remove min and max width of urlbar */ - #urlbar-container { - width: 0 !important; - } - - /* Fix customization view */ - #customization-panelWrapper .panel-arrowbox .panel-arrow { - margin-inline-end: initial !important; - } - - /* Shorten findbar */ - findbar { - width: 600px !important; - border-radius: 0 0 0 5px; - border-bottom: none !important; - box-shadow: 0 2px 4px rgba(0,0,0,.4); /* Move down 2px so it doesn't go over the tab bar */ - } -} - - -/* FINDBAR */ -findbar { - width: 100vw; - position: absolute; - top: 0; - right: 0; - padding: 0 !important; - padding-top: 1px !important; - background: -moz-headerbar Field !important; - border-top-width: 0px !important; - border-bottom: 1px solid ThreeDShadow; -} - -findbar .findbar-container { - padding-bottom: 5px !important; /* Move search bar closer to left edge */ - padding-top: 2px !important; /* Move search bar closer to left edge */ - height: max-content !important; - gap: 2px; - justify-content: space-between; - flex-wrap: wrap; -} - -/* Force textbox to fill up first line */ -findbar .findbar-textbox { - width: 100% !important; - background: Field !important; /* Set the background color to be consistent with found-matches label when unfocused */ -} - -/* Hide description showing wrap conditions etc. */ -findbar description { - display: none; -} - -/* Move found matches label (roughly) into the textbox */ -findbar label.found-matches, -findbar description { - position: absolute; - top: 6.5px; - right: 110px; - color: color-mix(in srgb, -moz-headerbartext, transparent 46%) !important; - /* So this text overrides the text below, TODO find a more elegant solution */ - padding-inline: 1ex; - background: Field; -} - -/* Show description when it says "Phrase Not Found" */ -findbar description[status=notfound] { - display: inline-block; -} - -/* Force checkboxes onto second line */ -findbar .findbar-container hbox { - width: 100%; -} - - -/* BOOKMARK BAR */ -@-moz-document url(chrome://browser/content/browser.xhtml) { - #PersonalToolbar { - background: -moz-headerbar Field !important; - border-top: 1px solid ThreeDShadow !important; - z-index: 1000; /* To not be affected by shadow from navbar */ - } - /* Space out bookmark items */ - .bookmark-item .toolbarbutton-text { - padding: 2.5px 4px; - } -} diff --git a/modules/home/resources/pcmanfm/root.desktop b/modules/home/resources/pcmanfm/root.desktop deleted file mode 100644 index 4b4d263..0000000 --- a/modules/home/resources/pcmanfm/root.desktop +++ /dev/null @@ -1,11 +0,0 @@ -[Desktop Entry] -Type=Action -Tooltip=Open Directory As Root -Name=Open Directory As Root -Profiles=profile-zero; -Icon=gtk-dialog-authentication - -[X-Action-Profile profile-zero] -MimeTypes=inode/directory; -Exec=/home/timmy/.local/bin/x11/xsudo /usr/bin/pcmanfm %u -Name=Default profile diff --git a/modules/home/theme-st.nix b/modules/home/theme-st.nix deleted file mode 100644 index 0a06cd0..0000000 --- a/modules/home/theme-st.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ config, lib, pkgs, ... }: { - options = { - theme.st = { - enable = lib.mkEnableOption "enables theming st with home manager"; - font = lib.mkOption { - type = lib.types.str; - default = "JetBrainsMonoNL Nerd Font Mono:size=12:antialias=true:autohint=true"; - }; - }; - }; - config = let - themed-st = pkgs.st.overrideAttrs (old: { - buildInputs = old.buildInputs or [] ++ [ pkgs.makeWrapper ]; - postInstall = old.postInstall or "" + '' - wrapProgram $out/bin/st \ - --add-flags '-f"${config.theme.st.font}"' - ''; - }); - in lib.mkIf config.theme.enable { - home.packages = [ themed-st ]; - }; -} diff --git a/modules/home/theme.nix b/modules/home/theme.nix deleted file mode 100644 index 9e4edae..0000000 --- a/modules/home/theme.nix +++ /dev/null @@ -1,101 +0,0 @@ -{ config, lib, pkgs, ... }: -let - transformColorValue = color : - if color == "Green" then "Mint-Y" - else if color == "Dark-Green" then "Mint-Y-Dark" - else "Mint-Y-${color}" - ; -in { - options = { - theme.enable = lib.mkEnableOption "enables theming"; - theme.mint = { - enable = lib.mkEnableOption "enables mint theme"; - # TODO add theme.dark option instead of specifying Dark-Color - theme.color = lib.mkOption { - type = lib.types.enum [ - "Aqua" "Blue" "Green" "Grey" "Orange" "Pink" "Purple" "Red" - "Sand" "Teal" "Dark-Aqua" "Dark-Blue" "Dark-Green" - "Dark-Grey" "Dark-Orange" "Dark-Pink" "Dark-Purple" - "Dark-Red" "Dark-Sand" "Dark-Teal" - ]; - default = "Dark-Aqua"; - description = "mint-y theme color eg. 'Dark-Aqua' or 'Red'"; - }; - icons.color = lib.mkOption { - type = lib.types.enum [ - "Aqua" "Blue" "Green" "Grey" "Orange" "Pink" "Purple" "Red" - "Sand" "Teal" - ]; - default = "Aqua"; - description = "mint-y icons color eg. 'Aqua' or 'Red'"; - }; - }; - theme.font = { - sansSerif = lib.mkOption { - type = lib.types.str; - default = "Inter"; - description = "default sans serif font"; - }; - monospace = lib.mkOption { - type = lib.types.str; - default = "CommitMono"; - description = "default monospace font"; - }; - gtk = { - name = lib.mkOption { - type = lib.types.str; - default = "sans-serif"; - description = "default gtk font"; - }; - size = lib.mkOption { - type = with lib.types; nullOr int; - default = null; - description = "default gtk font size"; - }; - }; - }; - theme.cursor = { - name = lib.mkOption { - type = lib.types.str; - default = "Adwaita"; - description = "gtk cursor theme"; - }; - size = lib.mkOption { - type = with lib.types; nullOr int; - default = null; - description = "gtk cursor size"; - }; - }; - }; - - config = lib.mkIf config.theme.enable { - gtk = { - enable = true; - theme = lib.mkIf config.theme.mint.enable { - package = pkgs.mint-themes; - name = transformColorValue config.theme.mint.theme.color; - }; - iconTheme = lib.mkIf config.theme.mint.enable { - package = pkgs.mint-y-icons; - name = transformColorValue config.theme.mint.icons.color; - }; - font = { - name = config.theme.font.gtk.name; - size = config.theme.font.gtk.size; - }; - cursorTheme = { - name = config.theme.cursor.name; - size = config.theme.cursor.size; - }; - gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; - }; - qt = { - enable = true; - platformTheme.name = "gtk3"; - }; - fonts.fontconfig.defaultFonts = { - sansSerif = [ config.theme.font.sansSerif ]; - monospace = [ config.theme.font.monospace ]; - }; - }; -} diff --git a/modules/home/userdirs.nix b/modules/home/userdirs.nix deleted file mode 100644 index 58c1d59..0000000 --- a/modules/home/userdirs.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ userDetails, ... }: { - xdg.userDirs = { - enable = true; - } // userDetails.userDirs; -} diff --git a/modules/home/wallpapers.nix b/modules/home/wallpapers.nix deleted file mode 100644 index d7e067a..0000000 --- a/modules/home/wallpapers.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ lib, config, pkgs, ... }: { - options = { - wallpapers.enable = lib.mkEnableOption "enables all wallpapers"; - }; - - config = lib.mkIf config.wallpapers.enable { - home.file.".local/share/wallpaper" = { - source = pkgs.fetchzip { - url = "https://tjkeller.xyz/permalinks/wallpapers.tar"; - hash = "sha256-lhj9wUMZfd0XOrUtWY9HB64oXrS/EjsvsaJHzu4ucFg="; - }; - }; - }; -} diff --git a/modules/hosts/T495/configuration.nix b/modules/hosts/T495/configuration.nix deleted file mode 100644 index 171f746..0000000 --- a/modules/hosts/T495/configuration.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ config, lib, pkgs, ... }: { - imports = [ - ./hardware-configuration.nix - ./wg.nix - ../../nixos/archetypes/tjkeller - ]; - - # Setup bootloader - boot._loader.enable = true; - - # Enable common options - _archetypes = { - # Use desktop profile - profiles.desktop.enable = true; - # Install software - collections = { - desktop = { - extraUtilities.enable = true; - cad.enable = true; - chromium.enable = true; - crypto.enable = true; - graphics.enable = true; - office.enable = true; - }; - development = { - android.enable = true; - c.enable = true; - docker.enable = true; - lua.enable = true; - web = { - hugo = { - enable = true; - openFirewall = true; - }; - node.enable = true; - }; - }; - bluetooth.enable = true; - }; - # Setup user - users.primary = { - enable = true; - autologin.enable = true; - }; - # Enable network drives - tjkeller = { - nas = { - enable = true; - office.enable = true; - }; - }; - }; - - # Install spotify - nixpkgs.config.allowUnfree = true; - environment.systemPackages = with pkgs; [ - spotify - ]; - - # Use amdgpu driver for x11 - services.xserver.videoDrivers = [ "amdgpu" ]; - - system.stateVersion = "24.05"; -} diff --git a/modules/hosts/T495/hardware-configuration.nix b/modules/hosts/T495/hardware-configuration.nix deleted file mode 100644 index 6258a83..0000000 --- a/modules/hosts/T495/hardware-configuration.nix +++ /dev/null @@ -1,49 +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" "ehci_pci" "xhci_pci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-amd" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/4256823f-107b-41a9-851d-6bd9939f1f4b"; - fsType = "btrfs"; - options = [ "subvol=@" ]; - }; - - boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-uuid/f20115a9-0a0e-43d2-9cee-c705b2de43b9"; - - fileSystems."/home" = - { device = "/dev/disk/by-uuid/4256823f-107b-41a9-851d-6bd9939f1f4b"; - fsType = "btrfs"; - options = [ "subvol=@home" ]; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/9441-53B1"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - swapDevices = [ ]; - - # 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..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp3s0f0.useDHCP = lib.mkDefault true; - # networking.interfaces.enp4s0.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/modules/hosts/T495/home.nix b/modules/hosts/T495/home.nix deleted file mode 100644 index f233c08..0000000 --- a/modules/hosts/T495/home.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ ... }: { - imports = [ ../../home ]; - - theme = { - mint.theme.color = "Dark-Purple"; - mint.icons.color = "Purple"; - st = { - enable = true; - font = "TamzenForPowerline:pixelsize=20"; - }; - }; - wallpapers.enable = true; - - home.file.input-leap-config = { - source = ./resources/input-leap; - recursive = true; - target = "./.config/input-leap"; - }; -} diff --git a/modules/hosts/T495/resources/input-leap/input-leap.conf b/modules/hosts/T495/resources/input-leap/input-leap.conf deleted file mode 100644 index c2d5176..0000000 --- a/modules/hosts/T495/resources/input-leap/input-leap.conf +++ /dev/null @@ -1,12 +0,0 @@ -section: screens - T495: - optiplex: -end - -section: links - T495: - up = optiplex - - optiplex: - down = T495 -end diff --git a/modules/hosts/T495/resources/secrets/wg0.yaml b/modules/hosts/T495/resources/secrets/wg0.yaml deleted file mode 100644 index 6df5ff6..0000000 --- a/modules/hosts/T495/resources/secrets/wg0.yaml +++ /dev/null @@ -1,21 +0,0 @@ -wg0: ENC[AES256_GCM,data:Zxw98YrH2QYyU8u4sk0geOUQXfOZK9scGPECbKruehcDffJlRspmsS2k3sSahdAIcJjIjauGmZ7usXus2wKAiRnYsl2e4P/0IUVp8L8UJp52iPZVEvT9JRELPYQ9gBBNmp/HDYglxP7uHx2bzcCTvCr4fFdQZgsUSl/pd6pBtSMwupsK5U9Xfz9Sh7JNTlpgpU4jlkl676XnrCo0HyL7rXMp4S6Ruhfve8gwJYP8QLn4DiwnP69Flc54MDQRKSvlvYca8dZIrS1N3h9k6aO1eB/z4I3qPN0/p7yT9pdfemaDpEqf1+byRKGYuED1Ge8P3D0+qRWJBd5GmoSHC8NV9KVV3DrAJ/QLOLCqm8oN0UGxQW5lbWi6lIQ708kodEDOsBREexRPOzjYAjajBr6O6wCtRThgce4yOg9ZwqxVDERqIz1fR034b56LrZtKjOSlJtmkmMCuCGrVkKj4L7JvBfKtCjBN+TOyONsClY/Vhd+XzNWWk8d8FVraOE2rJN4+ss7UL+jBth3DfSbr739cEQDhHRKoMPvXy0FhPVw=,iv:CN82pOBNCtICzM0Ac9Gh+x8pUSK1Fc2v2KmM+de3A78=,tag:KuGiC+Ak550d6njSdX4muA==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1w80rc0dnuu8nw99gw64c596qqetm78jdnsqajr0u7ephykekr39qfz8vnv - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4NEN4NGxDR1oreGVoSGhE - TzMxSEY0QVBhS2Z6MW15ci9aVlJ0a3IyVlZBCldPRVNvcUhJSHhWSEk3akd4RjN0 - ajhUV2d1ZWRsRFU4cTE2dGl6RmM4MGsKLS0tIFhnUjl5aDJqWVB1NE15SlNzR2Iv - YTNydURsOUMrSXZGdk9UOUdUQlA0SFUKxEDJRR6tpYva9qpWo9NxwCxk/xpRVoTl - YJkmDZzMcXikXXiro96AprP9dXJXvMPKYPGl2Zsal8PlGFPBoHW2GA== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-01-05T18:21:12Z" - mac: ENC[AES256_GCM,data:VEtpQLHMoQK7Qg4PT2DkNNMurjRE0ZadyiQ0uYsPJ0K2lS0gD8pPwb8btiq7KXXOGWWZOMYRDaRKOENy44f/k+16GOpO6jaKAfN6eEcidaWlP7zvpeNzt7LImFqn/Sjv4rq1+DmvGxyyNjuK8BwvvAfnZwG6KXbn7Bh6xgfTnLs=,iv:Jf4f5j6BTkDBmah3izIESsAn7wDMUFU6NbsqpFIdui4=,tag:yNg374unwHaDEK43+Y0eWg==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.9.2 diff --git a/modules/hosts/T495/wg.nix b/modules/hosts/T495/wg.nix deleted file mode 100644 index 3881b63..0000000 --- a/modules/hosts/T495/wg.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, pkgs, inputs, ... }: { - sops.secrets.wg0.sopsFile = ./resources/secrets/wg0.yaml; - - networking.wg-quick.interfaces = { - wg0.configFile = config.sops.secrets.wg0.path; - }; -} diff --git a/modules/hosts/X230/configuration.nix b/modules/hosts/X230/configuration.nix deleted file mode 100644 index accbb1c..0000000 --- a/modules/hosts/X230/configuration.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ config, lib, pkgs, ... }: { - imports = [ - ./hardware-configuration.nix - ../../nixos/archetypes/tjkeller - ]; - - # Setup bootloader - boot._loader.enable = true; - - # Enable common options - _archetypes = { - # Use desktop profile - profiles.desktop.enable = true; - # Install software - collections = { - desktop = { - crypto.enable = true; - graphics.enable = true; - office.enable = true; - }; - }; - # Setup user - users.primary = { - enable = true; - autologin.enable = true; - }; - }; - - system.stateVersion = "24.05"; -} diff --git a/modules/hosts/X230/hardware-configuration.nix b/modules/hosts/X230/hardware-configuration.nix deleted file mode 100644 index 0791585..0000000 --- a/modules/hosts/X230/hardware-configuration.nix +++ /dev/null @@ -1,48 +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 = [ "xhci_pci" "ehci_pci" "ahci" "usb_storage" "sd_mod" "sdhci_pci" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/41036740-73bc-4004-a302-01233b4d83b8"; - fsType = "btrfs"; - options = [ "subvol=@" ]; - }; - - boot.initrd.luks.devices."enc".device = "/dev/disk/by-uuid/6019772f-4a1c-4abd-9c70-b1d71cc2de65"; - - fileSystems."/home" = - { device = "/dev/disk/by-uuid/41036740-73bc-4004-a302-01233b4d83b8"; - fsType = "btrfs"; - options = [ "subvol=@home" ]; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/72D4-F66A"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - swapDevices = [ ]; - - # 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..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp0s25.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/modules/hosts/X230/home.nix b/modules/hosts/X230/home.nix deleted file mode 100644 index 03b559d..0000000 --- a/modules/hosts/X230/home.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ ... }: { - imports = [ ../../home ]; - - theme = { - mint.theme.color = "Dark-Teal"; - mint.icons.color = "Teal"; - font = { - monospace = "TamzenForPowerline"; - gtk.name = "monospace"; - gtk.size = 8; - }; - cursor.size = 24; - st = { - enable = true; - font = "TamzenForPowerline:pixelsize=14"; - }; - }; -} diff --git a/modules/hosts/flex-wg-router/configuration.nix b/modules/hosts/flex-wg-router/configuration.nix deleted file mode 100644 index f21046d..0000000 --- a/modules/hosts/flex-wg-router/configuration.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ config, lib, pkgs, ... }: { - imports = [ - ./hardware-configuration.nix - ../../archetypes/headless - ]; - bootloader.mode = "efi"; - - # Enable docker - software.development = { - docker.enable = true; - }; - - # Enable set root password - users.setPassword.enable = true; - - system.stateVersion = "25.05"; -} diff --git a/modules/hosts/flex-wg-router/hardware-configuration.nix b/modules/hosts/flex-wg-router/hardware-configuration.nix deleted file mode 100644 index 01cff6d..0000000 --- a/modules/hosts/flex-wg-router/hardware-configuration.nix +++ /dev/null @@ -1,45 +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 = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/01eae5fd-a46e-4a36-8a9d-247a0b16bcef"; - fsType = "btrfs"; - options = [ "subvol=@" ]; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/345A-436A"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - fileSystems."/home" = - { device = "/dev/disk/by-uuid/01eae5fd-a46e-4a36-8a9d-247a0b16bcef"; - fsType = "btrfs"; - options = [ "subvol=@home" ]; - }; - - swapDevices = [ ]; - - # 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..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp3s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/modules/hosts/flex-wg-router/home.nix b/modules/hosts/flex-wg-router/home.nix deleted file mode 100644 index 21d548f..0000000 --- a/modules/hosts/flex-wg-router/home.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: { - imports = [ ../../home ]; - - theme.enable = false; - programs.firefox.enable = false; - gtk.enable = false; -} diff --git a/modules/hosts/hp-envy-office/configuration.nix b/modules/hosts/hp-envy-office/configuration.nix deleted file mode 100644 index 60be56d..0000000 --- a/modules/hosts/hp-envy-office/configuration.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ config, lib, pkgs, ... }: { - imports = [ - ./hardware-configuration.nix - ../../nixos/archetypes/tjkeller - ]; - - # Setup bootloader - boot._loader.enable = true; - boot.loader.timeout = 15; # Show for longer since it's usually skipped - - # Enable common options - _archetypes = { - # Use desktop profile - profiles.desktop.enable = true; - # Install software - collections = { - desktop = { - extraUtilities.enable = true; - chromium.enable = true; - graphics.enable = true; - office.enable = true; - }; - development = { - docker.enable = true; - web = { - node.enable = true; - }; - }; - virtualization.enable = true; - bluetooth.enable = true; - }; - # Setup user - users.primary = { - enable = true; - }; - tjkeller = { - nas = { - enable = true; - office.enable = true; - office.automount = true; - }; - }; - }; - - # Disable suspend - systemd._suspend.disable = true; - - # Use amdgpu driver for x11 - services.xserver.videoDrivers = [ "amdgpu" ]; - - system.stateVersion = "24.11"; -} diff --git a/modules/hosts/hp-envy-office/hardware-configuration.nix b/modules/hosts/hp-envy-office/hardware-configuration.nix deleted file mode 100644 index 22a8c24..0000000 --- a/modules/hosts/hp-envy-office/hardware-configuration.nix +++ /dev/null @@ -1,48 +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 = [ "xhci_pci" "ahci" "ums_realtek" "usb_storage" "usbhid" "sd_mod" "sr_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/5749d84b-690b-43a2-b834-f94675003189"; - fsType = "btrfs"; - options = [ "subvol=@" ]; - }; - - boot.initrd.luks.devices."cryptroot".device = "/dev/disk/by-uuid/4a617e54-4800-4474-b1fd-3bca5f66e55a"; - - fileSystems."/home" = - { device = "/dev/disk/by-uuid/5749d84b-690b-43a2-b834-f94675003189"; - fsType = "btrfs"; - options = [ "subvol=@home" ]; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/5E93-7CE3"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - swapDevices = [ ]; - - # 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..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp3s0.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/modules/hosts/hp-envy-office/home.nix b/modules/hosts/hp-envy-office/home.nix deleted file mode 100644 index 2e4f61f..0000000 --- a/modules/hosts/hp-envy-office/home.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ userDetails, ... }: { - imports = [ ../../home ]; - - theme.mint.theme.color = "Dark-Green"; - theme.mint.icons.color = "Green"; - wallpapers.enable = true; - - additional-gtk-bookmarks = with userDetails.userDirs; [ - "file://${documents}/src/sites/admin Admin" - "file:///media/chexx/chexx cHEXx" - ]; -} diff --git a/modules/hosts/libreX60/bios-flashing.nix b/modules/hosts/libreX60/bios-flashing.nix deleted file mode 100644 index 6117813..0000000 --- a/modules/hosts/libreX60/bios-flashing.nix +++ /dev/null @@ -1,8 +0,0 @@ -# https://libreboot.org/docs/install/#thinkpad-t60x60x60tabletx60s - -{ pkgs, ... }: { - environment.systemPackages = [ pkgs.flashprog ]; - - boot.kernelParams = [ "iomem=relaxed" ]; -} - diff --git a/modules/hosts/libreX60/configuration.nix b/modules/hosts/libreX60/configuration.nix deleted file mode 100644 index 9c83a42..0000000 --- a/modules/hosts/libreX60/configuration.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, lib, pkgs, ... }: { - imports = [ - ./hardware-configuration.nix - ./powertop-auto-tune.nix - ../../nixos/archetypes/tjkeller - # Uncomment this module and reboot to enable bios flashing - #./bios-flashing.nix - ]; - - # Use grub - boot._loader = { - enable = true; - loader = "grub"; - mode = "bios"; - grub.biosDevice = "/dev/sda"; - }; - - # Use libre kernel - boot.kernelPackages = pkgs.linuxPackages-libre; - - # i915 Gpu requires intel driver - services.xserver.videoDrivers = [ "intel" ]; - - system.stateVersion = "24.11"; -} diff --git a/modules/hosts/libreX60/hardware-configuration.nix b/modules/hosts/libreX60/hardware-configuration.nix deleted file mode 100644 index b0a7868..0000000 --- a/modules/hosts/libreX60/hardware-configuration.nix +++ /dev/null @@ -1,46 +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 = [ "uhci_hcd" "ehci_pci" "ata_piix" "ahci" "firewire_ohci" "usb_storage" "sd_mod" "sdhci_pci" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/91572803-436d-4f43-b41f-dfba2103752e"; - fsType = "btrfs"; - options = [ "subvol=@" ]; - }; - - fileSystems."/home" = - { device = "/dev/disk/by-uuid/91572803-436d-4f43-b41f-dfba2103752e"; - fsType = "btrfs"; - options = [ "subvol=@home" ]; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/F618-D6C2"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - swapDevices = [ ]; - - # 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..useDHCP`. - networking.useDHCP = lib.mkDefault true; - networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; - networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/modules/hosts/libreX60/home.nix b/modules/hosts/libreX60/home.nix deleted file mode 100644 index f5957d6..0000000 --- a/modules/hosts/libreX60/home.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ ... }: { - imports = [ ../../home ]; - - theme = { - mint.theme.color = "Dark-Red"; - mint.icons.color = "Red"; - font = { - monospace = "TamzenForPowerline"; - gtk.name = "monospace"; - gtk.size = 8; - }; - cursor.size = 24; - st = { - enable = true; - font = "TamzenForPowerline:pixelsize=14"; - }; - }; -} diff --git a/modules/hosts/libreX60/powertop-auto-tune.nix b/modules/hosts/libreX60/powertop-auto-tune.nix deleted file mode 100644 index 0eb9578..0000000 --- a/modules/hosts/libreX60/powertop-auto-tune.nix +++ /dev/null @@ -1,17 +0,0 @@ -# https://en.wikibooks.org/wiki/Libreboot/ThinkPad_X60#Remove_High_Pitched_Whining_Noise -# TLDR; running `powertop --auto-tune` is supposed to kill the high pitched noises produced by the X60 - -{ pkgs, ... }: { - environment.systemPackages = [ pkgs.powertop ]; - - # Create systemd service - systemd.services.powertop-autotune = { - description = "Powertop Auto-Tune"; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" ]; - serviceConfig = { - Type = "oneshot"; - ExecStart = "${pkgs.powertop}/bin/powertop --auto-tune"; - }; - }; -} diff --git a/modules/hosts/optiplex/configuration.nix b/modules/hosts/optiplex/configuration.nix deleted file mode 100644 index 36241a8..0000000 --- a/modules/hosts/optiplex/configuration.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ config, lib, pkgs, ... }: { - imports = [ - ./hardware-configuration.nix - ../../nixos/archetypes/tjkeller - ]; - - # Setup bootloader - boot._loader.enable = true; - - # Enable common options - _archetypes = { - # Use desktop profile - profiles.desktop.enable = true; - # Install software - collections = { - desktop = { - extraUtilities.enable = true; - cad.enable = true; - chromium.enable = true; - crypto.enable = true; - graphics.enable = true; - office.enable = true; - }; - development = { - android.enable = true; - c.enable = true; - docker.enable = true; - lua.enable = true; - web = { - hugo = { - enable = true; - openFirewall = true; - }; - node.enable = true; - }; - }; - }; - # Setup user - users.primary = { - enable = true; - autologin.enable = true; - }; - tjkeller = { - nas.enable = true; - }; - }; - - # Disable suspend - systemd._suspend.disable = true; - - # Allow unfree for nvidia + others - nixpkgs.config.allowUnfree = true; - - # Install more software - environment.systemPackages = with pkgs; [ - prismlauncher - spotify - #vintagestory - ]; - - # Use nvidia driver - services.xserver.videoDrivers = [ "nvidia" ]; - hardware.nvidia = { - modesetting.enable = true; # Required - powerManagement.enable = false; # Can cause bugs - nvidiaSettings = true; - open = false; # Not compatible w/ GTX-1050 - package = config.boot.kernelPackages.nvidiaPackages.stable; # Still good for 1050 - forceFullCompositionPipeline = true; # Enables vsync - }; - - system.stateVersion = "24.11"; -} diff --git a/modules/hosts/optiplex/hardware-configuration.nix b/modules/hosts/optiplex/hardware-configuration.nix deleted file mode 100644 index 3d9651e..0000000 --- a/modules/hosts/optiplex/hardware-configuration.nix +++ /dev/null @@ -1,45 +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 = [ "xhci_pci" "ahci" "nvme" "firewire_ohci" "usbhid" "usb_storage" "sd_mod" "sr_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/a9d54117-31f6-4cad-b1b2-250f6bfd7808"; - fsType = "btrfs"; - options = [ "subvol=@" ]; - }; - - fileSystems."/home" = - { device = "/dev/disk/by-uuid/a9d54117-31f6-4cad-b1b2-250f6bfd7808"; - fsType = "btrfs"; - options = [ "subvol=@home" ]; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/6987-81B6"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - swapDevices = [ ]; - - # 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..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.eno1.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/modules/hosts/optiplex/home.nix b/modules/hosts/optiplex/home.nix deleted file mode 100644 index ee56dc6..0000000 --- a/modules/hosts/optiplex/home.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: { - imports = [ ../../home ]; - - theme.mint.theme.color = "Dark-Green"; - theme.mint.icons.color = "Green"; - wallpapers.enable = true; -} diff --git a/modules/hosts/poweredge/configuration.nix b/modules/hosts/poweredge/configuration.nix deleted file mode 100644 index 08e392d..0000000 --- a/modules/hosts/poweredge/configuration.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ config, lib, pkgs, ... }: { - imports = [ ./hardware-configuration.nix ]; - - # ZFS bootloader - bootloader.loader = "grub"; - bootloader.mode = "efi"; - boot.loader.grub = { - zfsSupport = true; - efiInstallAsRemovable = true; - mirroredBoots = [ - { devices = [ "nodev" ]; path = "/boot"; } - ]; - }; - - # Disable suspend - suspend.enable = false; - - system.stateVersion = "25.05"; -} diff --git a/modules/nixos/archetypes/collections/bluetooth.nix b/modules/nixos/archetypes/collections/bluetooth.nix deleted file mode 100644 index 749a9f1..0000000 --- a/modules/nixos/archetypes/collections/bluetooth.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.bluetooth; -in { - options._archetypes.collections.bluetooth = { - enable = lib.mkEnableOption "enables bluetooth and blueman"; - }; - - config = lib.mkIf cfg.enable { - hardware.bluetooth.enable = true; - services.blueman.enable = config._archetypes.collections.desktop.utilities.enable; # FIXME - }; -} diff --git a/modules/nixos/archetypes/collections/desktop/cad.nix b/modules/nixos/archetypes/collections/desktop/cad.nix deleted file mode 100644 index 33edcd5..0000000 --- a/modules/nixos/archetypes/collections/desktop/cad.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.desktop.cad; -in { - options._archetypes.collections.desktop.cad = { - enable = lib.mkEnableOption "install cad and 3d printing software"; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - blender - freecad - prusa-slicer - ]; - }; -} diff --git a/modules/nixos/archetypes/collections/desktop/chromium.nix b/modules/nixos/archetypes/collections/desktop/chromium.nix deleted file mode 100644 index b4638f0..0000000 --- a/modules/nixos/archetypes/collections/desktop/chromium.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.desktop.chromium; -in { - options._archetypes.collections.desktop.chromium = { - enable = lib.mkEnableOption "install chromium browser"; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.ungoogled-chromium; - description = "chromium package to install"; - }; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = [ - cfg.package - ]; - }; -} diff --git a/modules/nixos/archetypes/collections/desktop/crypto.nix b/modules/nixos/archetypes/collections/desktop/crypto.nix deleted file mode 100644 index f90919e..0000000 --- a/modules/nixos/archetypes/collections/desktop/crypto.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.desktop.crypto; -in { - options._archetypes.collections.desktop.crypto = { - enable = lib.mkEnableOption "install crypto wallets"; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - sparrow - ]; - }; -} diff --git a/modules/nixos/archetypes/collections/desktop/default.nix b/modules/nixos/archetypes/collections/desktop/default.nix deleted file mode 100644 index bbca8df..0000000 --- a/modules/nixos/archetypes/collections/desktop/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ - imports = [ - ./cad.nix - ./chromium.nix - ./crypto.nix - ./extra.nix - ./firefox.nix - ./graphics.nix - ./office.nix - ./utilities.nix - ./xserver.nix - ]; -} diff --git a/modules/nixos/archetypes/collections/desktop/extra.nix b/modules/nixos/archetypes/collections/desktop/extra.nix deleted file mode 100644 index 699b20f..0000000 --- a/modules/nixos/archetypes/collections/desktop/extra.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.desktop.extraUtilities; -in { - options._archetypes.collections.desktop.extraUtilities = { - enable = lib.mkEnableOption "install extra desktop utilities"; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - jellyfin-mpv-shim - qbittorrent - qdirstat - remmina - ]; - }; -} diff --git a/modules/nixos/archetypes/collections/desktop/firefox.nix b/modules/nixos/archetypes/collections/desktop/firefox.nix deleted file mode 100644 index 02656f6..0000000 --- a/modules/nixos/archetypes/collections/desktop/firefox.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.desktop.firefox; -in { - options._archetypes.collections.desktop.firefox = { - enable = lib.mkEnableOption "install firefox"; - }; - - config = lib.mkIf cfg.enable { - programs.firefox.enable = true; - }; -} - diff --git a/modules/nixos/archetypes/collections/desktop/graphics.nix b/modules/nixos/archetypes/collections/desktop/graphics.nix deleted file mode 100644 index f4242d1..0000000 --- a/modules/nixos/archetypes/collections/desktop/graphics.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.desktop.graphics; -in { - options._archetypes.collections.desktop.graphics = { - enable = lib.mkEnableOption "install graphic design software"; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - blender - geeqie - gimp3 - inkscape - ]; - }; -} diff --git a/modules/nixos/archetypes/collections/desktop/office.nix b/modules/nixos/archetypes/collections/desktop/office.nix deleted file mode 100644 index 23e6862..0000000 --- a/modules/nixos/archetypes/collections/desktop/office.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.desktop.office; -in { - options._archetypes.collections.desktop.office = { - enable = lib.mkEnableOption "install office software"; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - hunspell # Spell checking in libreoffice - hunspellDicts.en_US - kdePackages.okular - libreoffice - pdfchain - thunderbird - ]; - }; -} diff --git a/modules/nixos/archetypes/collections/desktop/utilities.nix b/modules/nixos/archetypes/collections/desktop/utilities.nix deleted file mode 100644 index 43d4973..0000000 --- a/modules/nixos/archetypes/collections/desktop/utilities.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.desktop.utilities; -in { - options._archetypes.collections.desktop.utilities = { - enable = lib.mkEnableOption "install basic desktop utilities"; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - arandr - dmenu - libnotify - lowbat - mpv - pavolctld - pavucontrol - pcmanfm - redshift - scrot - st - sxiv - wpa_supplicant_gui - zathura - ]; - - programs.localsend.enable = true; # Installs & opens firewall - services.gvfs.enable = true; # GVfs allows for mounting drives in a graphical file manager - }; -} diff --git a/modules/nixos/archetypes/collections/desktop/xserver.nix b/modules/nixos/archetypes/collections/desktop/xserver.nix deleted file mode 100644 index 4cbdae8..0000000 --- a/modules/nixos/archetypes/collections/desktop/xserver.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.desktop.xserver; -in { - options._archetypes.collections.desktop.xserver = { - enable = lib.mkEnableOption "installs xserver"; - utilities.enable = lib.mkEnableOption "installs basic xserver utilities"; - }; - - config = lib.mkIf cfg.enable { - services.xserver.enable = true; - services.xserver.displayManager.startx.enable = true; - services.libinput.enable = true; # Enable touchpad support - - # Install basic X utilities - environment.systemPackages = with pkgs; lib.optionals cfg.utilities.enable [ - unclutter - xcape - xclip - xdotool - xorg.setxkbmap - xorg.xinput - xorg.xkill - xorg.xrandr - xorg.xset - xwallpaper - ]; - - # Enable TearFree option by default - # Not all video drivers support this option - services.xserver.deviceSection = '' - Option "TearFree" "true" - ''; - }; -} diff --git a/modules/nixos/archetypes/collections/development/default.nix b/modules/nixos/archetypes/collections/development/default.nix deleted file mode 100644 index 87fe2d2..0000000 --- a/modules/nixos/archetypes/collections/development/default.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.development; - hugoFirewallPort = 1313; -in { - imports = [ - ./docker.nix - ]; - - options._archetypes.collections.development = { - utilities.enable = lib.mkEnableOption "install basic dev utilities"; - android.enable = lib.mkEnableOption "install android dev tools"; - c.enable = lib.mkEnableOption "install c dev tools"; - lua.enable = lib.mkEnableOption "install lua dev tools"; - web = { - hugo = { - enable = lib.mkEnableOption "install hugo"; - openFirewall = lib.mkEnableOption "open the port ${hugoFirewallPort} for viewing content from hugo serve on other devices"; - }; - node.enable = lib.mkEnableOption "install node"; - }; - }; - - config = { - environment.systemPackages = with pkgs; [ - git - python3 - ] ++ lib.optionals cfg.android.enable [ - #adb-sync - android-tools - ] ++ lib.optionals cfg.c.enable [ - gcc - git - gnumake - pkg-config - ] ++ lib.optionals cfg.lua.enable [ - lua - ] ++ lib.optionals cfg.web.hugo.enable [ - hugo - ] ++ lib.optionals cfg.web.node.enable [ - nodejs - ]; - - networking.firewall.allowedTCPPorts = lib.mkIf cfg.web.hugo.openFirewall [ hugoFirewallPort ]; - }; -} diff --git a/modules/nixos/archetypes/collections/development/docker.nix b/modules/nixos/archetypes/collections/development/docker.nix deleted file mode 100644 index 629dff3..0000000 --- a/modules/nixos/archetypes/collections/development/docker.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.development.docker; -in { - options._archetypes.collections.development.docker = { - enable = lib.mkEnableOption "enables docker"; - btrfsSupport = lib.mkOption { - type = lib.types.bool; - default = true; - description = "Changes docker storageDriver to btrfs."; - }; - }; - - config = lib.mkIf cfg.enable { - virtualisation.docker = { - enable = true; - storageDriver = lib.mkIf cfg.btrfsSupport "btrfs"; - }; - - environment.systemPackages = with pkgs; [ - docker-compose - ]; - }; -} diff --git a/modules/nixos/archetypes/collections/fonts.nix b/modules/nixos/archetypes/collections/fonts.nix deleted file mode 100644 index 136e31b..0000000 --- a/modules/nixos/archetypes/collections/fonts.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.fonts; -in { - options._archetypes.collections.fonts = { - enable = lib.mkEnableOption "enables fonts"; - }; - - config = lib.mkIf cfg.enable { - fonts.packages = with pkgs; [ - commit-mono - inter - nerd-fonts.jetbrains-mono - tamzen - ]; - }; -} diff --git a/modules/nixos/archetypes/collections/utilities.nix b/modules/nixos/archetypes/collections/utilities.nix deleted file mode 100644 index 85763a4..0000000 --- a/modules/nixos/archetypes/collections/utilities.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ pkgs, ... }: { - environment.systemPackages = with pkgs; [ - crazydiskinfo - dash # TODO should be default /bin/sh - entr - fastfetch - ffmpeg - htop - jq - light - lm_sensors - mediainfo - neovim - nmap - openssl - p7zip - powertop - pv - rsync - screen - smartmontools - sslscan - stress - testdisk - tmux - uhubctl - vimv-rs - wget - wireguard-tools - xxHash - yt-dlp - ]; - - services.gpm.enable = true; -} diff --git a/modules/nixos/archetypes/collections/virtualization.nix b/modules/nixos/archetypes/collections/virtualization.nix deleted file mode 100644 index fda0e48..0000000 --- a/modules/nixos/archetypes/collections/virtualization.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config._archetypes.collections.virtualization; -in { - options._archetypes.collections.virtualization = { - enable = lib.mkEnableOption "enables virtualization and virt-manager"; - }; - - config = lib.mkIf cfg.enable { - virtualisation = { - spiceUSBRedirection.enable = true; - libvirtd.enable = true; - # Enable efi support with ovmf firmware - libvirtd.qemu = { - package = pkgs.qemu_kvm; - runAsRoot = true; - swtpm.enable = true; - ovmf.enable = true; - }; - }; - programs.virt-manager.enable = config._archetypes.collections.desktop.utilities.enable; # FIXME - }; -} diff --git a/modules/nixos/archetypes/profiles/desktop/default.nix b/modules/nixos/archetypes/profiles/desktop/default.nix deleted file mode 100644 index d9a7dc7..0000000 --- a/modules/nixos/archetypes/profiles/desktop/default.nix +++ /dev/null @@ -1,53 +0,0 @@ -{ lib, config, pkgs, ... }: let - mkDesktop = lib.mkOverride 920; - cfg = config._archetypes.profiles.desktop; -in { - options._archetypes.profiles.desktop = { - enable = lib.mkEnableOption "enable desktop profile"; - }; - - config = lib.mkIf cfg.enable { - _archetypes.collections = { - desktop = { - utilities.enable = mkDesktop true; - firefox.enable = mkDesktop true; - xserver = { - enable = mkDesktop true; - utilities.enable = mkDesktop true; - }; - }; - development = { - utilities.enable = mkDesktop true; - }; - fonts.enable = mkDesktop true; - }; - - _archetypes.users.primary = { - enable = mkDesktop true; - }; - - security = { - _doas.enable = mkDesktop true; - }; - - programs = { - _ddcutil.enable = mkDesktop true; - _home-manager.enable = mkDesktop true; - }; - - services = { - xserver = { - windowManager._awesome.enable = mkDesktop true; - }; - _pipewire.enable = mkDesktop true; - _printing.enable = mkDesktop true; - _ssh.enable = mkDesktop true; - tlp.enable = mkDesktop true; - - # Ensure video group can change backlight - udev.extraRules = '' - SUBSYSTEM=="backlight", ACTION=="add", RUN+="${pkgs.coreutils}/bin/chgrp video /sys/class/backlight/%k/brightness", RUN+="${pkgs.coreutils}/bin/chmod g+w /sys/class/backlight/%k/brightness" - ''; - }; - }; -} diff --git a/modules/nixos/archetypes/profiles/headless/default.nix b/modules/nixos/archetypes/profiles/headless/default.nix deleted file mode 100644 index ef17db0..0000000 --- a/modules/nixos/archetypes/profiles/headless/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ lib, config, ... }: let - mkHeadless = lib.mkOverride 910; - cfg = config._archetypes.profiles.headless; -in { - options._archetypes.profiles.headless = { - enable = lib.mkEnableOption "enable headless profile"; - }; - - config = lib.mkIf cfg.enable { - _archetypes.collections = { - development = { - utilities.enable = mkHeadless true; - }; - }; - - _archetypes.users = { - primary.enable = mkHeadless true; - }; - - security = { - _doas.enable = mkHeadless true; - }; - - programs = { - _ddcutil.enable = mkHeadless true; - }; - - services = { - _ssh.enable = mkHeadless true; - }; - }; -} diff --git a/modules/nixos/archetypes/tjkeller/default.nix b/modules/nixos/archetypes/tjkeller/default.nix deleted file mode 100644 index 6a9bbd9..0000000 --- a/modules/nixos/archetypes/tjkeller/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - imports = [ - ./hosts.nix - ./localization.nix - ./nas.nix - ./printing.nix - ./user.nix - ./wifi.nix - ]; -} diff --git a/modules/nixos/archetypes/tjkeller/hosts.nix b/modules/nixos/archetypes/tjkeller/hosts.nix deleted file mode 100644 index 66c6ccc..0000000 --- a/modules/nixos/archetypes/tjkeller/hosts.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - networking.hosts = { - "192.168.1.9" = [ "optiplex" ]; - "192.168.1.30" = [ "localgit" ]; - "192.168.1.11" = [ "truenas-home" ]; - "192.168.77.11" = [ "truenas-office" ]; - "192.168.77.8" = [ "publicgit" "tjkeller" ]; - "192.168.77.3" = [ "devel" ]; - "173.9.253.3" = [ - "git.tjkeller.xyz" - "piped.tjkeller.xyz" - "search.tjkeller.xyz" - "tjkeller.xyz" - ]; - }; -} diff --git a/modules/nixos/archetypes/tjkeller/localization.nix b/modules/nixos/archetypes/tjkeller/localization.nix deleted file mode 100644 index 8313f07..0000000 --- a/modules/nixos/archetypes/tjkeller/localization.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - time.timeZone = "America/Chicago"; - i18n.defaultLocale = "en_US.UTF-8"; - services.xserver.xkb.layout = "us"; -} diff --git a/modules/nixos/archetypes/tjkeller/nas.nix b/modules/nixos/archetypes/tjkeller/nas.nix deleted file mode 100644 index 1ed0ca3..0000000 --- a/modules/nixos/archetypes/tjkeller/nas.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ lib, config, ... } : -let - cfg = config._archetypes.tjkeller.nas; - mkNetworkFileSystem = device: automount: { - device = "${device}"; - fsType = "nfs"; - options = [ "defaults" ] ++ lib.optionals (!automount) [ "noauto" ]; - }; -in { - options._archetypes.tjkeller.nas = { - enable = lib.mkEnableOption "enable network shares"; - home = { - enable = lib.mkEnableOption "enable home network shares"; - automount = lib.mkEnableOption "automount home network shares"; - }; - office = { - enable = lib.mkEnableOption "enable office network shares"; - automount = lib.mkEnableOption "automount home network shares"; - }; - }; - - config = lib.mkIf cfg.enable { - fileSystems = lib.optionalAttrs cfg.home.enable { - "/media/Storage/Media" = mkNetworkFileSystem "truenas-home:/mnt/Storage/Media" cfg.home.automount; - "/media/Storage/Backups" = mkNetworkFileSystem "truenas-home:/mnt/Storage/Backups" cfg.home.automount; - "/media/Storage/Tapes" = mkNetworkFileSystem "truenas-home:/mnt/Storage/Backups/Tapes" cfg.home.automount; - "/media/Family Photos" = mkNetworkFileSystem "truenas-home:/mnt/Media/Photos" cfg.home.automount; - } // lib.optionalAttrs cfg.office.enable { - "/media/chexx/chexx" = mkNetworkFileSystem "truenas-office:/mnt/Storage/chexx" cfg.office.automount; - "/media/chexx/tkdocs" = mkNetworkFileSystem "truenas-office:/mnt/Storage/Users/Tim-Keller" cfg.office.automount; - "/media/chexx/scans" = mkNetworkFileSystem "truenas-office:/mnt/Storage/Scans" cfg.office.automount; - }; - # TODO auto mkdirz - }; -} diff --git a/modules/nixos/archetypes/tjkeller/printing.nix b/modules/nixos/archetypes/tjkeller/printing.nix deleted file mode 100644 index d5cceab..0000000 --- a/modules/nixos/archetypes/tjkeller/printing.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ lib, config, pkgs, ... }: { - config = lib.mkIf config.services.printing.enable { - # Printer drivers - services.printing.drivers = [ - pkgs.epson-escpr2 - pkgs.workcentre-7800-series - ]; - - # Scanning programs - environment.systemPackages = with pkgs; [ - epsonscan2 - ]; - - # Printers - networking.hosts = { - "192.168.1.35" = [ "Epson_ET-8500" ]; - "192.168.77.40" = [ "Xerox_WorkCentre_7855" ]; - }; - - # Add printers to cups - hardware.printers.ensurePrinters = [ - { - name = "Epson_ET-8500"; - description = "Epson ET-8500"; - location = "Home"; - deviceUri = "ipp://Epson_ET-8500:631/ipp/print"; - model = "epson-inkjet-printer-escpr2/Epson-ET-8500_Series-epson-escpr2-en.ppd"; - } - #{ - # name = "Xerox_WorkCentre_7855"; - # description = "Xerox WorkCentre 7855"; - # location = "Office"; - # deviceUri = "ipp://Xerox_WorkCentre_7855:631/ipp/print"; - # model = "everywhere IPP Everywhere"; - #} - ]; - hardware.printers.ensureDefaultPrinter = "Epson_ET-8500"; - }; -} diff --git a/modules/nixos/archetypes/tjkeller/resources/secrets/hashed-root-password.yaml b/modules/nixos/archetypes/tjkeller/resources/secrets/hashed-root-password.yaml deleted file mode 100644 index a42fd42..0000000 --- a/modules/nixos/archetypes/tjkeller/resources/secrets/hashed-root-password.yaml +++ /dev/null @@ -1,25 +0,0 @@ -hashed-root-password: ENC[AES256_GCM,data:7Qgoeb/6JPNupkHCBEzCs0FMP2cDEw972bjCRWeMrBrAMZzLsZc3Mbv03s1zLztUp6Ie93R5lVsamxKPUnaPt+Tnr/l+0E9aTmt7j7L6UzmWr12nj3FHxxTSU9ief6+ioIk+S4eICJspIQ==,iv:VoWP4qBCGzuYRpQw4nilUXByJ+ZwyZR/BdKowi+53DM=,tag:x6A00VCm8BEOhtv/WySXrQ==,type:str] -sops: - age: - - recipient: age1w80rc0dnuu8nw99gw64c596qqetm78jdnsqajr0u7ephykekr39qfz8vnv - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2Z3dTbW1GUzgyRUwyZGtF - alZSeFBmdEdhNER3UEtGRGd4MnliK1l1eGpJCm80SHFNZ3NZOTNxVkM4R3ZLY005 - OFVtUGN3OXZJblRxOFNMOFhsV25CS0EKLS0tIEE5SG5NekxWbytXY2xNeUN6TWhG - RldJZms3RDFuRk40ck42Mkd5RTd4YVUKgyWE8Cs0yLO/82w2muGWTlcjY86BVSUy - bFeIcQT33dEPiNUmynTqEGpN2NVQbfVDw17QbA9GNhGClanTTXmX4A== - -----END AGE ENCRYPTED FILE----- - - recipient: age1f0tmpy2nam58skmznjyqd3zf54rxtfrk6fda0vlpq9y3yg6wac7sjf0vja - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxcUprWjBXTVlidTRwMEZ6 - WHE4dWp6OWtybkFCaTkyY2JyaWYrRHNhZWtNCi9xamwreEsyVFdnWWhJeUVsdUpT - UHlkRVJZZTEvMDluTWNJSnRSUXN6Q0kKLS0tIHNsQk92SUd2ekowY0hvQi9LNjIx - Q0oxVFNtRkpZTlVHeEY3YXFoSlc4Zk0K7RaqH/Qf2dTPBuCz9DH0xgU+Tq8ATKUq - tfAuuAU9HBtLFiZjhWsZmj5XUy5Z18IiUKDIxlw41mNtbcsUnjm30w== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-07-17T22:34:07Z" - mac: ENC[AES256_GCM,data:B95HuJC2o8B+P1f9kAtJTcSty7YSAByuqe/Xs6ce6780p05FuzWM5X9bwvwsYXngGNKqCHksWf50UXzJ3eyc6y4ISxdxljAv2FmJFKw4NkfGaOMiRLlGPMn1uFpOtkRT+qL0+mupWG/Ap3zcpbxjsDx46PUur+e6yRxlAHw8mGw=,iv:DYobhWK+4+7vOog7BrBASiHrEzzz0P6zqgWxexfcLG8=,tag:skGwUpDEB8e3TCjrxs5peA==,type:str] - unencrypted_suffix: _unencrypted - version: 3.10.2 diff --git a/modules/nixos/archetypes/tjkeller/resources/secrets/wpa_supplicant-conf.yaml b/modules/nixos/archetypes/tjkeller/resources/secrets/wpa_supplicant-conf.yaml deleted file mode 100644 index 2fd7a0e..0000000 --- a/modules/nixos/archetypes/tjkeller/resources/secrets/wpa_supplicant-conf.yaml +++ /dev/null @@ -1,16 +0,0 @@ -wpa_supplicant-conf: ENC[AES256_GCM,data:QoHQhTuEsSCW/K2ArOzNMfpSV7RtyTgezg4bM6eyNwhBhuJ/fCExzrniZtFzZ3zfs+ROFOYYxkx5lu4N/AQ6xEdCjJ3DYKHpeveqQ3GcWaldDr6aUDxLnBmLGBgSskGoOOANCwGvXGtFsChlCah02/W3YIhLWKIC1pfw1t9ANw9ErtLt7Fxt8TphJ1n9KdCXCJCMFrDjWDTrvbDzrvkJh6EGJIoaXuJSN+9asKrFvTwXyvHPbJmw8ZRbYgtlJtv5c1Q+PZoMtEeBRI/q2y/xUX5nvhnyy3HO1CaZPq+2XP9w+Zz90PyehVvbFVSl3V3Wg3rg9uu/c1rRGgfNkVJSHdhN+7nWYobSI28uoA8L9oXono9mNYwfcN2c4R6xwW9yOH72KabKRbD0Qq0mXcwNjU0HNneqvnMFURbDVstWmKt39gHg2xoZkG774EEDdXBAmKe5nbj0wVk8TBPWPcyR8gQ3uQrXPElqC7CWHMvajzi/hq02gmzkq1DAiheVWHxVmSQUUP3M52vvFBDdWip4X7IM3r5H4uBmcF6wGHl7JS+okDno5BuInIXvrApDV3rTqnam7YeQZao9pbx8WRWg/ZQFUysiXf9tcAl4ror71+SLKa5MfeP9AV431DbcsrIS1XQ=,iv:7qdltuNvesslz32SfEXqu9WFu2uGOGg1sjfskfqfXnk=,tag:N1RhL1M9YtDlvxLBRC2gAg==,type:str] -sops: - age: - - recipient: age1w80rc0dnuu8nw99gw64c596qqetm78jdnsqajr0u7ephykekr39qfz8vnv - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxdXBUWXEvRU85Tk1lNWgz - ZHpENjdudmRuaEJIeVRHOHlDbWNzK0tQMGs4CmV6MVBpdE5PMTBWMm1PcDVFQ2VM - b0IwWDFxLy8xYUcxRVZFSEsyYlBFS1UKLS0tIHpCbDQ0a29TZlVFTGp4aXJCSmJ4 - ZGxqMFQ1NDk1OHJIOUd0cVV0dzNNQlkKzYX36u0rEq6dMTCJf6OON6LzcEEnAB5A - +M9t3OKUUNtwgksjBUEwqBLJ1sU9amijpK63GUxwp74YDtsb0YXHiw== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-07-17T22:33:44Z" - mac: ENC[AES256_GCM,data:leJsAdcWFE0EA1syXfd7yDu1Ct+vTkKiHUEc46O31uUeaWVFwgH8EKC0ImqiHMgbDJv+a9UHm7GtsWy1aMQNVRBXL3R2HbNQkOqGkIIdGsrrbjslQl8UwI7wx1g2P3ORhlGRYXTscDUl53+e4i3YrYOEDDPL5EAWuQEWldJXLZc=,iv:banL6qqV2EqfZFKHn5dawUq95Ima06z8H6Kso1qRdcA=,tag:g6M95M6bT4UPTfiEZT4ljw==,type:str] - unencrypted_suffix: _unencrypted - version: 3.10.2 diff --git a/modules/nixos/archetypes/tjkeller/user.nix b/modules/nixos/archetypes/tjkeller/user.nix deleted file mode 100644 index 2695549..0000000 --- a/modules/nixos/archetypes/tjkeller/user.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ lib, config, pkgs, userDetails, ... }: let - cfg = config._archetypes.tjkeller.setPasswords; - hashedPasswordFile = config.sops.secrets.hashed-root-password.path; -in { - options._archetypes.tjkeller.setPasswords = { - enable = lib.mkEnableOption "set users password. requires hashed root password from sops"; - }; - - config = lib.mkIf cfg.enable { - # Load hashed root password secret - sops.secrets.hashed-root-password = { - sopsFile = ./resources/secrets/hashed-root-password.yaml; - neededForUsers = true; - }; - - # Apply password file - users.users = { - root = { inherit hashedPasswordFile; }; - ${userDetails.username} = lib.mkIf config._archetypes.users.primary.enable { inherit hashedPasswordFile; }; - }; - }; -} diff --git a/modules/nixos/archetypes/tjkeller/wifi.nix b/modules/nixos/archetypes/tjkeller/wifi.nix deleted file mode 100644 index 32b6ef8..0000000 --- a/modules/nixos/archetypes/tjkeller/wifi.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ lib, config, ... }: let - cfg = config._archetypes.tjkeller.wifi; -in { - options._archetypes.tjkeller.wifi = { - enable = lib.mkEnableOption "enables wifi"; - }; - - config = lib.mkIf cfg.enable { - networking.wireless = { - enable = true; # Enables wireless support via wpa_supplicant. - userControlled.enable = true; - allowAuxiliaryImperativeNetworks = true; # Networks defined in aux imperitive networks (/etc/wpa_supplicant.conf) - }; - - # Load wpa_supplicant.conf secret config - sops.secrets.wpa_supplicant-conf = { - sopsFile = ./resources/secrets/wpa_supplicant-conf.yaml; - }; - - # Link /etc/wpa_supplicant.conf -> secret config - environment.etc."wpa_supplicant.conf" = { - source = config.sops.secrets.wpa_supplicant-conf.path; - }; - - # This service is a workaround to ensure that secrets are available on - # reboot when the secret keys are on a separate subvolume - systemd.services.npcnix-force-rebuild-sops-hack = { - wantedBy = [ "multi-user.target" ]; - before = [ "wpa_supplicant.service" ]; - serviceConfig = { - ExecStart = "/run/current-system/activate"; - Type = "oneshot"; - Restart = "on-failure"; # because oneshot - RestartSec = "10s"; - }; - }; - }; -} diff --git a/modules/nixos/archetypes/users/primary.nix b/modules/nixos/archetypes/users/primary.nix deleted file mode 100644 index a29c3b8..0000000 --- a/modules/nixos/archetypes/users/primary.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ lib, config, pkgs, userDetails, ... }: let - cfg = config._archetypes.users.primary; -in { - options._archetypes.users.primary = { - enable = lib.mkEnableOption "create primary user"; - autologin.enable = lib.mkEnableOption "enables getty automatic login"; - }; - - config = lib.mkIf cfg.enable { - # Enable zsh - programs.zsh.enable = true; - - # Setup normal user - users.users.${userDetails.username} = { - home = userDetails.home; - description = userDetails.fullname; - isNormalUser = true; - shell = pkgs.zsh; - extraGroups = [ - "nixbld" - "video" - "wheel" - ] ++ lib.optionals config.hardware.i2c.enable [ - "i2c" - ] ++ lib.optionals config.virtualisation.libvirtd.enable [ - "libvirtd" - ] ++ lib.optionals config.virtualisation.docker.enable [ - "docker" - ]; - }; - - # Configure automatic login with getty - services.getty = lib.mkIf cfg.autologin.enable { - autologinUser = userDetails.username; - }; - }; -} diff --git a/modules/nixos/bootloader.nix b/modules/nixos/bootloader.nix deleted file mode 100644 index bb807cf..0000000 --- a/modules/nixos/bootloader.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ lib, config, ... }: let - cfg = config.boot._loader; - usingEfi = cfg.mode == "efi"; - usingBios = cfg.mode == "bios"; -in { - options.boot._loader = { - enable = lib.mkEnableOption "enable unified bootloader config"; - loader = lib.mkOption { - type = lib.types.enum [ "grub" "systemd-boot" ]; - default = "systemd-boot"; - description = "whether to install grub or systemd-boot as the bootloader"; - }; - mode = lib.mkOption { - type = lib.types.enum [ "efi" "bios" ]; - default = "efi"; - description = "whether to install the bootloader in efi or bios mode"; - }; - grub = { - biosDevice = lib.mkOption { - type = lib.types.str; - description = "device to install grub on"; - }; - }; - memtest86.enable = lib.mkEnableOption "make Memtest86+ available from the bootloader"; - }; - - config = lib.mkIf cfg.enable { - boot.loader = { - grub = lib.mkIf (cfg.loader == "grub") { - enable = true; - efiSupport = usingEfi; - efiInstallAsRemovable = usingEfi; - device = if usingBios then cfg.grub.biosDevice else "nodev"; - enableCryptodisk = true; - memtest86.enable = cfg.memtest86.enable; - }; - systemd-boot = lib.mkIf (cfg.loader == "systemd-boot") { - enable = true; - editor = false; - memtest86.enable = cfg.memtest86.enable; - }; - efi = lib.mkIf usingEfi { - efiSysMountPoint = lib.mkIf (cfg.loader == "grub") "/boot/efi"; - canTouchEfiVariables = true; - }; - }; - }; -} diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix deleted file mode 100644 index 59364f7..0000000 --- a/modules/nixos/default.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - imports = [ - ./archetypes/collections/bluetooth.nix - ./archetypes/collections/desktop - ./archetypes/collections/development - ./archetypes/collections/fonts.nix - ./archetypes/collections/utilities.nix - ./archetypes/collections/virtualization.nix - - ./archetypes/profiles/desktop - ./archetypes/profiles/headless - - ./archetypes/users/primary.nix - - ./programs/awesome.nix - ./programs/ddcutil.nix - ./programs/home-manager.nix - - ./services/cgit.nix - ./services/gitea.nix - ./services/searxng.nix - - ./bootloader.nix - ./doas.nix - ./filesystems.nix - ./hosts.nix - ./net-iface-labels.nix - ./nix.nix - ./pipewire.nix - ./powerkeys.nix - ./printing.nix - ./secrets.nix - ./ssh.nix - ./sudo.nix - ./suspend.nix - ]; -} diff --git a/modules/nixos/doas.nix b/modules/nixos/doas.nix deleted file mode 100644 index aeed170..0000000 --- a/modules/nixos/doas.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ lib, config, ... }: let - cfg = config.security._doas; -in { - options.security._doas = { - enable = lib.mkEnableOption "enables doas"; - }; - - config = lib.mkIf cfg.enable { - security.doas = { - enable = true; - wheelNeedsPassword = false; - extraRules = [ - { keepEnv = true; } - ]; - }; - }; -} diff --git a/modules/nixos/filesystems.nix b/modules/nixos/filesystems.nix deleted file mode 100644 index 00ab409..0000000 --- a/modules/nixos/filesystems.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ pkgs, ... }: { - environment.systemPackages = with pkgs; [ - cryptsetup - exfat - ntfs3g - ]; -} diff --git a/modules/nixos/hosts.nix b/modules/nixos/hosts.nix deleted file mode 100644 index a87f3b4..0000000 --- a/modules/nixos/hosts.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ hostname, ... }: { - networking.hostName = hostname; # From flake.nix - environment.etc.hosts.mode = "0644"; # Allow temporary imperative modifications -} diff --git a/modules/nixos/net-iface-labels.nix b/modules/nixos/net-iface-labels.nix deleted file mode 100644 index b7ac655..0000000 --- a/modules/nixos/net-iface-labels.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ config, lib, ... }: let - cfg = config.networking._interfaceLabels; - validMac = str: builtins.match ''^[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}$'' str != null; - macAddressType = lib.types.str // { - check = validMac; - description = "a mac address (xx:xx:xx:xx:xx:xx)"; - }; -in { - options.networking._interfaceLabels = { - enable = lib.mkEnableOption "manually label network interfaces"; - interfaces = lib.mkOption { - type = lib.types.attrsOf macAddressType; - default = {}; - example = { - "lan0" = "00:11:22:33:44:55"; - "lan1" = "66:77:88:99:AA:BB"; - }; - description = "label network interfaces by their mac address"; - }; - }; - - config = lib.mkIf cfg.enable { - networking.usePredictableInterfaceNames = false; - services.udev.extraRules = lib.concatStringsSep "\n" ( - lib.mapAttrsToList (name: mac: ''ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="${mac}", NAME="${name}"'') cfg.interfaces - ); - }; -} diff --git a/modules/nixos/nix.nix b/modules/nixos/nix.nix deleted file mode 100644 index ff8dd28..0000000 --- a/modules/nixos/nix.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - nix.settings = { - experimental-features = [ "nix-command" "flakes" ]; - use-xdg-base-directories = true; - }; - nix.gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 30d"; - }; -} diff --git a/modules/nixos/pipewire.nix b/modules/nixos/pipewire.nix deleted file mode 100644 index be3eaf4..0000000 --- a/modules/nixos/pipewire.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ lib, config, ... }: let - cfg = config.services._pipewire; -in { - options.services._pipewire = { - enable = lib.mkEnableOption "enables pipewire"; - }; - - config = lib.mkIf cfg.enable { - services.pipewire = { - enable = true; - pulse.enable = true; - }; - }; -} diff --git a/modules/nixos/powerkeys.nix b/modules/nixos/powerkeys.nix deleted file mode 100644 index fd4aa00..0000000 --- a/modules/nixos/powerkeys.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - services.logind = { - hibernateKey = "suspend"; - powerKey = "ignore"; - powerKeyLongPress = "poweroff"; - }; -} diff --git a/modules/nixos/printing.nix b/modules/nixos/printing.nix deleted file mode 100644 index a6df279..0000000 --- a/modules/nixos/printing.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ lib, config, ... }: let - cfg = config.services._printing; -in { - options.services._printing = { - enable = lib.mkEnableOption "enables printing and avahi service"; - }; - - config = lib.mkIf cfg.enable { - services.printing.enable = true; - - services.avahi = { - enable = true; - nssmdns4 = true; - openFirewall = true; - }; - }; -} - diff --git a/modules/nixos/programs/awesome.nix b/modules/nixos/programs/awesome.nix deleted file mode 100644 index 0856384..0000000 --- a/modules/nixos/programs/awesome.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config.services.xserver.windowManager._awesome; -in { - options.services.xserver.windowManager._awesome = { - enable = lib.mkEnableOption "installs awesome window manager"; - }; - - config = lib.mkIf cfg.enable { - services.xserver.windowManager.awesome = { - enable = true; - noArgb = true; # disables transparency. why not? - luaModules = with pkgs.luajitPackages; [ - lgi - ]; - package = with pkgs; awesome.override { - gtk3Support = true; - gtk3 = gtk3; - lua = luajit; - }; - }; - }; -} diff --git a/modules/nixos/programs/ddcutil.nix b/modules/nixos/programs/ddcutil.nix deleted file mode 100644 index ef1801b..0000000 --- a/modules/nixos/programs/ddcutil.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config.programs._ddcutil; -in { - options.programs._ddcutil = { - enable = lib.mkEnableOption "enables ddcutil and i2c control"; - }; - - config = lib.mkIf cfg.enable { - hardware.i2c.enable = true; - environment.systemPackages = [ pkgs.ddcutil ]; - }; -} diff --git a/modules/nixos/programs/home-manager.nix b/modules/nixos/programs/home-manager.nix deleted file mode 100644 index 49149d3..0000000 --- a/modules/nixos/programs/home-manager.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ pkgs, lib, config, ... }: let - cfg = config.programs._home-manager; -in { - options.programs._home-manager = { - enable = lib.mkEnableOption "enables home-manager"; - }; - - config = lib.mkIf cfg.enable { - # Install home manager - environment.systemPackages = with pkgs; [ home-manager git ]; # Git is needed - - # For home-manager to configure gtk - programs.dconf.enable = lib.mkDefault true; - }; -} diff --git a/modules/nixos/secrets.nix b/modules/nixos/secrets.nix deleted file mode 100644 index 46d8f1e..0000000 --- a/modules/nixos/secrets.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ inputs, config, pkgs, userDetails, ... }: { - imports = [ inputs.sops-nix.nixosModules.sops ]; - - environment.systemPackages = with pkgs; [ age sops ]; - - sops = { - defaultSopsFormat = "yaml"; - age.sshKeyPaths = [ "${userDetails.home}/.ssh/id_ed25519" "/root/.ssh/id_ed25519" ]; - }; -} diff --git a/modules/nixos/services/cgit.nix b/modules/nixos/services/cgit.nix deleted file mode 100644 index 366c1f8..0000000 --- a/modules/nixos/services/cgit.nix +++ /dev/null @@ -1,126 +0,0 @@ -{ lib, pkgs, config, userDetails, ... }: -let - cfg = config.cgit; -in { - options = { - cgit = { - enable = lib.mkEnableOption "enables cgit service"; - hostAddress = lib.mkOption { - type = lib.types.str; - description = "hostAddress for the container"; - default = "10.0.1.1"; - }; - localAddress = lib.mkOption { - type = lib.types.str; - description = "localAddress for the container"; - default = "10.0.1.2"; - }; - rootTitle = lib.mkOption { - type = lib.types.str; - description = "cgit site title"; - default = ""; - }; - rootDesc = lib.mkOption { - type = lib.types.str; - description = "cgit site description"; - default = ""; - }; - extraConfig = lib.mkOption { - type = lib.types.str; - description = "cgitrc lines inserted verbatim at the end"; - default = ""; - }; - }; - }; - - config = lib.mkIf cfg.enable { - # Configure cgit container - containers.cgit = { - autoStart = true; - privateNetwork = true; - hostAddress = cfg.hostAddress; - localAddress = cfg.localAddress; - - specialArgs = { - authorizedKeys = userDetails.sshPublicKeys; - cgitrc = with cfg; { - inherit rootTitle; - inherit rootDesc; - inherit extraConfig; - }; - }; - - config = { lib, config, authorizedKeys, cgitrc, ... }: { - # Create git user for ssh access - users.users.git = { - isNormalUser = true; - home = "/srv/git"; # Serve from git user's home to allow cloning git@cgit:repo - group = "git"; - createHome = true; - homeMode = "750"; # Allow read permissions for group members - shell = pkgs.bash; - openssh.authorizedKeys.keys = authorizedKeys; - }; - users.groups.git.members = [ "lighttpd" ]; # Create the git group and add lighttpd user as a member so /srv/git can be served by cgit - - # Enable git - programs.git.enable = true; - - # Enable ssh service - services.openssh.enable = true; - - # Enable cgit service - services.lighttpd.enable = true; - services.lighttpd.cgit = { - enable = true; - #subdir = ""; # FIXME this does not work for some reason - configText = '' - # Based on joseluisq/alpine-cgit - root-title=${cgitrc.rootTitle} - root-desc=${cgitrc.rootDesc} - - source-filter=${pkgs.cgit}/lib/cgit/filters/syntax-highlighting.py - about-filter=${pkgs.cgit}/lib/cgit/filters/about-formatting.sh - - readme=:README.md - readme=:README.html - readme=:README.txt - readme=:README - readme=:INSTALL.md - readme=:INSTALL.html - readme=:INSTALL.txt - readme=:INSTALL - - # Cache - #cache-root=/var/cache/cgit - #cache-size=2000 - - enable-index-links=1 - enable-index-owner=0 - enable-remote-branches=1 - enable-log-filecount=1 - enable-log-linecount=1 - enable-git-config=1 - snapshots=tar.xz zip - - robots=noindex, nofollow - - virtual-root=/cgit - section-from-path=0 - max-repo-count=100 - scan-path=/srv/git - - # extra config - ${cgitrc.extraConfig} - ''; - }; - - # Networking, etc. - networking.firewall.allowedTCPPorts = [ 80 22 ]; - networking.hostName = "cgit"; - - system.stateVersion = "25.05"; - }; - }; - }; -} diff --git a/modules/nixos/services/gitea.nix b/modules/nixos/services/gitea.nix deleted file mode 100644 index 32c56db..0000000 --- a/modules/nixos/services/gitea.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ lib, pkgs, config, userDetails, ... }: -let - cfg = config.gitea; -in { - options = { - gitea = { - enable = lib.mkEnableOption "enables gitea service"; - hostAddress = lib.mkOption { - type = lib.types.str; - description = "hostAddress for the container"; - default = "10.0.1.1"; - }; - localAddress = lib.mkOption { - type = lib.types.str; - description = "localAddress for the container"; - default = "10.0.1.3"; - }; - }; - }; - - config = lib.mkIf cfg.enable { - containers.gitea = { - autoStart = true; - privateNetwork = true; - hostAddress = cfg.hostAddress; - localAddress = cfg.localAddress; - - config = { lib, config, ... }: { - # Enable gitea service - services.gitea = { - enable = true; - user = "git"; # So ssh cloning uses git@gitea - settings = { - server = { - HTTP_PORT = 3000; # Can't set as 80 without root permissions, use 3000 instead - }; - }; - }; - - # Networking, etc. - # Redirect 80 to 3000 - networking.nftables = { - enable = true; - ruleset = '' - table ip nat { - chain prerouting { - type nat hook prerouting priority 0; - tcp dport 80 redirect to :3000 - } - } - ''; - }; - networking.firewall.allowedTCPPorts = [ 3000 80 22 ]; # Still need to forward 3000 for nftables rule to work - networking.hostName = "gitea"; - - system.stateVersion = "25.05"; - }; - }; - }; -} diff --git a/modules/nixos/services/searxng.nix b/modules/nixos/services/searxng.nix deleted file mode 100644 index 8ed632e..0000000 --- a/modules/nixos/services/searxng.nix +++ /dev/null @@ -1,119 +0,0 @@ -{ pkgs, lib, config, ... }: let - environmentFile = "/run/searx/searxng.env"; - generateEnvironmentFile = '' - umask 077 - echo "SEARXNG_SECRET=$(head -c 56 /dev/urandom | base64)" > ${environmentFile} - ls /run/searx - ''; -in { - options = { - searxng.enable = lib.mkEnableOption "enables searxng service"; - searxng.uwsgi.enable = lib.mkEnableOption "enables searxng uwsgi"; - }; - - config = lib.mkIf config.searxng.enable { - # Generate secret key - systemd.services.searx-environment-file = { - description = "Generate environment file with secret key for searx"; - wantedBy = [ "searx-init.service" ]; - partOf = [ "searx-init.service" ]; - before = [ "searx-init.service" ]; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "searx"; - RuntimeDirectory = "searx"; - RuntimeDirectoryMode = "750"; - ConditionPathExists = "!${environmentFile}"; - }; - script = generateEnvironmentFile; - }; - - # Configure searxng - services.searx = { - enable = true; - redisCreateLocally = true; - package = pkgs.searxng; - inherit environmentFile; # Provides secret key - - # UWSGI configuration - runInUwsgi = config.searxng.uwsgi.enable; - - uwsgiConfig = { - socket = "/run/searx/searx.sock"; - http = ":8888"; - chmod-socket = "660"; - }; - - settings = { - general = { - instance_name = "TJK Search"; - donation_url = "https://tjkeller.xyz"; - enable_metrics = false; - }; - - # Search engine settings - search = { - safe_search = 2; # Strict - autocomplete = ""; - default_lang = "en-US"; - }; - - preferences.lock = [ "safesearch" ]; # Lock safe_search at strict - - # https://docs.searxng.org/admin/plugins.html - enabled_plugins = [ - "Tor check plugin" - "Tracker URL remover" - "Basic Calculator" - "Unit converter plugin" - "Hash plugin" - "Self Information" - "Open Access DOI rewrite" - "Hostnames plugin" - ]; - - hostnames.replace = { - "(.*\.)?youtube\.com$" = "piped.tjkeller.xyz"; - "(.*\.)?youtu\.be$" = "piped.tjkeller.xyz"; - "(.*\.)?reddit\.com$" = "old.reddit.com"; - }; - - # Enable / disabled search engines from default list - engines = lib.mapAttrsToList (name: value: { inherit name; disabled = !value; }) { - # Images - "artic" = false; - "deviantart" = false; - "flickr" = false; - "library of congress" = false; - "openverse" = false; - "pinterest" = false; - "public domain image archive" = false; - "unsplash" = false; - "wallhaven" = false; - "wikicommons.images" = false; - - # Videos - "bitchute" = true; - "dailymotion" = false; - "piped" = false; - "rumble" = true; - "sepiasearch" = false; - "vimeo" = false; - "wikicommons.videos" = false; - - # Music - "piped.music" = false; - - # Files - "1337x" = true; - "annas archive" = true; - "library genesis" = true; - - # Apps - "fdroid" = true; - }; - }; - }; - }; -} diff --git a/modules/nixos/ssh.nix b/modules/nixos/ssh.nix deleted file mode 100644 index 8f81474..0000000 --- a/modules/nixos/ssh.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ lib, config, ... }: let - cfg = config.services._ssh; -in { - options.services._ssh = { - enable = lib.mkEnableOption "enable openssh with X11 forwarding"; - }; - - config = lib.mkIf cfg.enable { - services.openssh = { - enable = true; - settings = { - X11Forwarding = true; - }; - }; - }; -} diff --git a/modules/nixos/sudo.nix b/modules/nixos/sudo.nix deleted file mode 100644 index 5fa2727..0000000 --- a/modules/nixos/sudo.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ lib, config, ... }: let - cfg = config.security._sudo; -in { - options.security._sudo = { - enable = lib.mkEnableOption "enables sudo"; - }; - - #config = lib.mkIf cfg.enable { - config = { # TODO remove once can be built from flake w git - security.sudo = { - enable = true; - wheelNeedsPassword = false; - }; - }; -} diff --git a/modules/nixos/suspend.nix b/modules/nixos/suspend.nix deleted file mode 100644 index 11404de..0000000 --- a/modules/nixos/suspend.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ lib, config, ... }: let - cfg = config.systemd._suspend; -in { - options.systemd._suspend = { - disable = lib.mkEnableOption "disables suspend"; - }; - - config = lib.mkIf cfg.disable { - # Disable suspend targets - systemd.targets = builtins.listToAttrs (map (name: { - inherit name; - value = { - enable = false; - unitConfig.DefaultDependencies = "no"; - }; - }) ["sleep" "suspend" "hibernate" "hybrid-sleep"]); - }; -} diff --git a/modules/overlays/crazydiskinfo/default.nix b/modules/overlays/crazydiskinfo/default.nix deleted file mode 100644 index 61de338..0000000 --- a/modules/overlays/crazydiskinfo/default.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ lib -, cmake -, fetchFromGitHub -, fetchpatch -, libatasmart -, ncurses5 -, stdenv -}: - -stdenv.mkDerivation rec { - pname = "crazydiskinfo"; - version = "1.1.0"; - - src = fetchFromGitHub { - owner = "otakuto"; - repo = pname; - rev = "refs/tags/${version}"; - sha256 = "sha256-+6ShoaggQ256sLSJDj4d16OipUYX/4JjEwLL5hswjiQ="; - }; - - patches = [ - # Patch to fix build warnings - (fetchpatch { - url = "https://github.com/otakuto/crazydiskinfo/compare/1.1.0...8563aa8.diff"; - sha256 = "sha256-z9aOQFsivu6sYgsZBOlnTvqnoR2ro/jyuO/WOimLSXk="; - }) - ]; - - nativeBuildInputs = [ cmake ]; - buildInputs = [ libatasmart ncurses5 ]; - - cmakeFlags = [ "-DCMAKE_INSTALL_PREFIX=$(out)" ]; - - meta = with lib; { - description = "CrazyDiskInfo is an interactive TUI S.M.A.R.T viewer for Unix systems"; - homepage = "https://github.com/otakuto/crazydiskinfo"; - mainProgram = "crazy"; - license = licenses.mit; - maintainers = [ maintainers.tjkeller ]; - }; -} diff --git a/modules/overlays/default.nix b/modules/overlays/default.nix deleted file mode 100644 index 1c0ed23..0000000 --- a/modules/overlays/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ pkgs, ... }: { - nixpkgs.overlays = with pkgs; [ - (final: prev: { - crazydiskinfo = (callPackage ./crazydiskinfo {}); - lowbat = (callPackage ./lowbat {}); - workcentre-7800-series = (callPackage ./xerox-workcentre-7800-series-driver {}); - - # Use my vimv-rs until pr gets merged - vimv-rs = prev.vimv-rs.overrideAttrs (oldAttrs: { - src = fetchFromGitHub { - owner = "tjkeller-xyz"; - repo = "vimv-rs"; - rev = "5deb76fb81dd4acf3c4809087ff3a1d846ab4769"; - sha256 = "sha256-XMn+5mIxSEHaR31ixMi6o7PSkN1iYjDT4aOiQkfEwpA="; - }; - }); - - # Use my tamzen until pr gets merged - tamzen = prev.tamzen.overrideAttrs (oldAttrs: { - src = fetchFromGitHub { - owner = "tjkeller-xyz"; - repo = "tamzen-font"; - rev = "middledot"; - sha256 = "sha256-mVZ8SdYKTdMG1qBKKYdNjuoYvWkEq2ph2O1ztsNJEhs="; - }; - }); - }) - (import ./st/overrides.nix) - (import ./xorg/overrides.nix) - ]; -} diff --git a/modules/overlays/lowbat/default.nix b/modules/overlays/lowbat/default.nix deleted file mode 100644 index 64ec205..0000000 --- a/modules/overlays/lowbat/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ lib -, fetchzip -, glib -, libnotify -, pkg-config -, stdenv -}: - -stdenv.mkDerivation rec { - pname = "lowbat"; - version = "1.2.2"; - - src = fetchzip { - url = "https://git.tjkeller.xyz/${pname}/snapshot/${pname}-${version}.tar.xz"; - sha256 = "sha256-utdcY9qoDcrBWnGC8m/LUsnoxQ0ilssPDF44A6D/C+8="; - }; - - nativeBuildInputs = [ pkg-config ]; - buildInputs = [ libnotify glib ]; - - installFlags = [ "PREFIX=$(out)" ]; - - meta = with lib; { - description = "A minimal battery level monitor daemon, written in C"; - license = licenses.mit; - maintainers = [ maintainers.tjkeller ]; - }; -} diff --git a/modules/overlays/st/overrides.nix b/modules/overlays/st/overrides.nix deleted file mode 100644 index 2d0a37e..0000000 --- a/modules/overlays/st/overrides.nix +++ /dev/null @@ -1,19 +0,0 @@ -final: prev: { - st = prev.st.overrideAttrs (finalAttrs: previousAttrs: { - version = "tj-0.9.2.3"; - - src = prev.fetchgit { - url = "https://git.tjkeller.xyz/${previousAttrs.pname}"; - tag = finalAttrs.version; - sha256 = "sha256-SQ62io4LWsPBvX8e9vUwVVXs/2+THoR6ZZoldQ6IUJk="; - }; - - makeFlags = previousAttrs.makeFlags ++ [ "CFLAGS=-Ofast" ]; - buildInputs = with prev.pkgs.xorg; previousAttrs.buildInputs ++ [ libXcursor libXext ]; - - meta = with prev.lib; previousAttrs.meta // { - homepage = "https://git.tjkeller.xyz/st"; - maintainers = previousAttrs.meta.maintainers ++ [ maintainers.tjkeller ]; - }; - }); -} diff --git a/modules/overlays/xerox-workcentre-7800-series-driver/default.nix b/modules/overlays/xerox-workcentre-7800-series-driver/default.nix deleted file mode 100644 index cfdaaae..0000000 --- a/modules/overlays/xerox-workcentre-7800-series-driver/default.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ - stdenv, - lib, - fetchurl, - dpkg, - autoPatchelfHook, - cups, - xorg, -}: -let - debPlatform = - if stdenv.hostPlatform.system == "x86_64-linux" then - "x86_64" - else if stdenv.hostPlatform.system == "i686-linux" then - "i686" - else - throw "Unsupported system: ${stdenv.hostPlatform.system}"; -in -stdenv.mkDerivation rec { - pname = "xerox-workcentre-7800-series-driver"; - version = "5.20.661.4684"; - debpkg = "XeroxOfficev5Pkg-Linux${debPlatform}-${version}.deb"; - - src = fetchurl { - url = "https://download.support.xerox.com/pub/drivers/CQ8580/drivers/linux/pt_BR/${debpkg}"; - sha256 = "014k0r9ij3401mnab1qzv96bjl9x7rf11aw1ibf0q370pk9jqqjb"; # TODO correct hash for i686 - }; - - nativeBuildInputs = [ dpkg autoPatchelfHook ]; - # TODO add support for disable xorg - buildInputs = [ - cups - stdenv.cc.cc.lib - xorg.libX11 - xorg.libXrender - xorg.libXfixes - xorg.libXdamage - xorg.libXcomposite - xorg.libXcursor - xorg.libXrandr - xorg.libXext - xorg.libXinerama - ]; - - sourceRoot = "."; - unpackCmd = "dpkg-deb -x $curSrc ."; - - dontConfigure = true; - dontBuild = true; - - installPhase = '' - runHook preInstall - - mkdir -p $out - - # Copy and patch the binaries and libraries - cp -r opt $out/ - cp -r usr $out/ - - # Move the PPD to CUPS model dir - mkdir -p $out/share/cups/model - cp opt/XeroxOffice/prtsys/ppd/*.ppd $out/share/cups/model/ - - # Install the CUPS filters - mkdir -p $out/lib/cups/filter - cp usr/lib/cups/filter/* $out/lib/cups/filter/ - - # Install man pages - mkdir -p $out/share/man - cp -r usr/share/man/* $out/share/man/ - - runHook postInstall - ''; - - meta = with lib; { - description = "Xerox WorkCentre 7800 Series Linux Printer Driver"; - longDescription = '' - WorkCentre 7830/7835/7845/7855 - ''; - homepage = "https://www.support.xerox.com/en-us/product/workcentre-7800-series/downloads?platform=linux"; - sourceProvenance = with sourceTypes; [ binaryNativeCode ]; - #license = licenses.unfree; - maintainers = []; - platforms = platforms.linux; - }; -} diff --git a/modules/overlays/xorg/overrides.nix b/modules/overlays/xorg/overrides.nix deleted file mode 100644 index 7225431..0000000 --- a/modules/overlays/xorg/overrides.nix +++ /dev/null @@ -1,20 +0,0 @@ -final: prev: { - xorg = prev.xorg // { - # Apply startx patch to create serverauth file in /tmp instead of home directory - xinit = (prev.xorg.xinit.overrideAttrs (finalAttrs: previousAttrs: { - version = "1.4.4"; - patchtag = "${finalAttrs.version}-1"; # Archlinux xinit package tagged release to fetch patch from - # Override src since is hardcoded to 1.4.2 - src = prev.fetchurl { - url = "mirror://xorg/individual/app/xinit-${finalAttrs.version}.tar.xz"; - sha256 = "sha256-QKR8ehZMf5gc43h7Szf35BH7QyMdzeVD1wCUB12s/vk="; - }; - patches = [ - (prev.fetchpatch { - url = "https://gitlab.archlinux.org/archlinux/packaging/packages/xorg-xinit/-/raw/${finalAttrs.patchtag}/06_move_serverauthfile_into_tmp.diff"; - sha256 = "1whzs5bw7ph12r3abs1g9fydibkr291jh56a0zp17d4x070jnkda"; - }) - ]; - })); - }; -} diff --git a/nixos/bootloader.nix b/nixos/bootloader.nix new file mode 100644 index 0000000..bb807cf --- /dev/null +++ b/nixos/bootloader.nix @@ -0,0 +1,48 @@ +{ lib, config, ... }: let + cfg = config.boot._loader; + usingEfi = cfg.mode == "efi"; + usingBios = cfg.mode == "bios"; +in { + options.boot._loader = { + enable = lib.mkEnableOption "enable unified bootloader config"; + loader = lib.mkOption { + type = lib.types.enum [ "grub" "systemd-boot" ]; + default = "systemd-boot"; + description = "whether to install grub or systemd-boot as the bootloader"; + }; + mode = lib.mkOption { + type = lib.types.enum [ "efi" "bios" ]; + default = "efi"; + description = "whether to install the bootloader in efi or bios mode"; + }; + grub = { + biosDevice = lib.mkOption { + type = lib.types.str; + description = "device to install grub on"; + }; + }; + memtest86.enable = lib.mkEnableOption "make Memtest86+ available from the bootloader"; + }; + + config = lib.mkIf cfg.enable { + boot.loader = { + grub = lib.mkIf (cfg.loader == "grub") { + enable = true; + efiSupport = usingEfi; + efiInstallAsRemovable = usingEfi; + device = if usingBios then cfg.grub.biosDevice else "nodev"; + enableCryptodisk = true; + memtest86.enable = cfg.memtest86.enable; + }; + systemd-boot = lib.mkIf (cfg.loader == "systemd-boot") { + enable = true; + editor = false; + memtest86.enable = cfg.memtest86.enable; + }; + efi = lib.mkIf usingEfi { + efiSysMountPoint = lib.mkIf (cfg.loader == "grub") "/boot/efi"; + canTouchEfiVariables = true; + }; + }; + }; +} diff --git a/nixos/default.nix b/nixos/default.nix new file mode 100644 index 0000000..ff9a0e1 --- /dev/null +++ b/nixos/default.nix @@ -0,0 +1,25 @@ +{ + imports = [ + ./programs/awesome.nix + ./programs/ddcutil.nix + ./programs/home-manager.nix + + ./services/cgit.nix + ./services/gitea.nix + ./services/searxng.nix + + ./bootloader.nix + ./doas.nix + ./filesystems.nix + ./hosts.nix + ./net-iface-labels.nix + ./nix.nix + ./pipewire.nix + ./powerkeys.nix + ./printing.nix + ./secrets.nix + ./ssh.nix + ./sudo.nix + ./suspend.nix + ]; +} diff --git a/nixos/doas.nix b/nixos/doas.nix new file mode 100644 index 0000000..aeed170 --- /dev/null +++ b/nixos/doas.nix @@ -0,0 +1,17 @@ +{ lib, config, ... }: let + cfg = config.security._doas; +in { + options.security._doas = { + enable = lib.mkEnableOption "enables doas"; + }; + + config = lib.mkIf cfg.enable { + security.doas = { + enable = true; + wheelNeedsPassword = false; + extraRules = [ + { keepEnv = true; } + ]; + }; + }; +} diff --git a/nixos/filesystems.nix b/nixos/filesystems.nix new file mode 100644 index 0000000..00ab409 --- /dev/null +++ b/nixos/filesystems.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: { + environment.systemPackages = with pkgs; [ + cryptsetup + exfat + ntfs3g + ]; +} diff --git a/nixos/hosts.nix b/nixos/hosts.nix new file mode 100644 index 0000000..a87f3b4 --- /dev/null +++ b/nixos/hosts.nix @@ -0,0 +1,4 @@ +{ hostname, ... }: { + networking.hostName = hostname; # From flake.nix + environment.etc.hosts.mode = "0644"; # Allow temporary imperative modifications +} diff --git a/nixos/net-iface-labels.nix b/nixos/net-iface-labels.nix new file mode 100644 index 0000000..b7ac655 --- /dev/null +++ b/nixos/net-iface-labels.nix @@ -0,0 +1,28 @@ +{ config, lib, ... }: let + cfg = config.networking._interfaceLabels; + validMac = str: builtins.match ''^[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}$'' str != null; + macAddressType = lib.types.str // { + check = validMac; + description = "a mac address (xx:xx:xx:xx:xx:xx)"; + }; +in { + options.networking._interfaceLabels = { + enable = lib.mkEnableOption "manually label network interfaces"; + interfaces = lib.mkOption { + type = lib.types.attrsOf macAddressType; + default = {}; + example = { + "lan0" = "00:11:22:33:44:55"; + "lan1" = "66:77:88:99:AA:BB"; + }; + description = "label network interfaces by their mac address"; + }; + }; + + config = lib.mkIf cfg.enable { + networking.usePredictableInterfaceNames = false; + services.udev.extraRules = lib.concatStringsSep "\n" ( + lib.mapAttrsToList (name: mac: ''ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="${mac}", NAME="${name}"'') cfg.interfaces + ); + }; +} diff --git a/nixos/nix.nix b/nixos/nix.nix new file mode 100644 index 0000000..ff8dd28 --- /dev/null +++ b/nixos/nix.nix @@ -0,0 +1,11 @@ +{ + nix.settings = { + experimental-features = [ "nix-command" "flakes" ]; + use-xdg-base-directories = true; + }; + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 30d"; + }; +} diff --git a/nixos/pipewire.nix b/nixos/pipewire.nix new file mode 100644 index 0000000..be3eaf4 --- /dev/null +++ b/nixos/pipewire.nix @@ -0,0 +1,14 @@ +{ lib, config, ... }: let + cfg = config.services._pipewire; +in { + options.services._pipewire = { + enable = lib.mkEnableOption "enables pipewire"; + }; + + config = lib.mkIf cfg.enable { + services.pipewire = { + enable = true; + pulse.enable = true; + }; + }; +} diff --git a/nixos/powerkeys.nix b/nixos/powerkeys.nix new file mode 100644 index 0000000..fd4aa00 --- /dev/null +++ b/nixos/powerkeys.nix @@ -0,0 +1,7 @@ +{ + services.logind = { + hibernateKey = "suspend"; + powerKey = "ignore"; + powerKeyLongPress = "poweroff"; + }; +} diff --git a/nixos/printing.nix b/nixos/printing.nix new file mode 100644 index 0000000..a6df279 --- /dev/null +++ b/nixos/printing.nix @@ -0,0 +1,18 @@ +{ lib, config, ... }: let + cfg = config.services._printing; +in { + options.services._printing = { + enable = lib.mkEnableOption "enables printing and avahi service"; + }; + + config = lib.mkIf cfg.enable { + services.printing.enable = true; + + services.avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + }; +} + diff --git a/nixos/programs/awesome.nix b/nixos/programs/awesome.nix new file mode 100644 index 0000000..0856384 --- /dev/null +++ b/nixos/programs/awesome.nix @@ -0,0 +1,22 @@ +{ pkgs, lib, config, ... }: let + cfg = config.services.xserver.windowManager._awesome; +in { + options.services.xserver.windowManager._awesome = { + enable = lib.mkEnableOption "installs awesome window manager"; + }; + + config = lib.mkIf cfg.enable { + services.xserver.windowManager.awesome = { + enable = true; + noArgb = true; # disables transparency. why not? + luaModules = with pkgs.luajitPackages; [ + lgi + ]; + package = with pkgs; awesome.override { + gtk3Support = true; + gtk3 = gtk3; + lua = luajit; + }; + }; + }; +} diff --git a/nixos/programs/ddcutil.nix b/nixos/programs/ddcutil.nix new file mode 100644 index 0000000..ef1801b --- /dev/null +++ b/nixos/programs/ddcutil.nix @@ -0,0 +1,12 @@ +{ pkgs, lib, config, ... }: let + cfg = config.programs._ddcutil; +in { + options.programs._ddcutil = { + enable = lib.mkEnableOption "enables ddcutil and i2c control"; + }; + + config = lib.mkIf cfg.enable { + hardware.i2c.enable = true; + environment.systemPackages = [ pkgs.ddcutil ]; + }; +} diff --git a/nixos/programs/home-manager.nix b/nixos/programs/home-manager.nix new file mode 100644 index 0000000..49149d3 --- /dev/null +++ b/nixos/programs/home-manager.nix @@ -0,0 +1,15 @@ +{ pkgs, lib, config, ... }: let + cfg = config.programs._home-manager; +in { + options.programs._home-manager = { + enable = lib.mkEnableOption "enables home-manager"; + }; + + config = lib.mkIf cfg.enable { + # Install home manager + environment.systemPackages = with pkgs; [ home-manager git ]; # Git is needed + + # For home-manager to configure gtk + programs.dconf.enable = lib.mkDefault true; + }; +} diff --git a/nixos/secrets.nix b/nixos/secrets.nix new file mode 100644 index 0000000..46d8f1e --- /dev/null +++ b/nixos/secrets.nix @@ -0,0 +1,10 @@ +{ inputs, config, pkgs, userDetails, ... }: { + imports = [ inputs.sops-nix.nixosModules.sops ]; + + environment.systemPackages = with pkgs; [ age sops ]; + + sops = { + defaultSopsFormat = "yaml"; + age.sshKeyPaths = [ "${userDetails.home}/.ssh/id_ed25519" "/root/.ssh/id_ed25519" ]; + }; +} diff --git a/nixos/services/cgit.nix b/nixos/services/cgit.nix new file mode 100644 index 0000000..366c1f8 --- /dev/null +++ b/nixos/services/cgit.nix @@ -0,0 +1,126 @@ +{ lib, pkgs, config, userDetails, ... }: +let + cfg = config.cgit; +in { + options = { + cgit = { + enable = lib.mkEnableOption "enables cgit service"; + hostAddress = lib.mkOption { + type = lib.types.str; + description = "hostAddress for the container"; + default = "10.0.1.1"; + }; + localAddress = lib.mkOption { + type = lib.types.str; + description = "localAddress for the container"; + default = "10.0.1.2"; + }; + rootTitle = lib.mkOption { + type = lib.types.str; + description = "cgit site title"; + default = ""; + }; + rootDesc = lib.mkOption { + type = lib.types.str; + description = "cgit site description"; + default = ""; + }; + extraConfig = lib.mkOption { + type = lib.types.str; + description = "cgitrc lines inserted verbatim at the end"; + default = ""; + }; + }; + }; + + config = lib.mkIf cfg.enable { + # Configure cgit container + containers.cgit = { + autoStart = true; + privateNetwork = true; + hostAddress = cfg.hostAddress; + localAddress = cfg.localAddress; + + specialArgs = { + authorizedKeys = userDetails.sshPublicKeys; + cgitrc = with cfg; { + inherit rootTitle; + inherit rootDesc; + inherit extraConfig; + }; + }; + + config = { lib, config, authorizedKeys, cgitrc, ... }: { + # Create git user for ssh access + users.users.git = { + isNormalUser = true; + home = "/srv/git"; # Serve from git user's home to allow cloning git@cgit:repo + group = "git"; + createHome = true; + homeMode = "750"; # Allow read permissions for group members + shell = pkgs.bash; + openssh.authorizedKeys.keys = authorizedKeys; + }; + users.groups.git.members = [ "lighttpd" ]; # Create the git group and add lighttpd user as a member so /srv/git can be served by cgit + + # Enable git + programs.git.enable = true; + + # Enable ssh service + services.openssh.enable = true; + + # Enable cgit service + services.lighttpd.enable = true; + services.lighttpd.cgit = { + enable = true; + #subdir = ""; # FIXME this does not work for some reason + configText = '' + # Based on joseluisq/alpine-cgit + root-title=${cgitrc.rootTitle} + root-desc=${cgitrc.rootDesc} + + source-filter=${pkgs.cgit}/lib/cgit/filters/syntax-highlighting.py + about-filter=${pkgs.cgit}/lib/cgit/filters/about-formatting.sh + + readme=:README.md + readme=:README.html + readme=:README.txt + readme=:README + readme=:INSTALL.md + readme=:INSTALL.html + readme=:INSTALL.txt + readme=:INSTALL + + # Cache + #cache-root=/var/cache/cgit + #cache-size=2000 + + enable-index-links=1 + enable-index-owner=0 + enable-remote-branches=1 + enable-log-filecount=1 + enable-log-linecount=1 + enable-git-config=1 + snapshots=tar.xz zip + + robots=noindex, nofollow + + virtual-root=/cgit + section-from-path=0 + max-repo-count=100 + scan-path=/srv/git + + # extra config + ${cgitrc.extraConfig} + ''; + }; + + # Networking, etc. + networking.firewall.allowedTCPPorts = [ 80 22 ]; + networking.hostName = "cgit"; + + system.stateVersion = "25.05"; + }; + }; + }; +} diff --git a/nixos/services/gitea.nix b/nixos/services/gitea.nix new file mode 100644 index 0000000..32c56db --- /dev/null +++ b/nixos/services/gitea.nix @@ -0,0 +1,60 @@ +{ lib, pkgs, config, userDetails, ... }: +let + cfg = config.gitea; +in { + options = { + gitea = { + enable = lib.mkEnableOption "enables gitea service"; + hostAddress = lib.mkOption { + type = lib.types.str; + description = "hostAddress for the container"; + default = "10.0.1.1"; + }; + localAddress = lib.mkOption { + type = lib.types.str; + description = "localAddress for the container"; + default = "10.0.1.3"; + }; + }; + }; + + config = lib.mkIf cfg.enable { + containers.gitea = { + autoStart = true; + privateNetwork = true; + hostAddress = cfg.hostAddress; + localAddress = cfg.localAddress; + + config = { lib, config, ... }: { + # Enable gitea service + services.gitea = { + enable = true; + user = "git"; # So ssh cloning uses git@gitea + settings = { + server = { + HTTP_PORT = 3000; # Can't set as 80 without root permissions, use 3000 instead + }; + }; + }; + + # Networking, etc. + # Redirect 80 to 3000 + networking.nftables = { + enable = true; + ruleset = '' + table ip nat { + chain prerouting { + type nat hook prerouting priority 0; + tcp dport 80 redirect to :3000 + } + } + ''; + }; + networking.firewall.allowedTCPPorts = [ 3000 80 22 ]; # Still need to forward 3000 for nftables rule to work + networking.hostName = "gitea"; + + system.stateVersion = "25.05"; + }; + }; + }; +} diff --git a/nixos/services/searxng.nix b/nixos/services/searxng.nix new file mode 100644 index 0000000..8ed632e --- /dev/null +++ b/nixos/services/searxng.nix @@ -0,0 +1,119 @@ +{ pkgs, lib, config, ... }: let + environmentFile = "/run/searx/searxng.env"; + generateEnvironmentFile = '' + umask 077 + echo "SEARXNG_SECRET=$(head -c 56 /dev/urandom | base64)" > ${environmentFile} + ls /run/searx + ''; +in { + options = { + searxng.enable = lib.mkEnableOption "enables searxng service"; + searxng.uwsgi.enable = lib.mkEnableOption "enables searxng uwsgi"; + }; + + config = lib.mkIf config.searxng.enable { + # Generate secret key + systemd.services.searx-environment-file = { + description = "Generate environment file with secret key for searx"; + wantedBy = [ "searx-init.service" ]; + partOf = [ "searx-init.service" ]; + before = [ "searx-init.service" ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + User = "searx"; + RuntimeDirectory = "searx"; + RuntimeDirectoryMode = "750"; + ConditionPathExists = "!${environmentFile}"; + }; + script = generateEnvironmentFile; + }; + + # Configure searxng + services.searx = { + enable = true; + redisCreateLocally = true; + package = pkgs.searxng; + inherit environmentFile; # Provides secret key + + # UWSGI configuration + runInUwsgi = config.searxng.uwsgi.enable; + + uwsgiConfig = { + socket = "/run/searx/searx.sock"; + http = ":8888"; + chmod-socket = "660"; + }; + + settings = { + general = { + instance_name = "TJK Search"; + donation_url = "https://tjkeller.xyz"; + enable_metrics = false; + }; + + # Search engine settings + search = { + safe_search = 2; # Strict + autocomplete = ""; + default_lang = "en-US"; + }; + + preferences.lock = [ "safesearch" ]; # Lock safe_search at strict + + # https://docs.searxng.org/admin/plugins.html + enabled_plugins = [ + "Tor check plugin" + "Tracker URL remover" + "Basic Calculator" + "Unit converter plugin" + "Hash plugin" + "Self Information" + "Open Access DOI rewrite" + "Hostnames plugin" + ]; + + hostnames.replace = { + "(.*\.)?youtube\.com$" = "piped.tjkeller.xyz"; + "(.*\.)?youtu\.be$" = "piped.tjkeller.xyz"; + "(.*\.)?reddit\.com$" = "old.reddit.com"; + }; + + # Enable / disabled search engines from default list + engines = lib.mapAttrsToList (name: value: { inherit name; disabled = !value; }) { + # Images + "artic" = false; + "deviantart" = false; + "flickr" = false; + "library of congress" = false; + "openverse" = false; + "pinterest" = false; + "public domain image archive" = false; + "unsplash" = false; + "wallhaven" = false; + "wikicommons.images" = false; + + # Videos + "bitchute" = true; + "dailymotion" = false; + "piped" = false; + "rumble" = true; + "sepiasearch" = false; + "vimeo" = false; + "wikicommons.videos" = false; + + # Music + "piped.music" = false; + + # Files + "1337x" = true; + "annas archive" = true; + "library genesis" = true; + + # Apps + "fdroid" = true; + }; + }; + }; + }; +} diff --git a/nixos/ssh.nix b/nixos/ssh.nix new file mode 100644 index 0000000..8f81474 --- /dev/null +++ b/nixos/ssh.nix @@ -0,0 +1,16 @@ +{ lib, config, ... }: let + cfg = config.services._ssh; +in { + options.services._ssh = { + enable = lib.mkEnableOption "enable openssh with X11 forwarding"; + }; + + config = lib.mkIf cfg.enable { + services.openssh = { + enable = true; + settings = { + X11Forwarding = true; + }; + }; + }; +} diff --git a/nixos/sudo.nix b/nixos/sudo.nix new file mode 100644 index 0000000..5fa2727 --- /dev/null +++ b/nixos/sudo.nix @@ -0,0 +1,15 @@ +{ lib, config, ... }: let + cfg = config.security._sudo; +in { + options.security._sudo = { + enable = lib.mkEnableOption "enables sudo"; + }; + + #config = lib.mkIf cfg.enable { + config = { # TODO remove once can be built from flake w git + security.sudo = { + enable = true; + wheelNeedsPassword = false; + }; + }; +} diff --git a/nixos/suspend.nix b/nixos/suspend.nix new file mode 100644 index 0000000..11404de --- /dev/null +++ b/nixos/suspend.nix @@ -0,0 +1,18 @@ +{ lib, config, ... }: let + cfg = config.systemd._suspend; +in { + options.systemd._suspend = { + disable = lib.mkEnableOption "disables suspend"; + }; + + config = lib.mkIf cfg.disable { + # Disable suspend targets + systemd.targets = builtins.listToAttrs (map (name: { + inherit name; + value = { + enable = false; + unitConfig.DefaultDependencies = "no"; + }; + }) ["sleep" "suspend" "hibernate" "hybrid-sleep"]); + }; +} diff --git a/pkgs/crazydiskinfo/default.nix b/pkgs/crazydiskinfo/default.nix new file mode 100644 index 0000000..61de338 --- /dev/null +++ b/pkgs/crazydiskinfo/default.nix @@ -0,0 +1,41 @@ +{ lib +, cmake +, fetchFromGitHub +, fetchpatch +, libatasmart +, ncurses5 +, stdenv +}: + +stdenv.mkDerivation rec { + pname = "crazydiskinfo"; + version = "1.1.0"; + + src = fetchFromGitHub { + owner = "otakuto"; + repo = pname; + rev = "refs/tags/${version}"; + sha256 = "sha256-+6ShoaggQ256sLSJDj4d16OipUYX/4JjEwLL5hswjiQ="; + }; + + patches = [ + # Patch to fix build warnings + (fetchpatch { + url = "https://github.com/otakuto/crazydiskinfo/compare/1.1.0...8563aa8.diff"; + sha256 = "sha256-z9aOQFsivu6sYgsZBOlnTvqnoR2ro/jyuO/WOimLSXk="; + }) + ]; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ libatasmart ncurses5 ]; + + cmakeFlags = [ "-DCMAKE_INSTALL_PREFIX=$(out)" ]; + + meta = with lib; { + description = "CrazyDiskInfo is an interactive TUI S.M.A.R.T viewer for Unix systems"; + homepage = "https://github.com/otakuto/crazydiskinfo"; + mainProgram = "crazy"; + license = licenses.mit; + maintainers = [ maintainers.tjkeller ]; + }; +} diff --git a/pkgs/default.nix b/pkgs/default.nix new file mode 100644 index 0000000..1c0ed23 --- /dev/null +++ b/pkgs/default.nix @@ -0,0 +1,31 @@ +{ pkgs, ... }: { + nixpkgs.overlays = with pkgs; [ + (final: prev: { + crazydiskinfo = (callPackage ./crazydiskinfo {}); + lowbat = (callPackage ./lowbat {}); + workcentre-7800-series = (callPackage ./xerox-workcentre-7800-series-driver {}); + + # Use my vimv-rs until pr gets merged + vimv-rs = prev.vimv-rs.overrideAttrs (oldAttrs: { + src = fetchFromGitHub { + owner = "tjkeller-xyz"; + repo = "vimv-rs"; + rev = "5deb76fb81dd4acf3c4809087ff3a1d846ab4769"; + sha256 = "sha256-XMn+5mIxSEHaR31ixMi6o7PSkN1iYjDT4aOiQkfEwpA="; + }; + }); + + # Use my tamzen until pr gets merged + tamzen = prev.tamzen.overrideAttrs (oldAttrs: { + src = fetchFromGitHub { + owner = "tjkeller-xyz"; + repo = "tamzen-font"; + rev = "middledot"; + sha256 = "sha256-mVZ8SdYKTdMG1qBKKYdNjuoYvWkEq2ph2O1ztsNJEhs="; + }; + }); + }) + (import ./st/overrides.nix) + (import ./xorg/overrides.nix) + ]; +} diff --git a/pkgs/lowbat/default.nix b/pkgs/lowbat/default.nix new file mode 100644 index 0000000..64ec205 --- /dev/null +++ b/pkgs/lowbat/default.nix @@ -0,0 +1,28 @@ +{ lib +, fetchzip +, glib +, libnotify +, pkg-config +, stdenv +}: + +stdenv.mkDerivation rec { + pname = "lowbat"; + version = "1.2.2"; + + src = fetchzip { + url = "https://git.tjkeller.xyz/${pname}/snapshot/${pname}-${version}.tar.xz"; + sha256 = "sha256-utdcY9qoDcrBWnGC8m/LUsnoxQ0ilssPDF44A6D/C+8="; + }; + + nativeBuildInputs = [ pkg-config ]; + buildInputs = [ libnotify glib ]; + + installFlags = [ "PREFIX=$(out)" ]; + + meta = with lib; { + description = "A minimal battery level monitor daemon, written in C"; + license = licenses.mit; + maintainers = [ maintainers.tjkeller ]; + }; +} diff --git a/pkgs/st/overrides.nix b/pkgs/st/overrides.nix new file mode 100644 index 0000000..2d0a37e --- /dev/null +++ b/pkgs/st/overrides.nix @@ -0,0 +1,19 @@ +final: prev: { + st = prev.st.overrideAttrs (finalAttrs: previousAttrs: { + version = "tj-0.9.2.3"; + + src = prev.fetchgit { + url = "https://git.tjkeller.xyz/${previousAttrs.pname}"; + tag = finalAttrs.version; + sha256 = "sha256-SQ62io4LWsPBvX8e9vUwVVXs/2+THoR6ZZoldQ6IUJk="; + }; + + makeFlags = previousAttrs.makeFlags ++ [ "CFLAGS=-Ofast" ]; + buildInputs = with prev.pkgs.xorg; previousAttrs.buildInputs ++ [ libXcursor libXext ]; + + meta = with prev.lib; previousAttrs.meta // { + homepage = "https://git.tjkeller.xyz/st"; + maintainers = previousAttrs.meta.maintainers ++ [ maintainers.tjkeller ]; + }; + }); +} diff --git a/pkgs/xerox-workcentre-7800-series-driver/default.nix b/pkgs/xerox-workcentre-7800-series-driver/default.nix new file mode 100644 index 0000000..cfdaaae --- /dev/null +++ b/pkgs/xerox-workcentre-7800-series-driver/default.nix @@ -0,0 +1,86 @@ +{ + stdenv, + lib, + fetchurl, + dpkg, + autoPatchelfHook, + cups, + xorg, +}: +let + debPlatform = + if stdenv.hostPlatform.system == "x86_64-linux" then + "x86_64" + else if stdenv.hostPlatform.system == "i686-linux" then + "i686" + else + throw "Unsupported system: ${stdenv.hostPlatform.system}"; +in +stdenv.mkDerivation rec { + pname = "xerox-workcentre-7800-series-driver"; + version = "5.20.661.4684"; + debpkg = "XeroxOfficev5Pkg-Linux${debPlatform}-${version}.deb"; + + src = fetchurl { + url = "https://download.support.xerox.com/pub/drivers/CQ8580/drivers/linux/pt_BR/${debpkg}"; + sha256 = "014k0r9ij3401mnab1qzv96bjl9x7rf11aw1ibf0q370pk9jqqjb"; # TODO correct hash for i686 + }; + + nativeBuildInputs = [ dpkg autoPatchelfHook ]; + # TODO add support for disable xorg + buildInputs = [ + cups + stdenv.cc.cc.lib + xorg.libX11 + xorg.libXrender + xorg.libXfixes + xorg.libXdamage + xorg.libXcomposite + xorg.libXcursor + xorg.libXrandr + xorg.libXext + xorg.libXinerama + ]; + + sourceRoot = "."; + unpackCmd = "dpkg-deb -x $curSrc ."; + + dontConfigure = true; + dontBuild = true; + + installPhase = '' + runHook preInstall + + mkdir -p $out + + # Copy and patch the binaries and libraries + cp -r opt $out/ + cp -r usr $out/ + + # Move the PPD to CUPS model dir + mkdir -p $out/share/cups/model + cp opt/XeroxOffice/prtsys/ppd/*.ppd $out/share/cups/model/ + + # Install the CUPS filters + mkdir -p $out/lib/cups/filter + cp usr/lib/cups/filter/* $out/lib/cups/filter/ + + # Install man pages + mkdir -p $out/share/man + cp -r usr/share/man/* $out/share/man/ + + runHook postInstall + ''; + + meta = with lib; { + description = "Xerox WorkCentre 7800 Series Linux Printer Driver"; + longDescription = '' + WorkCentre 7830/7835/7845/7855 + ''; + homepage = "https://www.support.xerox.com/en-us/product/workcentre-7800-series/downloads?platform=linux"; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + #license = licenses.unfree; + maintainers = []; + platforms = platforms.linux; + }; +} diff --git a/pkgs/xorg/overrides.nix b/pkgs/xorg/overrides.nix new file mode 100644 index 0000000..7225431 --- /dev/null +++ b/pkgs/xorg/overrides.nix @@ -0,0 +1,20 @@ +final: prev: { + xorg = prev.xorg // { + # Apply startx patch to create serverauth file in /tmp instead of home directory + xinit = (prev.xorg.xinit.overrideAttrs (finalAttrs: previousAttrs: { + version = "1.4.4"; + patchtag = "${finalAttrs.version}-1"; # Archlinux xinit package tagged release to fetch patch from + # Override src since is hardcoded to 1.4.2 + src = prev.fetchurl { + url = "mirror://xorg/individual/app/xinit-${finalAttrs.version}.tar.xz"; + sha256 = "sha256-QKR8ehZMf5gc43h7Szf35BH7QyMdzeVD1wCUB12s/vk="; + }; + patches = [ + (prev.fetchpatch { + url = "https://gitlab.archlinux.org/archlinux/packaging/packages/xorg-xinit/-/raw/${finalAttrs.patchtag}/06_move_serverauthfile_into_tmp.diff"; + sha256 = "1whzs5bw7ph12r3abs1g9fydibkr291jh56a0zp17d4x070jnkda"; + }) + ]; + })); + }; +} -- cgit v1.2.3