diff --git a/home.nix b/home.nix index 95f4f3e..04d9e76 100644 --- a/home.nix +++ b/home.nix @@ -122,7 +122,7 @@ # Disable JS in PDFs "pdfjs.enableScripting" = false; - # Harden SSL + # Harden SSL "security.ssl.require_safe_negotiation" = true; }; }; diff --git a/hosts/blackstar/nixos/configuration.nix b/hosts/blackstar/nixos/configuration.nix index 261f644..985b330 100644 --- a/hosts/blackstar/nixos/configuration.nix +++ b/hosts/blackstar/nixos/configuration.nix @@ -30,17 +30,21 @@ ]; modules = { - desktop.apps = { - godot.enable = true; - cad.enable = true; - cam.enable = true; - code.enable = true; - art.enable = true; + desktop = { + chat.enable = true; + daw.enable = true; + cad.enable = true; + cam.enable = true; + code.enable = true; + art.enable = true; + games.enable = true; + apps = { xiv.enable = true; + godot.enable = true; minecraft.enable = true; - chat.enable = true; + }; }; - # system.boot.grub.enable = true; + # system.boot.grub.enable = true; system.audio.enable = true; }; @@ -118,7 +122,6 @@ # TODO: Configure your system-wide user settings (groups, etc), add more users as needed. users.users = { - # FIXME: Replace with your username aces = { # TODO: You can set an initial password for your user. @@ -134,57 +137,10 @@ # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion system.stateVersion = "24.05"; - # Programs installed for all users - /*environment.systemPackages = with pkgs; [ - # art - aseprite - krita - - # code - - # game - steam - alvr - xivlauncher - modrinth-app - - # cad - prusa-slicer - freecad - (blender.override { - cudaSupport = true; - }) - openscad - - # other - discord - onlyoffice-bin - google-chrome - - # sys utils - gnupg ffmpeg unzip - mpv - hyfetch - dbeaver-bin - openssl - pkg-config - element-desktop - python311 - python311Packages.pip - webkitgtk - libxkbcommon - ];*/ - - #environment.variables = { - # PKG_CONFIG_PATH="${pkgs.openssl.dev}/lib/pkgconfig"; - # LD_LIBRARY_PATH="${pkgs.wayland}/lib:$LD_LIBRARY_PATH"; - #}; - services.xserver.videoDrivers = ["nvidia"]; hardware.opengl = { enable = true; - ## radv: an open-source Vulkan driver from freedesktop driSupport = true; driSupport32Bit = true; @@ -193,7 +149,6 @@ # Enable CUPS to print documents. services.printing.enable = true; - hardware.nvidia = { modesetting.enable = true; diff --git a/hosts/shared/nixos/shared_config.nix b/hosts/shared/nixos/shared_config.nix index cfb4aee..d355035 100644 --- a/hosts/shared/nixos/shared_config.nix +++ b/hosts/shared/nixos/shared_config.nix @@ -6,49 +6,13 @@ pkgs, ... }: { - environment.systemPackages = with pkgs; [ - steam - - # code - cargo rustc # Rust - jetbrains.pycharm-professional - vim - python311 - python311Packages.pip - lua + environment.systemPackages = with pkgs; [ + /* ------------------------- Essential Applications ------------------------- */ git - # (vscode-with-extensions.override { - # vscodeExtensions = with vscode-extensions; [ - # dracula-theme.theme-dracula - # yzhang.markdown-all-in-one - # rust-lang.rust-analyzer - # # dependi - # jscearcy.rust-doc-viewer - # swellaby.vscode-rust-test-adapter - # tamasfe.even-better-toml - # ms-vsliveshare.vsliveshare - # aaron-bond.better-comments - # bbenoist.nix - # vue.volar - # ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ - # { - # name = "remote-ssh-edit"; - # publisher = "ms-vscode-remote"; - # version = "0.47.2"; - # sha256 = "1hp6gjh4xp2m1xlm1jsdzxw9d8frkiidhph6nvl24d0h8z34w49g"; - # } - # ]; - #}) - vscode.fhs - blockbench wine bottles - # other - discord - nodejs_22 - - # sys utils + /* ---------------------------- System Utilities ---------------------------- */ gnupg ffmpeg unzip mpv gparted libappindicator-gtk3 @@ -56,25 +20,10 @@ hyfetch ]; - hardware.bluetooth.enable = true; - hardware.bluetooth.powerOnBoot = true; - services.blueman.enable = true; - - services.pipewire.wireplumber.enable = true; - services.pipewire.wireplumber.extraConfig.bluetoothEnhancements = { - "monitor.bluez.properties" = { - "bluez5.enable-sbc-xq" = true; - "bluez5.enable-msbc" = true; - "bluez5.enable-hw-volume" = true; - "bluez5.roles" = [ "hsp_hs" "hsp_ag" "hfp_hf" "hfp_ag" ]; - }; - }; - - - programs.nix-ld.enable = true; programs.firefox.enable = true; - ## System security tweaks + /* ----------------------------- Security Tweaks ---------------------------- */ + # sets hidepid=2 on /proc (make process info visible only to owning user) # NOTE Was removed on nixpkgs-unstable because it doesn't do anything # security.hideProcessInformation = true; diff --git a/modules/default.nix b/modules/default.nix index 98ce19a..305fa68 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -2,16 +2,19 @@ { imports = [ ./desktop/apps/godot.nix - ./desktop/apps/cad.nix - ./desktop/apps/cam.nix - ./desktop/apps/code.nix - ./desktop/apps/art.nix ./desktop/apps/xiv.nix - ./desktop/apps/chat.nix ./desktop/apps/minecraft.nix + ./desktop/cad.nix + ./desktop/cam.nix + ./desktop/code.nix + ./desktop/daw.nix + ./desktop/art.nix + ./desktop/chat.nix + ./system/boot/grub.nix ./system/audio.nix + ./system/bluetooth.nix ./system/locale.nix ./system/network.nix ]; diff --git a/modules/desktop/apps/art.nix b/modules/desktop/apps/art.nix deleted file mode 100644 index 040ec89..0000000 --- a/modules/desktop/apps/art.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ lib, config, options, pkgs, ... }: - -with lib; -let cfg = config.modules.desktop.apps.art; -in { - options.modules.desktop.apps.art = { - enable = mkEnableOption false; - }; - - config = mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - aseprite - krita - lmms - inkscape - ]; - }; -} \ No newline at end of file diff --git a/modules/desktop/apps/cad.nix b/modules/desktop/apps/cad.nix deleted file mode 100644 index bb0997b..0000000 --- a/modules/desktop/apps/cad.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ lib, config, options, pkgs, ... }: - -with lib; -let cfg = config.modules.desktop.apps.cad; -in { - options.modules.desktop.apps.cad = { - enable = mkEnableOption false; - }; - - config = mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - (blender.override { - cudaSupport = true; - }) - openscad - freecad - ]; - }; -} \ No newline at end of file diff --git a/modules/desktop/apps/cam.nix b/modules/desktop/apps/cam.nix deleted file mode 100644 index 1d085ca..0000000 --- a/modules/desktop/apps/cam.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ lib, config, options, pkgs, ... }: - -with lib; -let cfg = config.modules.desktop.apps.cam; -in { - options.modules.desktop.apps.cam = { - enable = mkEnableOption false; - }; - - config = mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - prusa-slicer - ]; - }; -} \ No newline at end of file diff --git a/modules/desktop/apps/chat.nix b/modules/desktop/apps/chat.nix deleted file mode 100644 index 583a06f..0000000 --- a/modules/desktop/apps/chat.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ lib, config, options, pkgs, ... }: - -with lib; -let cfg = config.modules.desktop.apps.chat; -in { - options.modules.desktop.apps.chat = { - enable = mkEnableOption false; - }; - - config = mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - discord - element-desktop - ]; - }; -} \ No newline at end of file diff --git a/modules/desktop/apps/code.nix b/modules/desktop/apps/code.nix deleted file mode 100644 index de76354..0000000 --- a/modules/desktop/apps/code.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ lib, config, options, pkgs, ... }: - -with lib; -let cfg = config.modules.desktop.apps.code; -in { - options.modules.desktop.apps.code = { - enable = mkEnableOption false; - }; - - config = mkIf cfg.enable { - programs.nix-ld = { - enable = true; - libraries = with pkgs; [ - stdenv.cc.cc.lib - ]; - }; - environment.systemPackages = with pkgs; [ - rustc rustup # Rust - # pkgs.rust-bin.stable.latest.default - jetbrains.idea-ultimate - jetbrains.rider - jetbrains.clion - jetbrains.pycharm-professional - jetbrains.datagrip - jetbrains.webstorm - vim - python3 - lua - git - github-desktop - - distrobox - - # -- C/C++ - gcc - libgcc - gnumake - cmake - extra-cmake-modules - ]; - }; -} \ No newline at end of file diff --git a/modules/desktop/apps/godot.nix b/modules/desktop/apps/godot.nix index 4376dcc..410eb28 100644 --- a/modules/desktop/apps/godot.nix +++ b/modules/desktop/apps/godot.nix @@ -1,4 +1,8 @@ -{ lib, config, options, pkgs, ... }: +/* -------------------------------------------------------------------------- */ +/* App config: Godot Engine */ +/* -------------------------------------------------------------------------- */ + +{ lib, config, options, pkgs ? import , ... }: with lib; let cfg = config.modules.desktop.apps.godot; diff --git a/modules/desktop/apps/minecraft.nix b/modules/desktop/apps/minecraft.nix index bb51bd7..b3bafb8 100644 --- a/modules/desktop/apps/minecraft.nix +++ b/modules/desktop/apps/minecraft.nix @@ -1,3 +1,7 @@ +/* -------------------------------------------------------------------------- */ +/* App config: Minecraft */ +/* -------------------------------------------------------------------------- */ + { lib, config, options, pkgs, ... }: with lib; @@ -12,7 +16,8 @@ in { modrinth-app ]; environment.variables = { - WEBKIT_DISABLE_DMABUF_RENDERER=1; + # This solves an issue where Modrinth refuses to start + WEBKIT_DISABLE_DMABUF_RENDERER=1; }; }; } \ No newline at end of file diff --git a/modules/desktop/apps/xiv.nix b/modules/desktop/apps/xiv.nix index 7e2a3de..b7fa78a 100644 --- a/modules/desktop/apps/xiv.nix +++ b/modules/desktop/apps/xiv.nix @@ -1,3 +1,7 @@ +/* -------------------------------------------------------------------------- */ +/* App config: FINAL FANTASY XIV: A Realm Reborn */ +/* -------------------------------------------------------------------------- */ + { lib, config, options, pkgs, ... }: with lib; diff --git a/modules/desktop/art.nix b/modules/desktop/art.nix new file mode 100644 index 0000000..fe447fb --- /dev/null +++ b/modules/desktop/art.nix @@ -0,0 +1,25 @@ +/* -------------------------------------------------------------------------- */ +/* Art tools config */ +/* -------------------------------------------------------------------------- */ + +{ lib, config, options, pkgs, ... }: + +with lib; +let cfg = config.modules.desktop.art; +in { + options.modules.desktop.art = { + enable = mkEnableOption false; + }; + + config = mkIf cfg.enable { + /* Driver includes support for Huion Kamvas Pro */ + hardware.opentabletdriver.enable = true; + + environment.systemPackages = with pkgs; [ + aseprite + krita + inkscape + blockbench + ]; + }; +} \ No newline at end of file diff --git a/modules/desktop/cad.nix b/modules/desktop/cad.nix new file mode 100644 index 0000000..f0c0114 --- /dev/null +++ b/modules/desktop/cad.nix @@ -0,0 +1,29 @@ +/* -------------------------------------------------------------------------- */ +/* Computer-Aided Design config */ +/* -------------------------------------------------------------------------- */ + +{ lib, config, options, pkgs, ... }: + +with lib; +let cfg = config.modules.desktop.cad; +in { + options.modules.desktop.cad = { + enable = mkEnableOption false; + }; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + /* -------------------------------- Polygonal ------------------------------- */ + (blender.override { + # Allows GPU support for Cycles + cudaSupport = true; + }) + + /* ------------------------------- Parametric ------------------------------- */ + openscad + freecad + + /* ---------------------------------- Voxel --------------------------------- */ + ]; + }; +} \ No newline at end of file diff --git a/modules/desktop/cam.nix b/modules/desktop/cam.nix new file mode 100644 index 0000000..1a0814e --- /dev/null +++ b/modules/desktop/cam.nix @@ -0,0 +1,20 @@ +/* -------------------------------------------------------------------------- */ +/* Computer-Aided Manufacturing config */ +/* -------------------------------------------------------------------------- */ + +{ lib, config, options, pkgs, ... }: + +with lib; +let cfg = config.modules.desktop.cam; +in { + options.modules.desktop.cam = { + enable = mkEnableOption false; + }; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + /* ------------------------------- 3D Printing ------------------------------ */ + prusa-slicer + ]; + }; +} \ No newline at end of file diff --git a/modules/desktop/chat.nix b/modules/desktop/chat.nix new file mode 100644 index 0000000..82acc90 --- /dev/null +++ b/modules/desktop/chat.nix @@ -0,0 +1,20 @@ +/* -------------------------------------------------------------------------- */ +/* Communications config */ +/* -------------------------------------------------------------------------- */ + +{ lib, config, options, pkgs, ... }: + +with lib; +let cfg = config.modules.desktop.chat; +in { + options.modules.desktop.chat = { + enable = mkEnableOption false; + }; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + discord + element-desktop + ]; + }; +} \ No newline at end of file diff --git a/modules/desktop/code.nix b/modules/desktop/code.nix new file mode 100644 index 0000000..d94cd31 --- /dev/null +++ b/modules/desktop/code.nix @@ -0,0 +1,59 @@ +/* -------------------------------------------------------------------------- */ +/* Programming/Development Environment config */ +/* -------------------------------------------------------------------------- */ + +{ lib, config, options, pkgs, ... }: + +with lib; +let cfg = config.modules.desktop.code; +in { + options.modules.desktop.code = { + enable = mkEnableOption false; + heavyweight = mkEnableOption false; + }; + + config = mkIf cfg.enable { + programs.nix-ld = { + enable = true; + libraries = with pkgs; [ + stdenv.cc.cc.lib + ]; + }; + environment.systemPackages = with pkgs; [ + /* ---------------------------- Language support ---------------------------- */ + # Rust + rustc rustup + # Python + python3 + # Lua + lua + # C/C++ + gcc + libgcc + gnumake + cmake + extra-cmake-modules + # JS + nodejs_22 + + /* --------------------------------- Editors -------------------------------- */ + # ? FHS VScode is a variant that lets you manually install extensions. + # ? Otherwise, you'd specify extensions here. + vscode.fhs + vim + + jetbrains.idea-ultimate + jetbrains.clion + jetbrains.pycharm-professional + jetbrains.datagrip + jetbrains.webstorm + + /* ----------------------------- Version Control ---------------------------- */ + git + github-desktop + + /* ----------------------------- Virtualization ----------------------------- */ + distrobox + ]; + }; +} \ No newline at end of file diff --git a/modules/desktop/daw.nix b/modules/desktop/daw.nix new file mode 100644 index 0000000..cd53acf --- /dev/null +++ b/modules/desktop/daw.nix @@ -0,0 +1,29 @@ +/* -------------------------------------------------------------------------- */ +/* Digital Audio Workstation configuration */ +/* -------------------------------------------------------------------------- */ + +{ lib, config, options, pkgs, ... }: + +with lib; +let cfg = config.modules.desktop.daw; +in { + options.modules.desktop.daw = { + enable = mkEnableOption false; + }; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + /* ----------------------------- Low-level Audio ---------------------------- */ + audacity + + /* ------------------------------- Sequencers ------------------------------- */ + lmms # Like FL Studio, but FOSS + ardour + + # TODO: Add FL Studio if possible + + /* ----------------------------- Music Trackers ----------------------------- */ + furnace # Works by emulating classic systems - Good for chiptune + ]; + }; +} \ No newline at end of file diff --git a/modules/desktop/games.nix b/modules/desktop/games.nix new file mode 100644 index 0000000..af51900 --- /dev/null +++ b/modules/desktop/games.nix @@ -0,0 +1,19 @@ +{ lib, config, options, pkgs, ... }: + +with lib; +let cfg = config.modules.desktop.games; +in { + options.modules.desktop.games = { + enable = mkEnableOption false; + }; + + config = mkIf cfg.enable { + /* Driver includes support for Huion Kamvas Pro */ + hardware.opentabletdriver.enable = true; + + environment.systemPackages = with pkgs; [ + steam + lutris + ]; + }; +} \ No newline at end of file diff --git a/modules/system/bluetooth.nix b/modules/system/bluetooth.nix new file mode 100644 index 0000000..ebe6bb4 --- /dev/null +++ b/modules/system/bluetooth.nix @@ -0,0 +1,29 @@ +/* -------------------------------------------------------------------------- */ +/* System Utility - Bluetooth config */ +/* -------------------------------------------------------------------------- */ + +{ lib, config, options, pkgs, ... }: + +with lib; +let cfg = config.modules.system.bluetooth; +in { + options.modules.system.bluetooth = { + enable = mkEnableOption true; + }; + + config = mkIf cfg.enable { + hardware.bluetooth.enable = true; + hardware.bluetooth.powerOnBoot = true; + services.blueman.enable = true; + + services.pipewire.wireplumber.enable = true; + services.pipewire.wireplumber.extraConfig.bluetoothEnhancements = { + "monitor.bluez.properties" = { + "bluez5.enable-sbc-xq" = true; + "bluez5.enable-msbc" = true; + "bluez5.enable-hw-volume" = true; + "bluez5.roles" = [ "hsp_hs" "hsp_ag" "hfp_hf" "hfp_ag" ]; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/system/boot/.grub.nix.swp b/modules/system/boot/.grub.nix.swp deleted file mode 100644 index 26c9f3d..0000000 Binary files a/modules/system/boot/.grub.nix.swp and /dev/null differ diff --git a/pkgs/wallpaper-engine.nix b/pkgs/wallpaper-engine.nix new file mode 100644 index 0000000..8d559b0 --- /dev/null +++ b/pkgs/wallpaper-engine.nix @@ -0,0 +1,41 @@ +{ mkDerivation +, fetchFromGitHub +, cmake +, extra-cmake-modules +, mpv +, websockets +, qtwebsockets +, qtwebchannel +, qtdeclarative +, qtx11extras +, vulkan-headers +, vulkan-loader +, vulkan-tools +, pkg-config +, lz4 +, glslang +}: + +mkDerivation rec { + pname = "wallpaper-engine-kde-plugin"; + version = "0.5.3"; + + cmakeFlags = [ "-DUSE_PLASMAPKG=ON" ]; + nativeBuildInputs = [ cmake extra-cmake-modules pkg-config ]; + buildInputs = [ + libsForQt5.plasma-framework mpv qtwebsockets websockets qtwebchannel + qtdeclarative qtx11extras lz4 + vulkan-headers vulkan-tools vulkan-loader + ]; + + postPatch = '' + rmdir src/backend_scene/third_party/glslang + ln -s ${glslang.src} src/backend_scene/third_party/glslang + ''; + + src = fetchFromGitHub { + owner = "catsout"; + repo = pname; + rev = "v${version}"; + sha256 = "qmg+g1you3rm1EAfZWRUBBkEQm1QQ0V9/mIn8bBgbu4="; + }; \ No newline at end of file