diff --git a/flake.lock b/flake.lock index d67915c4..5c1f83ea 100644 --- a/flake.lock +++ b/flake.lock @@ -389,39 +389,18 @@ "type": "github" } }, - "home-manager-stable": { - "inputs": { - "nixpkgs": [ - "nixpkgs-stable" - ] - }, - "locked": { - "lastModified": 1726989464, - "narHash": "sha256-Vl+WVTJwutXkimwGprnEtXc/s/s8sMuXzqXaspIGlwM=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "2f23fa308a7c067e52dfcc30a0758f47043ec176", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "release-24.05", - "repo": "home-manager", - "type": "github" - } - }, - "home-manager-unstable": { + "home-manager_2": { "inputs": { "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1738275749, - "narHash": "sha256-PM+cGduJ05EZ+YXulqAwUFjvfKpPmW080mcuN6R1POw=", + "lastModified": 1739044880, + "narHash": "sha256-l+bzq9rsBIQQnBtGayJeOS30L53+mYPjgfQALi20XDg=", "owner": "nix-community", "repo": "home-manager", - "rev": "a8159195bfaef3c64df75d3b1e6a68d49d392be9", + "rev": "bf9a1a068919ccdfa7d130873936c5fd4c826e85", "type": "github" }, "original": { @@ -431,7 +410,7 @@ "type": "github" } }, - "home-manager_2": { + "home-manager_3": { "inputs": { "nixpkgs": [ "stylix", @@ -749,32 +728,6 @@ "type": "github" } }, - "nix-formatter-pack": { - "inputs": { - "nixpkgs": [ - "nix-on-droid", - "nixpkgs" - ], - "nmd": [ - "nix-on-droid", - "nmd" - ], - "nmt": "nmt" - }, - "locked": { - "lastModified": 1705252799, - "narHash": "sha256-HgSTREh7VoXjGgNDwKQUYcYo13rPkltW7IitHrTPA5c=", - "owner": "Gerschtli", - "repo": "nix-formatter-pack", - "rev": "2de39dedd79aab14c01b9e2934842051a160ffa5", - "type": "github" - }, - "original": { - "owner": "Gerschtli", - "repo": "nix-formatter-pack", - "type": "github" - } - }, "nix-github-actions": { "inputs": { "nixpkgs": [ @@ -798,34 +751,6 @@ "type": "github" } }, - "nix-on-droid": { - "inputs": { - "home-manager": [ - "home-manager-unstable" - ], - "nix-formatter-pack": "nix-formatter-pack", - "nixpkgs": [ - "nixpkgs" - ], - "nixpkgs-docs": "nixpkgs-docs", - "nixpkgs-for-bootstrap": "nixpkgs-for-bootstrap", - "nmd": "nmd" - }, - "locked": { - "lastModified": 1725658585, - "narHash": "sha256-P29z4Gt89n5ps1U7+qmIrj0BuRXGZQSIaOe2+tsPgfw=", - "owner": "nix-community", - "repo": "nix-on-droid", - "rev": "5d88ff2519e4952f8d22472b52c531bb5f1635fc", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "master", - "repo": "nix-on-droid", - "type": "github" - } - }, "nixpkgs": { "locked": { "lastModified": 1737929020, @@ -842,38 +767,6 @@ "type": "github" } }, - "nixpkgs-docs": { - "locked": { - "lastModified": 1705957679, - "narHash": "sha256-Q8LJaVZGJ9wo33wBafvZSzapYsjOaNjP/pOnSiKVGHY=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "9a333eaa80901efe01df07eade2c16d183761fa3", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "release-23.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-for-bootstrap": { - "locked": { - "lastModified": 1720244366, - "narHash": "sha256-WrDV0FPMVd2Sq9hkR5LNHudS3OSMmUrs90JUTN+MXpA=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "49ee0e94463abada1de470c9c07bfc12b36dcf40", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "49ee0e94463abada1de470c9c07bfc12b36dcf40", - "type": "github" - } - }, "nixpkgs-stable": { "locked": { "lastModified": 1738163270, @@ -953,6 +846,18 @@ } }, "nixpkgs_4": { + "locked": { + "lastModified": 0, + "narHash": "sha256-NGqpVVxNAHwIicXpgaVqJEJWeyqzoQJ9oc8lnK9+WC4=", + "path": "/nix/store/pgg4vm83q0kr4hxzcwhdgdiv2yfnh3dw-source", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_5": { "locked": { "lastModified": 1736798957, "narHash": "sha256-qwpCtZhSsSNQtK4xYGzMiyEDhkNzOCz/Vfu4oL2ETsQ=", @@ -968,44 +873,6 @@ "type": "github" } }, - "nmd": { - "inputs": { - "nixpkgs": [ - "nix-on-droid", - "nixpkgs-docs" - ], - "scss-reset": "scss-reset" - }, - "locked": { - "lastModified": 1705050560, - "narHash": "sha256-x3zzcdvhJpodsmdjqB4t5mkVW22V3wqHLOun0KRBzUI=", - "owner": "~rycee", - "repo": "nmd", - "rev": "66d9334933119c36f91a78d565c152a4fdc8d3d3", - "type": "sourcehut" - }, - "original": { - "owner": "~rycee", - "repo": "nmd", - "type": "sourcehut" - } - }, - "nmt": { - "flake": false, - "locked": { - "lastModified": 1648075362, - "narHash": "sha256-u36WgzoA84dMVsGXzml4wZ5ckGgfnvS0ryzo/3zn/Pc=", - "owner": "rycee", - "repo": "nmt", - "rev": "d83601002c99b78c89ea80e5e6ba21addcfe12ae", - "type": "gitlab" - }, - "original": { - "owner": "rycee", - "repo": "nmt", - "type": "gitlab" - } - }, "pre-commit-hooks": { "inputs": { "flake-compat": "flake-compat", @@ -1035,15 +902,14 @@ "blocklist-hosts": "blocklist-hosts", "chaotic": "chaotic", "emacs-overlay": "emacs-overlay", - "home-manager-stable": "home-manager-stable", - "home-manager-unstable": "home-manager-unstable", + "home-manager": "home-manager_2", "hyprland": "hyprland", "hyprlock": "hyprlock", "hyprutils": "hyprutils", - "nix-on-droid": "nix-on-droid", "nixpkgs": "nixpkgs_2", "nixpkgs-stable": "nixpkgs-stable_3", "rust-overlay": "rust-overlay", + "secrets": "secrets", "stylix": "stylix" } }, @@ -1082,20 +948,19 @@ "type": "github" } }, - "scss-reset": { - "flake": false, + "secrets": { + "inputs": { + "nixpkgs": "nixpkgs_4" + }, "locked": { - "lastModified": 1631450058, - "narHash": "sha256-muDlZJPtXDIGevSEWkicPP0HQ6VtucbkMNygpGlBEUM=", - "owner": "andreymatin", - "repo": "scss-reset", - "rev": "0cf50e27a4e95e9bb5b1715eedf9c54dee1a5a91", - "type": "github" + "lastModified": 1739133600, + "narHash": "sha256-5xe63u5z/+yauwl/e++ZTDelVK0CBF32GborYfCuBl8=", + "path": "/etc/nixos.secrets", + "type": "path" }, "original": { - "owner": "andreymatin", - "repo": "scss-reset", - "type": "github" + "path": "/etc/nixos.secrets", + "type": "path" } }, "stylix": { @@ -1109,8 +974,8 @@ "flake-utils": "flake-utils", "git-hooks": "git-hooks", "gnome-shell": "gnome-shell", - "home-manager": "home-manager_2", - "nixpkgs": "nixpkgs_4", + "home-manager": "home-manager_3", + "nixpkgs": "nixpkgs_5", "systems": "systems_4", "tinted-foot": "tinted-foot", "tinted-kitty": "tinted-kitty", diff --git a/flake.nix b/flake.nix index 50754623..947263f5 100644 --- a/flake.nix +++ b/flake.nix @@ -3,57 +3,11 @@ outputs = inputs@{ self, ... }: let - # ---- SYSTEM SETTINGS ---- # - systemSettings = { - system = "x86_64-linux"; # system arch - hostname = "snowfire"; # hostname - profile = "personal"; # select a profile defined from my profiles directory - timezone = "America/Chicago"; # select timezone - locale = "en_US.UTF-8"; # select locale - bootMode = "uefi"; # uefi or bios - bootMountPath = "/boot"; # mount path for efi boot partition; only used for uefi boot mode - grubDevice = ""; # device identifier for grub; only used for legacy (bios) boot mode - gpuType = "amd"; # amd, intel or nvidia; only makes some slight mods for amd at the moment - }; - - # ----- USER SETTINGS ----- # - userSettings = rec { - username = "emmet"; # username - name = "Emmet"; # name/identifier - email = "emmet@librephoenix.com"; # email (used for certain configurations) - dotfilesDir = "~/.dotfiles"; # absolute path of the local repo - theme = "io"; # selcted theme from my themes directory (./themes/) - wm = "hyprland"; # Selected window manager or desktop environment; must select one in both ./user/wm/ and ./system/wm/ - # window manager type (hyprland or x11) translator - wmType = if (wm == "hyprland") then "wayland" else "x11"; - browser = "qutebrowser"; # Default browser; must select one from ./user/app/browser/ - spawnBrowser = if ((browser == "qutebrowser") && (wm == "hyprland")) then "qutebrowser-hyprprofile" else (if (browser == "qutebrowser") then "qutebrowser --qt-flag ignore-gpu-blacklist --qt-flag enable-gpu-rasterization --qt-flag enable-native-gpu-memory-buffers --qt-flag enable-accelerated-2d-canvas --qt-flag num-raster-threads=4" else browser); # Browser spawn command must be specail for qb, since it doesn't gpu accelerate by default (why?) - defaultRoamDir = "Personal.p"; # Default org roam directory relative to ~/Org - term = "alacritty"; # Default terminal command; - font = "Intel One Mono"; # Selected font - fontPkg = pkgs.intel-one-mono; # Font package - editor = "emacsclient"; # Default editor; - # editor spawning translator - # generates a command that can be used to spawn editor inside a gui - # EDITOR and TERM session variables must be set in home.nix or other module - # I set the session variable SPAWNEDITOR to this in my home.nix for convenience - spawnEditor = if (editor == "emacsclient") then - "emacsclient -c -a 'emacs'" - else - (if ((editor == "vim") || - (editor == "nvim") || - (editor == "nano")) then - "exec " + term + " -e " + editor - else - (if (editor == "neovide") then - "neovide -- --listen /tmp/nvimsocket" - else - editor)); - }; + system = "x86_64-linux"; # create patched nixpkgs nixpkgs-patched = - (import inputs.nixpkgs { system = systemSettings.system; }).applyPatches { + (import inputs.nixpkgs { inherit system; }).applyPatches { name = "nixpkgs-patched"; src = inputs.nixpkgs; patches = [ ]; @@ -62,135 +16,63 @@ # configure pkgs # use nixpkgs if running a server (homelab or worklab profile) # otherwise use patched nixos-unstable nixpkgs - pkgs = (if ((systemSettings.profile == "homelab") || (systemSettings.profile == "worklab")) - then - pkgs-stable - else - (import nixpkgs-patched { - system = systemSettings.system; - config = { - allowUnfree = true; - allowUnfreePredicate = (_: true); - }; - overlays = [ inputs.rust-overlay.overlays.default - inputs.emacs-overlay.overlays.default - ]; - })); - - pkgs-stable = import inputs.nixpkgs-stable { - system = systemSettings.system; + pkgs = import nixpkgs-patched { + inherit system; config = { allowUnfree = true; allowUnfreePredicate = (_: true); }; + overlays = [ inputs.rust-overlay.overlays.default inputs.emacs-overlay.overlays.default ]; }; - pkgs-unstable = import inputs.nixpkgs-patched { - system = systemSettings.system; + pkgs-stable = import inputs.nixpkgs-stable { + inherit system; config = { allowUnfree = true; allowUnfreePredicate = (_: true); }; - overlays = [ inputs.rust-overlay.overlays.default ]; }; # configure lib - # use nixpkgs if running a server (homelab or worklab profile) - # otherwise use patched nixos-unstable nixpkgs - lib = (if ((systemSettings.profile == "homelab") || (systemSettings.profile == "worklab")) - then - inputs.nixpkgs-stable.lib - else - inputs.nixpkgs.lib); + lib = inputs.nixpkgs.lib; - # use home-manager-stable if running a server (homelab or worklab profile) - # otherwise use home-manager-unstable - home-manager = (if ((systemSettings.profile == "homelab") || (systemSettings.profile == "worklab")) - then - inputs.home-manager-stable - else - inputs.home-manager-unstable); - - # Systems that can run tests: - supportedSystems = [ "aarch64-linux" "i686-linux" "x86_64-linux" ]; - - # Function to generate a set based on supported systems: - forAllSystems = inputs.nixpkgs.lib.genAttrs supportedSystems; - - # Attribute set of nixpkgs for each system: - nixpkgsFor = - forAllSystems (system: import inputs.nixpkgs { inherit system; }); + # create a list of all directories inside of ./hosts + # every directory in ./hosts has config for that machine + hosts = builtins.filter (x: x != null) (lib.mapAttrsToList (name: value: if (value == "directory") then name else null) (builtins.readDir ./hosts)); in { - homeConfigurations = { - user = home-manager.lib.homeManagerConfiguration { - inherit pkgs; - modules = [ - (./. + "/profiles" + ("/" + systemSettings.profile) + "/home.nix") # load home.nix from selected PROFILE - inputs.chaotic.homeManagerModules.default - ]; - extraSpecialArgs = { - # pass config variables from above - inherit pkgs-stable; - inherit pkgs-unstable; - inherit systemSettings; - inherit userSettings; - inherit inputs; + # generate a nixos configuration for every host in ./hosts + nixosConfigurations = builtins.listToAttrs + (map (host: { + name = host; + value = lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + # host specific config + { config.networking.hostName = host; } + (./hosts + "/${host}") + + # my modules + ./modules/system + + # home manager + inputs.home-manager.nixosModules.home-manager + { home-manager.extraSpecialArgs = { + inherit pkgs; + inherit pkgs-stable; + inherit inputs; + }; + } + + # chaos... control! + inputs.chaotic.nixosModules.default + ]; + specialArgs = { + inherit pkgs-stable; + inherit inputs; + }; }; - }; - }; - nixosConfigurations = { - system = lib.nixosSystem { - system = systemSettings.system; - modules = [ - (./. + "/profiles" + ("/" + systemSettings.profile) + "/configuration.nix") - ./system/bin/phoenix.nix - inputs.chaotic.nixosModules.default - ]; # load configuration.nix from selected PROFILE - specialArgs = { - # pass config variables from above - inherit pkgs-stable; - inherit pkgs-unstable; - inherit systemSettings; - inherit userSettings; - inherit inputs; - }; - }; - }; - nixOnDroidConfigurations = { - inherit pkgs; - default = inputs.nix-on-droid.lib.nixOnDroidConfiguration { - modules = [ ./profiles/nix-on-droid/configuration.nix ]; - }; - extraSpecialArgs = { - # pass config variables from above - inherit pkgs-stable; - inherit systemSettings; - inherit userSettings; - inherit inputs; - }; - }; - - packages = forAllSystems (system: - let pkgs = nixpkgsFor.${system}; - in { - default = self.packages.${system}.install; - - install = pkgs.writeShellApplication { - name = "install"; - runtimeInputs = with pkgs; [ git ]; # I could make this fancier by adding other deps - text = ''${./install.sh} "$@"''; - }; - }); - - apps = forAllSystems (system: { - default = self.apps.${system}.install; - - install = { - type = "app"; - program = "${self.packages.${system}.install}/bin/install"; - }; - }); + }) hosts); }; inputs = { @@ -198,17 +80,8 @@ nixpkgs-stable.url = "nixpkgs/nixos-24.11"; chaotic.url = "github:chaotic-cx/nyx/5071a4037c634d41a57926521fef2e179abe3bd9"; - home-manager-unstable.url = "github:nix-community/home-manager/master"; - home-manager-unstable.inputs.nixpkgs.follows = "nixpkgs"; - - home-manager-stable.url = "github:nix-community/home-manager/release-24.05"; - home-manager-stable.inputs.nixpkgs.follows = "nixpkgs-stable"; - - nix-on-droid = { - url = "github:nix-community/nix-on-droid/master"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.home-manager.follows = "home-manager-unstable"; - }; + home-manager.url = "github:nix-community/home-manager/master"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; hyprland = { type = "git"; @@ -247,5 +120,9 @@ url = "github:StevenBlack/hosts"; flake = false; }; + + secrets = { + url = "path:/etc/nixos.secrets"; + }; }; } diff --git a/profiles/README.org b/hosts/README.org similarity index 100% rename from profiles/README.org rename to hosts/README.org diff --git a/profiles/personal/README.org b/hosts/snowfire/README.org similarity index 100% rename from profiles/personal/README.org rename to hosts/snowfire/README.org diff --git a/hosts/snowfire/configuration.nix b/hosts/snowfire/configuration.nix new file mode 100644 index 00000000..d286b9a5 --- /dev/null +++ b/hosts/snowfire/configuration.nix @@ -0,0 +1,50 @@ +{ config, lib, pkgs, ... }: + +{ + config = { + systemSettings = { + # users + users = [ "emmet" ]; + adminUsers = [ "emmet" ]; + + # hardware + cachy.enable = true; + bluetooth.enable = true; + tlp.enable = true; + printing.enable = true; + + # software + flatpak.enable = false; + gaming.enable = true; + virtualization = { + docker.enable = true; + virtualMachines.enable = true; + }; + + # wm + hyprland.enable = true; + + # dotfiles + dotfilesDir = "/etc/nixos"; + + # security + security = { + automount.enable = true; + blocklist.enable = true; + doas.enable = true; + firejail.enable = false; # TODO setup firejail profiles + firewall.enable = true; + gpg.enable = true; + openvpn.enable = true; + sshd.enable = false; + }; + + # style + stylix = { + enable = true; + theme = "io"; + }; + }; + }; + +} diff --git a/hosts/snowfire/default.nix b/hosts/snowfire/default.nix new file mode 100644 index 00000000..b29cc697 --- /dev/null +++ b/hosts/snowfire/default.nix @@ -0,0 +1,14 @@ +{ config, lib, pkgs, ... }: + +{ + imports = [ + ./configuration.nix + ./hardware-configuration.nix + ]; + + config = { + home-manager.users = builtins.listToAttrs + (map (user: { name = user; value = + ({ imports = [ ./home.nix ../../modules/user ]; });}) config.systemSettings.users); + }; +} diff --git a/system/hardware-configuration.nix b/hosts/snowfire/hardware-configuration.nix similarity index 99% rename from system/hardware-configuration.nix rename to hosts/snowfire/hardware-configuration.nix index e990e025..7cb01af7 100644 --- a/system/hardware-configuration.nix +++ b/hosts/snowfire/hardware-configuration.nix @@ -16,6 +16,7 @@ boot.blacklistedKernelModules = [ "k10temp" ]; boot.kernelParams = [ "amd_pstate=active" "acpi_osi=Linux" "acpi_wake=USB0" ]; boot.extraModulePackages = with config.boot.kernelPackages; [ zenpower rtl8812au ]; + hardware.opengl.enable = true; hardware.opengl.extraPackages = [ pkgs.rocmPackages.clr.icd ]; hardware.opengl.extraPackages32 = [ ]; diff --git a/hosts/snowfire/home.nix b/hosts/snowfire/home.nix new file mode 100644 index 00000000..612addd0 --- /dev/null +++ b/hosts/snowfire/home.nix @@ -0,0 +1,44 @@ +{ config, lib, pkgs, ... }: + +{ + config = { + + userSettings = { + # setup + shell = { + enable = true; + apps.enable = true; + extraApps.enable = true; + }; + xdg.enable = true; + + # programs + browser = "qutebrowser"; + brave.enable = true; + editor = "emacs"; + ranger.enable = true; + git.enable = true; + engineering.enable = true; + art.enable = true; + flatpak.enable = false; + godot.enable = true; + keepass.enable = true; + media.enable = true; + music.enable = true; + office.enable = true; + recording.enable = true; + virtualization = { + virtualMachines.enable = true; + }; + + # wm + hyprland.enable = true; + + # style + stylix.enable = true; + + # hardware + bluetooth.enable = true; + }; + }; +} diff --git a/system/README.org b/modules/system/README.org similarity index 100% rename from system/README.org rename to modules/system/README.org diff --git a/modules/system/bluetooth/default.nix b/modules/system/bluetooth/default.nix new file mode 100644 index 00000000..13694c07 --- /dev/null +++ b/modules/system/bluetooth/default.nix @@ -0,0 +1,16 @@ +{ lib, config, ... }: + +let + cfg = config.systemSettings.bluetooth; +in { + options = { + systemSettings.bluetooth = { + enable = lib.mkEnableOption "Enable bluetooth"; + }; + }; + + config = lib.mkIf cfg.enable { + hardware.bluetooth.enable = true; + services.blueman.enable = true; + }; +} diff --git a/modules/system/configuration.nix b/modules/system/configuration.nix new file mode 100644 index 00000000..59421195 --- /dev/null +++ b/modules/system/configuration.nix @@ -0,0 +1,85 @@ +{ config, lib, pkgs, ... }: + +{ + config = { + # Journal + services.journald.extraConfig = "SystemMaxUse=50M\nSystemMaxFiles=5"; + services.journald.rateLimitBurst = 500; + services.journald.rateLimitInterval = "30s"; + + # Locale and TZ + time.timeZone = "America/Chicago"; + services.timesyncd.enable = true; + i18n.defaultLocale = "en_US.UTF-8"; + i18n.extraLocaleSettings = { + LC_ADDRESS = config.i18n.defaultLocale; + LC_IDENTIFICATION = config.i18n.defaultLocale; + LC_MEASUREMENT = config.i18n.defaultLocale; + LC_MONETARY = config.i18n.defaultLocale; + LC_NAME = config.i18n.defaultLocale; + LC_NUMERIC = config.i18n.defaultLocale; + LC_PAPER = config.i18n.defaultLocale; + LC_TELEPHONE = config.i18n.defaultLocale; + LC_TIME = config.i18n.defaultLocale; + }; + + # Use zsh + programs.zsh.enable = true; + environment.shells = with pkgs; [ zsh ]; + users.defaultUserShell = pkgs.zsh; + + # Fix nix path + nix.nixPath = [ "nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos" + "nixos-config=$HOME/dotfiles/system/configuration.nix" + "/nix/var/nix/profiles/per-user/root/channels" + ]; + + # Ensure nix flakes are enabled + nix.extraOptions = '' + experimental-features = nix-command flakes + ''; + + # Substituters + nix.settings = { + substituters = [ + "https://cache.nixos.org" + "https://nix-community.cachix.org" + ]; + trusted-public-keys = [ + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + ]; + }; + + # wheel group gets trusted access to nix daemon + nix.settings.trusted-users = [ "@wheel" ]; + + # Bootloader + # Use systemd-boot if uefi, default to grub otherwise + boot.loader.systemd-boot.enable = true; + boot.loader.systemd-boot.editor = false; + boot.loader.efi.canTouchEfiVariables = true; + boot.loader.efi.efiSysMountPoint = "/boot"; + + # Silent Boot + # https://wiki.archlinux.org/title/Silent_boot + boot.kernelParams = [ + "quiet" + "splash" + "vga=current" + "rd.systemd.show_status=false" + "rd.udev.log_level=3" + "udev.log_priority=3" + ]; + boot.initrd.systemd.enable = true; + boot.initrd.verbose = false; + boot.plymouth.enable = true; + + # Networking + networking.networkmanager.enable = true; # Use networkmanager + + # Remove bloat + programs.nano.enable = lib.mkForce false; + }; + +} diff --git a/modules/system/default.nix b/modules/system/default.nix new file mode 100644 index 00000000..0567ef85 --- /dev/null +++ b/modules/system/default.nix @@ -0,0 +1,29 @@ +{ lib, ... }: + +with lib; +let + # Recursively constructs an attrset of a given folder, recursing on directories, value of attrs is the filetype + getDir = dir: mapAttrs + (file: type: + if type == "directory" then getDir "${dir}/${file}" else type + ) + (builtins.readDir dir); + + # Collects all files of a directory as a list of strings of paths + files = dir: collect isString (mapAttrsRecursive (path: type: concatStringsSep "/" path) (getDir dir)); + + # Filters out directories that don't end with .nix or are this file, also makes the strings absolute + importAll = dir: map + (file: ./. + "/${file}") + (filter + (file: hasSuffix ".nix" file && file != "default.nix" && + ! lib.hasPrefix "x/taffybar/" file && + ! lib.hasSuffix "-hm.nix" file) + (files dir)); + +in +{ + + imports = importAll ./.; + +} diff --git a/modules/system/flatpak/default.nix b/modules/system/flatpak/default.nix new file mode 100644 index 00000000..17f1e1f4 --- /dev/null +++ b/modules/system/flatpak/default.nix @@ -0,0 +1,16 @@ +{ lib, config, ... }: + +let + cfg = config.systemSettings.flatpak; +in { + options = { + systemSettings.flatpak = { + enable = lib.mkEnableOption "Enable flatpaks"; + }; + }; + + config = lib.mkIf cfg.enable { + services.flatpak.enable = true; + xdg.portal.enable = true; + }; +} diff --git a/modules/system/gaming/default.nix b/modules/system/gaming/default.nix new file mode 100644 index 00000000..ae6d4b15 --- /dev/null +++ b/modules/system/gaming/default.nix @@ -0,0 +1,20 @@ +{ lib, config, pkgs, ... }: + +let + cfg = config.systemSettings.gaming; +in { + + options = { + systemSettings.gaming = { + enable = lib.mkEnableOption "Enable Steam and games"; + }; + }; + + config = lib.mkIf cfg.enable { + nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "steam" "steam-unwrapped" ]; + hardware.opengl.driSupport32Bit = true; + programs.steam.enable = true; + environment.systemPackages = with pkgs; [ pkgs.steam gamemode prismlauncher ]; + programs.gamemode.enable = true; + }; +} diff --git a/modules/system/hyprland/default.nix b/modules/system/hyprland/default.nix new file mode 100644 index 00000000..5d1011c6 --- /dev/null +++ b/modules/system/hyprland/default.nix @@ -0,0 +1,98 @@ +{ inputs, pkgs, pkgs-stable, config, lib, ... }: + +let + cfg = config.systemSettings.hyprland; +in +{ + options = { + systemSettings.hyprland = { + enable = lib.mkEnableOption "Enable hyprland"; + }; + }; + + config = lib.mkIf cfg.enable { + # Hyprland + programs = { + hyprland = { + enable = true; + package = inputs.hyprland.packages.${pkgs.system}.hyprland; + xwayland = { + enable = true; + }; + portalPackage = pkgs.xdg-desktop-portal-hyprland; + }; + }; + + # Necessary packages + environment.systemPackages = with pkgs; [ + jq + (sddm-chili-theme.override { + themeConfig = { + background = config.stylix.image; + ScreenWidth = 1920; + ScreenHeight = 1080; + blur = true; + recursiveBlurLoops = 3; + recursiveBlurRadius = 5; + # TODO fix icons with svgs patched from stylix colors + };}) + ]; + + # Display manager + services.xserver.displayManager.sddm = { + enable = true; + wayland.enable = true; + enableHidpi = true; + theme = "chili"; + package = pkgs.sddm; + }; + + # xwayland + services.xserver = { + enable = true; + xkb = { + layout = "us"; + variant = ""; + options = "caps:escape"; + }; + excludePackages = [ pkgs.xterm ]; + }; + + # Keyring + security.pam.services.login.enableGnomeKeyring = true; + services.gnome.gnome-keyring.enable = true; + + # Dbus + services.dbus = { + enable = true; + packages = [ pkgs.dconf ]; + }; + + programs.dconf.enable = true; + + # Pipewire + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + }; + + # Some fancy fonts + fonts.packages = with pkgs-stable; [ + # Fonts + nerdfonts + powerline + ]; + + # Auto rotate screen + programs.iio-hyprland = { + enable = true; + package = pkgs.iio-hyprland.overrideAttrs { + patches = [ ./iio-hyprland-hyprpaper.patch ]; + }; + }; + }; +} diff --git a/system/wm/iio-hyprland-hyprpaper.patch b/modules/system/hyprland/iio-hyprland-hyprpaper.patch similarity index 100% rename from system/wm/iio-hyprland-hyprpaper.patch rename to modules/system/hyprland/iio-hyprland-hyprpaper.patch diff --git a/modules/system/kernel/default.nix b/modules/system/kernel/default.nix new file mode 100644 index 00000000..ac579a7b --- /dev/null +++ b/modules/system/kernel/default.nix @@ -0,0 +1,29 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.systemSettings.cachy; +in +{ + options = { + systemSettings.cachy = { + enable = lib.mkEnableOption "Enable cachyos kernel"; + variant = lib.mkOption { + default = null; + type = lib.types.nullOr (lib.types.enum ["lto" "server" "hardened"]); + description = '' + This option determines the CachyOS kernel variant to use. + ''; + }; + }; + }; + + config = lib.mkIf cfg.enable { + boot.kernelPackages = lib.mkMerge [ + (lib.mkIf (cfg.variant == null) pkgs.linuxPackages_cachyos) + (lib.mkIf (cfg.variant == "lto") pkgs.linuxPackages_cachyos-lto) + (lib.mkIf (cfg.variant == "server") pkgs.linuxPackages_cachyos-server) + (lib.mkIf (cfg.variant == "hardened") pkgs.linuxPackages_cachyos-hardened) + ]; + boot.consoleLogLevel = 0; + }; +} diff --git a/modules/system/nix/default.nix b/modules/system/nix/default.nix new file mode 100644 index 00000000..a17e1de5 --- /dev/null +++ b/modules/system/nix/default.nix @@ -0,0 +1,31 @@ +{ config, lib, pkgs, inputs, ... }: + +let + caches = import inputs.secrets.caches; +in { + config = { + nix = { + package = pkgs.nix; + settings = { + substituters = + (lib.optionals (caches ? urls) caches.urls) ++ + [ + "https://cache.nixos.org" + "https://hyprland.cachix.org" + "https://nix-community.cachix.org" + ]; + trusted-public-keys = + (lib.optionals (caches ? publicKeys) caches.publicKeys) ++ + [ + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + ]; + trusted-users = config.systemSettings.adminUsers ++ [ "@wheel" ]; + auto-optimise-store = true; + download-buffer-size = 500000000; + }; + }; + system.stateVersion = "22.11"; + }; +} diff --git a/modules/system/phoenix/default.nix b/modules/system/phoenix/default.nix new file mode 100644 index 00000000..c7ac8895 --- /dev/null +++ b/modules/system/phoenix/default.nix @@ -0,0 +1,80 @@ +{ config, lib, pkgs, ... }: + +{ + options = { + systemSettings.dotfilesDir = lib.mkOption { + default = "/etc/nixos"; + description = "Absolute path to the dotfiles directory"; + type = lib.types.path; + }; + }; +# TODO disabled for debugging +# config = { +# environment.systemPackages = [ +# # TODO update script for config schema change +# (pkgs.writeScriptBin "phoenix" '' +# if [ "$1" = "sync" ]; then +# if [ "$#" = 1 ]; then +# ''+config.systemSettings.dotfilesDir+''/scripts/sync.sh; +# exit 0; +# elif [ "$2" = "user" ]; then +# ''+config.systemSettings.dotfilesDir+''/scripts/sync-user.sh; +# exit 0; +# elif [ "$2" = "system" ]; then +# ''+config.systemSettings.dotfilesDir+''/scripts/sync-system.sh; +# exit 0; +# else +# echo "Please pass 'system' or 'user' if supplying a second argument" +# fi +# elif [ "$1" = "refresh" ]; then +# if [ "$#" -gt 1 ]; then +# echo "Warning: The 'refresh' command has no subcommands (no $2 subcommand)"; +# fi +# ''+config.systemSettings.dotfilesDir+''/scripts/sync-posthook.sh; +# exit 0; +# elif [ "$1" = "update" ]; then +# ''+config.systemSettings.dotfilesDir+''/scripts/update.sh "''${@:2}"; +# exit 0; +# elif [ "$1" = "upgrade" ]; then +# if [ "$#" -gt 1 ]; then +# echo "Warning: The 'upgrade' command has no subcommands (no $2 subcommand)"; +# fi +# ''+config.systemSettings.dotfilesDir+''/scripts/upgrade.sh; +# exit 0; +# elif [ "$1" = "pull" ]; then +# if [ "$#" -gt 1 ]; then +# echo "Warning: The 'pull' command has no subcommands (no $2 subcommand)"; +# fi +# ''+config.systemSettings.dotfilesDir+''/scripts/pull.sh; +# exit 0; +# elif [ "$1" = "harden" ]; then +# if [ "$#" -gt 1 ]; then +# echo "Warning: The 'harden' command has no subcommands (no $2 subcommand)"; +# fi +# ''+config.systemSettings.dotfilesDir+''/scripts/harden.sh; +# exit 0; +# elif [ "$1" = "soften" ]; then +# if [ "$#" -gt 1 ]; then +# echo "Warning: The 'soften' command has no subcommands (no $2 subcommand)"; +# fi +# ''+config.systemSettings.dotfilesDir+''/scripts/soften.sh; +# exit 0; +# elif [ "$1" = "gc" ]; then +# if [ "$#" -gt 2 ]; then +# echo "Warning: The 'gc' command only accepts one argument (collect_older_than)"; +# fi +# if [ "$2" = "full" ]; then +# sudo nix-collect-garbage --delete-old; +# nix-collect-garbage --delete-old; +# elif [ "$2" ]; then +# sudo nix-collect-garbage --delete-older-than $2; +# nix-collect-garbage --delete-older-than $2; +# else +# sudo nix-collect-garbage --delete-older-than 30d; +# nix-collect-garbage --delete-older-than 30d; +# fi +# fi +# '') +# ]; +# }; +} diff --git a/modules/system/printing/default.nix b/modules/system/printing/default.nix new file mode 100644 index 00000000..d8ca9d77 --- /dev/null +++ b/modules/system/printing/default.nix @@ -0,0 +1,20 @@ +{ pkgs, lib, config, ... }: + +let + cfg = config.systemSettings.printing; +in { + options = { + systemSettings.printing = { + enable = lib.mkEnableOption "Enable printing"; + }; + }; + + config = lib.mkIf cfg.enable { + # Enable printing + services.printing.enable = true; + services.avahi.enable = true; + services.avahi.nssmdns4 = true; + services.avahi.openFirewall = true; + environment.systemPackages = [ pkgs.cups-filters ]; + }; +} diff --git a/modules/system/security/automount/default.nix b/modules/system/security/automount/default.nix new file mode 100644 index 00000000..1707bdb5 --- /dev/null +++ b/modules/system/security/automount/default.nix @@ -0,0 +1,17 @@ +{ config, lib, ... }: + +let + cfg = config.systemSettings.security.automount; +in { + options = { + systemSettings.security.automount = { + enable = lib.mkEnableOption "Enable automount"; + }; + }; + + config = lib.mkIf cfg.enable { + services.devmon.enable = true; + services.gvfs.enable = true; + services.udisks2.enable = true; + }; +} diff --git a/modules/system/security/blocklist/default.nix b/modules/system/security/blocklist/default.nix new file mode 100644 index 00000000..ee9b216e --- /dev/null +++ b/modules/system/security/blocklist/default.nix @@ -0,0 +1,18 @@ +{ config, lib, inputs, ... }: + +let + blocklist = builtins.readFile "${inputs.blocklist-hosts}/alternates/gambling-porn/hosts"; + cfg = config.systemSettings.security.blocklist; +in { + options = { + systemSettings.security.blocklist = { + enable = lib.mkEnableOption "Enable basic host blocking for bad websites"; + }; + }; + + config = lib.mkIf cfg.enable { + networking.extraHosts = '' + "${blocklist}" + ''; + }; +} diff --git a/modules/system/security/doas/default.nix b/modules/system/security/doas/default.nix new file mode 100644 index 00000000..0d6e3427 --- /dev/null +++ b/modules/system/security/doas/default.nix @@ -0,0 +1,42 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.systemSettings.security.doas; + adminUsers = config.systemSettings.adminUsers; +in { + options = { + systemSettings.security.doas = { + enable = lib.mkEnableOption "Replace sudo with doas"; + }; + }; + + config = lib.mkIf cfg.enable { + # Doas instead of sudo + security.doas.enable = true; + security.sudo.enable = false; + security.doas.extraRules = [ + { + users = adminUsers; + cmd = "nix"; + noPass = true; + keepEnv = true; + } + { + users = adminUsers; + cmd = "nixos-rebuild"; + noPass = true; + keepEnv = true; + } + { + users = adminUsers; + cmd = "nix-collect-garbage"; + noPass = true; + keepEnv = true; + } + ]; + + environment.systemPackages = [ + pkgs.doas-sudo-shim + ]; + }; +} diff --git a/modules/system/security/firejail/default.nix b/modules/system/security/firejail/default.nix new file mode 100644 index 00000000..35e3fb06 --- /dev/null +++ b/modules/system/security/firejail/default.nix @@ -0,0 +1,30 @@ +{ lib, config, pkgs, ... }: + +let + cfg = config.systemSettings.security.firejail; +in { + options = { + systemSettings.security.firejail = { + enable = lib.mkEnableOption "Use firejail on some apps for extra security"; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ firejail ]; + programs.firejail.enable = true; + programs.firejail.wrappedBinaries = { + #prismlauncher = { + # executable = "${pkgs.prismlauncher}/bin/prismlauncher"; + # profile = ./firejail-profiles/prismlauncher.profile; + #}; + #steam = { + # executable = "${pkgs.steam}/bin/steam"; + # profile = "${pkgs.firejail}/etc/firejail/steam.profile"; + #}; + #steam-run = { + # executable = "${pkgs.steam}/bin/steam-run"; + # profile = "${pkgs.firejail}/etc/firejail/steam.profile"; + #}; + }; + }; +} diff --git a/system/security/firejail-profiles/prismlauncher.profile b/modules/system/security/firejail/profiles/prismlauncher.profile similarity index 100% rename from system/security/firejail-profiles/prismlauncher.profile rename to modules/system/security/firejail/profiles/prismlauncher.profile diff --git a/modules/system/security/firewall/default.nix b/modules/system/security/firewall/default.nix new file mode 100644 index 00000000..ed6cc3a4 --- /dev/null +++ b/modules/system/security/firewall/default.nix @@ -0,0 +1,22 @@ +{ config, lib, ... }: + +let + cfg = config.systemSettings.security.firewall; +in { + options = { + systemSettings.security.firewall = { + # TODO make this more granular and better :| + enable = lib.mkEnableOption "Actvate firewall with ports open only for syncthing"; + }; + }; + + config = lib.mkIf cfg.enable { + # Firewall + networking.firewall.enable = true; + # Open ports in the firewall. + networking.firewall.allowedTCPPorts = [ 22000 21027 ]; # syncthing + networking.firewall.allowedUDPPorts = [ 22000 21027 ]; # syncthing + # Or disable the firewall altogether. + # networking.firewall.enable = false; + }; +} diff --git a/modules/system/security/gpg/default.nix b/modules/system/security/gpg/default.nix new file mode 100644 index 00000000..0c036d13 --- /dev/null +++ b/modules/system/security/gpg/default.nix @@ -0,0 +1,18 @@ +{ lib, config, ... }: + +let + cfg = config.systemSettings.security.gpg; +in { + options = { + systemSettings.security.gpg = { + enable = lib.mkEnableOption "Enable gpg"; + }; + }; + + config = lib.mkIf cfg.enable { + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; + }; +} diff --git a/modules/system/security/openvpn/default.nix b/modules/system/security/openvpn/default.nix new file mode 100644 index 00000000..a777447f --- /dev/null +++ b/modules/system/security/openvpn/default.nix @@ -0,0 +1,16 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.systemSettings.security.openvpn; +in { + options = { + systemSettings.security.openvpn = { + enable = lib.mkEnableOption "Enable openvpn"; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ pkgs.openvpn ]; + environment.etc.openvpn.source = "${pkgs.update-resolv-conf}/libexec/openvpn"; + }; +} diff --git a/modules/system/security/sshd/default.nix b/modules/system/security/sshd/default.nix new file mode 100644 index 00000000..2c1cd9d2 --- /dev/null +++ b/modules/system/security/sshd/default.nix @@ -0,0 +1,25 @@ +{ config, lib, ... }: + +let + cfg = config.systemSettings.security.sshd; +in { + options = { + systemSettings.security.sshd = { + enable = lib.mkEnableOption "Enable incoming ssh connections"; + }; + }; + + config = lib.mkIf cfg.enable { + # Enable incoming ssh + services.openssh = { + enable = true; + openFirewall = true; + settings = { + PasswordAuthentication = false; + PermitRootLogin = "no"; + }; + }; + # Don't forget to set: + # users.users.${username}.openssh.authorizedKeys.keys = "myAuthorizedKey"; + }; +} diff --git a/modules/system/stylix/default.nix b/modules/system/stylix/default.nix new file mode 100644 index 00000000..18863442 --- /dev/null +++ b/modules/system/stylix/default.nix @@ -0,0 +1,56 @@ +{ lib, config, pkgs, inputs, ... }: + +let + cfg = config.systemSettings.stylix; + theme = import (./. + "../../../themes"+("/"+config.systemSettings.stylix.theme)); +in +{ + options = { + systemSettings.stylix = { + enable = lib.mkEnableOption "Enable stylix theming"; + }; + systemSettings.stylix.theme = lib.mkOption { + default = "io"; + type = lib.types.enum (builtins.attrNames (lib.filterAttrs (name: type: type == "directory") (builtins.readDir ../../themes))); + description = "Theme for stylix to use system wide. A list of themes can be found in the `themes` directory."; + }; + }; + + imports = [ inputs.stylix.nixosModules.stylix ]; + + config = lib.mkIf cfg.enable { + stylix.enable = true; + stylix.autoEnable = false; + stylix.polarity = theme.polarity; + stylix.image = pkgs.fetchurl { + url = theme.backgroundUrl; + sha256 = theme.backgroundSha256; + }; + stylix.base16Scheme = theme; + stylix.fonts = { + # TODO abstract fonts into an option + monospace = { + name = "FiraCode Nerd Font"; + package = pkgs.nerd-fonts.fira-code; + }; + serif = { + name = "FiraCode Nerd Font"; + package = pkgs.nerd-fonts.fira-code; + }; + sansSerif = { + name = "FiraCode Nerd Font"; + package = pkgs.nerd-fonts.fira-code; + }; + emoji = { + name = "Noto Color Emoji"; + package = pkgs.noto-fonts-emoji-blob-bin; + }; + }; + + stylix.targets.console.enable = true; + + environment.sessionVariables = { + QT_QPA_PLATFORMTHEME = "qt5ct"; + }; + }; +} diff --git a/modules/system/tlp/default.nix b/modules/system/tlp/default.nix new file mode 100644 index 00000000..4fadaccc --- /dev/null +++ b/modules/system/tlp/default.nix @@ -0,0 +1,58 @@ +{ config, lib, ... }: + +let + cfg = config.systemSettings.tlp; +in { + options = { + systemSettings.tlp = { + enable = lib.mkEnableOption "Enable tlp power management"; + }; + }; + + config = lib.mkIf cfg.enable { + services.tlp = { + enable = true; + settings = { + CPU_SCALING_GOVERNOR_ON_AC = "performance"; + CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; + CPU_ENERGY_PERF_POLICY_ON_BAT = "balance"; + CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance"; + CPU_DRIVER_OPMODE_ON_AC = "active"; + CPU_DRIVER_OPMODE_ON_BAT = "active"; + + WIFI_PWR_ON_AC = "on"; + WIFI_PWR_ON_BAT = "on"; + RUNTIME_PM_ON_AC = "auto"; + RUNTIME_PM_ON_BAT = "auto"; + + CPU_MIN_PERF_ON_AC = 10; + CPU_MAX_PERF_ON_AC = 90; + CPU_MIN_PERF_ON_BAT = 10; + CPU_MAX_PERF_ON_BAT = 50; + + CPU_BOOST_ON_AC = 1; + CPU_BOOST_ON_BAT = 0; + CPU_HWP_DYN_BOOST_ON_AC = 1; + CPU_HWP_DYN_BOOST_ON_BAT = 0; + + START_CHARGE_THRESH_BAT0 = 75; + STOP_CHARGE_THRESH_BAT0 = 80; + + MEM_SLEEP_ON_AC = "deep"; + MEM_SLEEP_ON_BAT = "deep"; + + PLATFORM_PROFILE_ON_AC = "performance"; + PLATFORM_PROFILE_ON_BAT = "low-power"; + + RADEON_DPM_STATE_ON_AC = "performance"; + RADEON_DPM_STATE_ON_BAT = "battery"; + RADEON_POWER_PROFILE_ON_AC = "high"; + RADEON_POWER_PROFILE_ON_BAT = "low"; + + INTEL_GPU_MIN_FREQ_ON_AC = 600; + INTEL_GPU_MIN_FREQ_ON_BAT = 600; + }; + }; + }; + +} diff --git a/modules/system/users/default.nix b/modules/system/users/default.nix new file mode 100644 index 00000000..41a8088f --- /dev/null +++ b/modules/system/users/default.nix @@ -0,0 +1,41 @@ +{ config, lib, inputs, ... }: +let + userInfo = import inputs.secrets.userInfo; +in { + options = { + systemSettings = { + users = lib.mkOption { + description = "List of desktop users to create on the system"; + type = lib.types.listOf lib.types.str; + }; + adminUsers = lib.mkOption { + description = "List of desktop users to grant admin (sudo) access on the system"; + type = lib.types.listOf lib.types.str; + }; + }; + }; + config = { + + users.users = builtins.listToAttrs + (map (user: { + name = user; + value = { + description = userInfo.${user}.name; + isNormalUser = true; + extraGroups = [ "networkmanager" "input" "dialout" "video" "render" ] ++ (lib.optionals (lib.any (x: x == user) config.systemSettings.adminUsers) [ "wheel" ]); + createHome = true; + }; + }) config.systemSettings.users); + + home-manager.users = builtins.listToAttrs + (map (user: { + name = user; + value = { + home.username = user; + home.homeDirectory = "/home/"+user; + userSettings.name = lib.mkIf (userInfo.${user} ? name) userInfo.${user}.name; + userSettings.email = lib.mkIf (userInfo.${user} ? email ) userInfo.${user}.email; + }; + }) config.systemSettings.users); + }; +} diff --git a/modules/system/virtualization/docker/default.nix b/modules/system/virtualization/docker/default.nix new file mode 100644 index 00000000..b153f1ab --- /dev/null +++ b/modules/system/virtualization/docker/default.nix @@ -0,0 +1,26 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.systemSettings.virtualization.docker; + adminUsers = config.systemSettings.adminUsers; +in { + options = { + systemSettings.virtualization.docker = { + enable = lib.mkEnableOption "Enable docker"; + }; + }; + + config = { + virtualisation.docker = { + enable = true; + enableOnBoot = true; + autoPrune.enable = true; + }; + users.users = builtins.listToAttrs (map (user: { name = user; value = { extraGroups = [ "docker" ];};}) adminUsers); + environment.systemPackages = with pkgs; [ + docker + docker-compose + lazydocker + ]; + }; +} diff --git a/modules/system/virtualization/virtual-machines/default.nix b/modules/system/virtualization/virtual-machines/default.nix new file mode 100644 index 00000000..150988c9 --- /dev/null +++ b/modules/system/virtualization/virtual-machines/default.nix @@ -0,0 +1,23 @@ +{ lib, config, pkgs, ... }: + +let cfg = config.systemSettings.virtualization.virtualMachines; +in { + options = { + systemSettings.virtualization.virtualMachines = { + enable = lib.mkEnableOption "Enable qemu virtual machines, distrobox, and waydroid"; + }; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ virt-manager distrobox ]; + virtualisation.libvirtd = { + allowedBridges = [ + "nm-bridge" + "virbr0" + ]; + enable = true; + qemu.runAsRoot = false; + }; + virtualisation.waydroid.enable = true; + }; +} diff --git a/themes/README.org b/modules/themes/README.org similarity index 100% rename from themes/README.org rename to modules/themes/README.org diff --git a/themes/alph/README.org b/modules/themes/alph/README.org similarity index 100% rename from themes/alph/README.org rename to modules/themes/alph/README.org diff --git a/themes/alph/default.nix b/modules/themes/alph/default.nix similarity index 100% rename from themes/alph/default.nix rename to modules/themes/alph/default.nix diff --git a/themes/ashes/README.org b/modules/themes/ashes/README.org similarity index 100% rename from themes/ashes/README.org rename to modules/themes/ashes/README.org diff --git a/themes/ashes/default.nix b/modules/themes/ashes/default.nix similarity index 100% rename from themes/ashes/default.nix rename to modules/themes/ashes/default.nix diff --git a/themes/atelier-cave/README.org b/modules/themes/atelier-cave/README.org similarity index 100% rename from themes/atelier-cave/README.org rename to modules/themes/atelier-cave/README.org diff --git a/themes/atelier-cave/default.nix b/modules/themes/atelier-cave/default.nix similarity index 100% rename from themes/atelier-cave/default.nix rename to modules/themes/atelier-cave/default.nix diff --git a/themes/atelier-dune/README.org b/modules/themes/atelier-dune/README.org similarity index 100% rename from themes/atelier-dune/README.org rename to modules/themes/atelier-dune/README.org diff --git a/themes/atelier-dune/default.nix b/modules/themes/atelier-dune/default.nix similarity index 100% rename from themes/atelier-dune/default.nix rename to modules/themes/atelier-dune/default.nix diff --git a/themes/atelier-estuary/README.org b/modules/themes/atelier-estuary/README.org similarity index 100% rename from themes/atelier-estuary/README.org rename to modules/themes/atelier-estuary/README.org diff --git a/themes/atelier-estuary/default.nix b/modules/themes/atelier-estuary/default.nix similarity index 100% rename from themes/atelier-estuary/default.nix rename to modules/themes/atelier-estuary/default.nix diff --git a/themes/atelier-forest/README.org b/modules/themes/atelier-forest/README.org similarity index 100% rename from themes/atelier-forest/README.org rename to modules/themes/atelier-forest/README.org diff --git a/themes/atelier-forest/default.nix b/modules/themes/atelier-forest/default.nix similarity index 100% rename from themes/atelier-forest/default.nix rename to modules/themes/atelier-forest/default.nix diff --git a/themes/atelier-heath/README.org b/modules/themes/atelier-heath/README.org similarity index 100% rename from themes/atelier-heath/README.org rename to modules/themes/atelier-heath/README.org diff --git a/themes/atelier-heath/default.nix b/modules/themes/atelier-heath/default.nix similarity index 100% rename from themes/atelier-heath/default.nix rename to modules/themes/atelier-heath/default.nix diff --git a/themes/atelier-lakeside/README.org b/modules/themes/atelier-lakeside/README.org similarity index 100% rename from themes/atelier-lakeside/README.org rename to modules/themes/atelier-lakeside/README.org diff --git a/themes/atelier-lakeside/default.nix b/modules/themes/atelier-lakeside/default.nix similarity index 100% rename from themes/atelier-lakeside/default.nix rename to modules/themes/atelier-lakeside/default.nix diff --git a/themes/atelier-plateau/README.org b/modules/themes/atelier-plateau/README.org similarity index 100% rename from themes/atelier-plateau/README.org rename to modules/themes/atelier-plateau/README.org diff --git a/themes/atelier-plateau/default.nix b/modules/themes/atelier-plateau/default.nix similarity index 100% rename from themes/atelier-plateau/default.nix rename to modules/themes/atelier-plateau/default.nix diff --git a/themes/atelier-savanna/README.org b/modules/themes/atelier-savanna/README.org similarity index 100% rename from themes/atelier-savanna/README.org rename to modules/themes/atelier-savanna/README.org diff --git a/themes/atelier-savanna/default.nix b/modules/themes/atelier-savanna/default.nix similarity index 100% rename from themes/atelier-savanna/default.nix rename to modules/themes/atelier-savanna/default.nix diff --git a/themes/atelier-seaside/README.org b/modules/themes/atelier-seaside/README.org similarity index 100% rename from themes/atelier-seaside/README.org rename to modules/themes/atelier-seaside/README.org diff --git a/themes/atelier-seaside/default.nix b/modules/themes/atelier-seaside/default.nix similarity index 100% rename from themes/atelier-seaside/default.nix rename to modules/themes/atelier-seaside/default.nix diff --git a/themes/atelier-sulphurpool/README.org b/modules/themes/atelier-sulphurpool/README.org similarity index 100% rename from themes/atelier-sulphurpool/README.org rename to modules/themes/atelier-sulphurpool/README.org diff --git a/themes/atelier-sulphurpool/default.nix b/modules/themes/atelier-sulphurpool/default.nix similarity index 100% rename from themes/atelier-sulphurpool/default.nix rename to modules/themes/atelier-sulphurpool/default.nix diff --git a/themes/ayu-dark/README.org b/modules/themes/ayu-dark/README.org similarity index 100% rename from themes/ayu-dark/README.org rename to modules/themes/ayu-dark/README.org diff --git a/themes/ayu-dark/default.nix b/modules/themes/ayu-dark/default.nix similarity index 100% rename from themes/ayu-dark/default.nix rename to modules/themes/ayu-dark/default.nix diff --git a/themes/background-test.sh b/modules/themes/background-test.sh similarity index 100% rename from themes/background-test.sh rename to modules/themes/background-test.sh diff --git a/themes/bespin/README.org b/modules/themes/bespin/README.org similarity index 100% rename from themes/bespin/README.org rename to modules/themes/bespin/README.org diff --git a/themes/bespin/default.nix b/modules/themes/bespin/default.nix similarity index 100% rename from themes/bespin/default.nix rename to modules/themes/bespin/default.nix diff --git a/themes/caret/README.org b/modules/themes/caret/README.org similarity index 100% rename from themes/caret/README.org rename to modules/themes/caret/README.org diff --git a/themes/caret/default.nix b/modules/themes/caret/default.nix similarity index 100% rename from themes/caret/default.nix rename to modules/themes/caret/default.nix diff --git a/themes/catppuccin-frappe/README.org b/modules/themes/catppuccin-frappe/README.org similarity index 100% rename from themes/catppuccin-frappe/README.org rename to modules/themes/catppuccin-frappe/README.org diff --git a/themes/catppuccin-frappe/default.nix b/modules/themes/catppuccin-frappe/default.nix similarity index 100% rename from themes/catppuccin-frappe/default.nix rename to modules/themes/catppuccin-frappe/default.nix diff --git a/themes/catppuccin-mocha/README.org b/modules/themes/catppuccin-mocha/README.org similarity index 100% rename from themes/catppuccin-mocha/README.org rename to modules/themes/catppuccin-mocha/README.org diff --git a/themes/catppuccin-mocha/default.nix b/modules/themes/catppuccin-mocha/default.nix similarity index 100% rename from themes/catppuccin-mocha/default.nix rename to modules/themes/catppuccin-mocha/default.nix diff --git a/themes/darkmoss/README.org b/modules/themes/darkmoss/README.org similarity index 100% rename from themes/darkmoss/README.org rename to modules/themes/darkmoss/README.org diff --git a/themes/darkmoss/default.nix b/modules/themes/darkmoss/default.nix similarity index 100% rename from themes/darkmoss/default.nix rename to modules/themes/darkmoss/default.nix diff --git a/themes/doom-one/README.org b/modules/themes/doom-one/README.org similarity index 100% rename from themes/doom-one/README.org rename to modules/themes/doom-one/README.org diff --git a/themes/doom-one/default.nix b/modules/themes/doom-one/default.nix similarity index 100% rename from themes/doom-one/default.nix rename to modules/themes/doom-one/default.nix diff --git a/themes/dracula/README.org b/modules/themes/dracula/README.org similarity index 100% rename from themes/dracula/README.org rename to modules/themes/dracula/README.org diff --git a/themes/dracula/default.nix b/modules/themes/dracula/default.nix similarity index 100% rename from themes/dracula/default.nix rename to modules/themes/dracula/default.nix diff --git a/themes/ember/README.org b/modules/themes/ember/README.org similarity index 100% rename from themes/ember/README.org rename to modules/themes/ember/README.org diff --git a/themes/ember/default.nix b/modules/themes/ember/default.nix similarity index 100% rename from themes/ember/default.nix rename to modules/themes/ember/default.nix diff --git a/themes/emil/README.org b/modules/themes/emil/README.org similarity index 100% rename from themes/emil/README.org rename to modules/themes/emil/README.org diff --git a/themes/emil/default.nix b/modules/themes/emil/default.nix similarity index 100% rename from themes/emil/default.nix rename to modules/themes/emil/default.nix diff --git a/themes/eris/README.org b/modules/themes/eris/README.org similarity index 100% rename from themes/eris/README.org rename to modules/themes/eris/README.org diff --git a/themes/eris/default.nix b/modules/themes/eris/default.nix similarity index 100% rename from themes/eris/default.nix rename to modules/themes/eris/default.nix diff --git a/themes/eva/README.org b/modules/themes/eva/README.org similarity index 100% rename from themes/eva/README.org rename to modules/themes/eva/README.org diff --git a/themes/eva/default.nix b/modules/themes/eva/default.nix similarity index 100% rename from themes/eva/default.nix rename to modules/themes/eva/default.nix diff --git a/themes/everforest/README.org b/modules/themes/everforest/README.org similarity index 100% rename from themes/everforest/README.org rename to modules/themes/everforest/README.org diff --git a/themes/everforest/default.nix b/modules/themes/everforest/default.nix similarity index 100% rename from themes/everforest/default.nix rename to modules/themes/everforest/default.nix diff --git a/themes/fairy-floss/README.org b/modules/themes/fairy-floss/README.org similarity index 100% rename from themes/fairy-floss/README.org rename to modules/themes/fairy-floss/README.org diff --git a/themes/fairy-floss/default.nix b/modules/themes/fairy-floss/default.nix similarity index 100% rename from themes/fairy-floss/default.nix rename to modules/themes/fairy-floss/default.nix diff --git a/themes/gigavolt/README.org b/modules/themes/gigavolt/README.org similarity index 100% rename from themes/gigavolt/README.org rename to modules/themes/gigavolt/README.org diff --git a/themes/gigavolt/default.nix b/modules/themes/gigavolt/default.nix similarity index 100% rename from themes/gigavolt/default.nix rename to modules/themes/gigavolt/default.nix diff --git a/themes/gruvbox-dark-hard/README.org b/modules/themes/gruvbox-dark-hard/README.org similarity index 100% rename from themes/gruvbox-dark-hard/README.org rename to modules/themes/gruvbox-dark-hard/README.org diff --git a/themes/gruvbox-dark-hard/default.nix b/modules/themes/gruvbox-dark-hard/default.nix similarity index 100% rename from themes/gruvbox-dark-hard/default.nix rename to modules/themes/gruvbox-dark-hard/default.nix diff --git a/themes/gruvbox-dark-medium/README.org b/modules/themes/gruvbox-dark-medium/README.org similarity index 100% rename from themes/gruvbox-dark-medium/README.org rename to modules/themes/gruvbox-dark-medium/README.org diff --git a/themes/gruvbox-dark-medium/default.nix b/modules/themes/gruvbox-dark-medium/default.nix similarity index 100% rename from themes/gruvbox-dark-medium/default.nix rename to modules/themes/gruvbox-dark-medium/default.nix diff --git a/themes/gruvbox-light-hard/README.org b/modules/themes/gruvbox-light-hard/README.org similarity index 100% rename from themes/gruvbox-light-hard/README.org rename to modules/themes/gruvbox-light-hard/README.org diff --git a/themes/gruvbox-light-hard/default.nix b/modules/themes/gruvbox-light-hard/default.nix similarity index 100% rename from themes/gruvbox-light-hard/default.nix rename to modules/themes/gruvbox-light-hard/default.nix diff --git a/themes/gruvbox-light-medium/README.org b/modules/themes/gruvbox-light-medium/README.org similarity index 100% rename from themes/gruvbox-light-medium/README.org rename to modules/themes/gruvbox-light-medium/README.org diff --git a/themes/gruvbox-light-medium/default.nix b/modules/themes/gruvbox-light-medium/default.nix similarity index 100% rename from themes/gruvbox-light-medium/default.nix rename to modules/themes/gruvbox-light-medium/default.nix diff --git a/themes/helios/README.org b/modules/themes/helios/README.org similarity index 100% rename from themes/helios/README.org rename to modules/themes/helios/README.org diff --git a/themes/helios/default.nix b/modules/themes/helios/default.nix similarity index 100% rename from themes/helios/default.nix rename to modules/themes/helios/default.nix diff --git a/themes/henna/README.org b/modules/themes/henna/README.org similarity index 100% rename from themes/henna/README.org rename to modules/themes/henna/README.org diff --git a/themes/henna/default.nix b/modules/themes/henna/default.nix similarity index 100% rename from themes/henna/default.nix rename to modules/themes/henna/default.nix diff --git a/themes/horizon-dark/README.org b/modules/themes/horizon-dark/README.org similarity index 100% rename from themes/horizon-dark/README.org rename to modules/themes/horizon-dark/README.org diff --git a/themes/horizon-dark/default.nix b/modules/themes/horizon-dark/default.nix similarity index 100% rename from themes/horizon-dark/default.nix rename to modules/themes/horizon-dark/default.nix diff --git a/themes/io/README.org b/modules/themes/io/README.org similarity index 100% rename from themes/io/README.org rename to modules/themes/io/README.org diff --git a/themes/io/default.nix b/modules/themes/io/default.nix similarity index 100% rename from themes/io/default.nix rename to modules/themes/io/default.nix diff --git a/themes/isotope/README.org b/modules/themes/isotope/README.org similarity index 100% rename from themes/isotope/README.org rename to modules/themes/isotope/README.org diff --git a/themes/isotope/default.nix b/modules/themes/isotope/default.nix similarity index 100% rename from themes/isotope/default.nix rename to modules/themes/isotope/default.nix diff --git a/themes/manegarm/README.org b/modules/themes/manegarm/README.org similarity index 100% rename from themes/manegarm/README.org rename to modules/themes/manegarm/README.org diff --git a/themes/manegarm/default.nix b/modules/themes/manegarm/default.nix similarity index 100% rename from themes/manegarm/default.nix rename to modules/themes/manegarm/default.nix diff --git a/themes/material-vivid/README.org b/modules/themes/material-vivid/README.org similarity index 100% rename from themes/material-vivid/README.org rename to modules/themes/material-vivid/README.org diff --git a/themes/material-vivid/default.nix b/modules/themes/material-vivid/default.nix similarity index 100% rename from themes/material-vivid/default.nix rename to modules/themes/material-vivid/default.nix diff --git a/themes/miramare/README.org b/modules/themes/miramare/README.org similarity index 100% rename from themes/miramare/README.org rename to modules/themes/miramare/README.org diff --git a/themes/miramare/default.nix b/modules/themes/miramare/default.nix similarity index 100% rename from themes/miramare/default.nix rename to modules/themes/miramare/default.nix diff --git a/themes/monokai/README.org b/modules/themes/monokai/README.org similarity index 100% rename from themes/monokai/README.org rename to modules/themes/monokai/README.org diff --git a/themes/monokai/default.nix b/modules/themes/monokai/default.nix similarity index 100% rename from themes/monokai/default.nix rename to modules/themes/monokai/default.nix diff --git a/themes/nord/README.org b/modules/themes/nord/README.org similarity index 100% rename from themes/nord/README.org rename to modules/themes/nord/README.org diff --git a/themes/nord/default.nix b/modules/themes/nord/default.nix similarity index 100% rename from themes/nord/default.nix rename to modules/themes/nord/default.nix diff --git a/themes/oceanic-next/README.org b/modules/themes/oceanic-next/README.org similarity index 100% rename from themes/oceanic-next/README.org rename to modules/themes/oceanic-next/README.org diff --git a/themes/oceanic-next/default.nix b/modules/themes/oceanic-next/default.nix similarity index 100% rename from themes/oceanic-next/default.nix rename to modules/themes/oceanic-next/default.nix diff --git a/themes/old-hope/README.org b/modules/themes/old-hope/README.org similarity index 100% rename from themes/old-hope/README.org rename to modules/themes/old-hope/README.org diff --git a/themes/old-hope/default.nix b/modules/themes/old-hope/default.nix similarity index 100% rename from themes/old-hope/default.nix rename to modules/themes/old-hope/default.nix diff --git a/themes/outrun-dark/README.org b/modules/themes/outrun-dark/README.org similarity index 100% rename from themes/outrun-dark/README.org rename to modules/themes/outrun-dark/README.org diff --git a/themes/outrun-dark/default.nix b/modules/themes/outrun-dark/default.nix similarity index 100% rename from themes/outrun-dark/default.nix rename to modules/themes/outrun-dark/default.nix diff --git a/themes/selenized-dark/README.org b/modules/themes/selenized-dark/README.org similarity index 100% rename from themes/selenized-dark/README.org rename to modules/themes/selenized-dark/README.org diff --git a/themes/selenized-dark/default.nix b/modules/themes/selenized-dark/default.nix similarity index 100% rename from themes/selenized-dark/default.nix rename to modules/themes/selenized-dark/default.nix diff --git a/themes/selenized-light/README.org b/modules/themes/selenized-light/README.org similarity index 100% rename from themes/selenized-light/README.org rename to modules/themes/selenized-light/README.org diff --git a/themes/selenized-light/default.nix b/modules/themes/selenized-light/default.nix similarity index 100% rename from themes/selenized-light/default.nix rename to modules/themes/selenized-light/default.nix diff --git a/themes/solarized-dark/README.org b/modules/themes/solarized-dark/README.org similarity index 100% rename from themes/solarized-dark/README.org rename to modules/themes/solarized-dark/README.org diff --git a/themes/solarized-dark/default.nix b/modules/themes/solarized-dark/default.nix similarity index 100% rename from themes/solarized-dark/default.nix rename to modules/themes/solarized-dark/default.nix diff --git a/themes/solarized-light/README.org b/modules/themes/solarized-light/README.org similarity index 100% rename from themes/solarized-light/README.org rename to modules/themes/solarized-light/README.org diff --git a/themes/solarized-light/default.nix b/modules/themes/solarized-light/default.nix similarity index 100% rename from themes/solarized-light/default.nix rename to modules/themes/solarized-light/default.nix diff --git a/themes/spaceduck/README.org b/modules/themes/spaceduck/README.org similarity index 100% rename from themes/spaceduck/README.org rename to modules/themes/spaceduck/README.org diff --git a/themes/spaceduck/default.nix b/modules/themes/spaceduck/default.nix similarity index 100% rename from themes/spaceduck/default.nix rename to modules/themes/spaceduck/default.nix diff --git a/themes/stella/README.org b/modules/themes/stella/README.org similarity index 100% rename from themes/stella/README.org rename to modules/themes/stella/README.org diff --git a/themes/stella/default.nix b/modules/themes/stella/default.nix similarity index 100% rename from themes/stella/default.nix rename to modules/themes/stella/default.nix diff --git a/themes/summerfruit-dark/README.org b/modules/themes/summerfruit-dark/README.org similarity index 100% rename from themes/summerfruit-dark/README.org rename to modules/themes/summerfruit-dark/README.org diff --git a/themes/summerfruit-dark/default.nix b/modules/themes/summerfruit-dark/default.nix similarity index 100% rename from themes/summerfruit-dark/default.nix rename to modules/themes/summerfruit-dark/default.nix diff --git a/themes/tomorrow-night/README.org b/modules/themes/tomorrow-night/README.org similarity index 100% rename from themes/tomorrow-night/README.org rename to modules/themes/tomorrow-night/README.org diff --git a/themes/tomorrow-night/default.nix b/modules/themes/tomorrow-night/default.nix similarity index 100% rename from themes/tomorrow-night/default.nix rename to modules/themes/tomorrow-night/default.nix diff --git a/themes/twilight/README.org b/modules/themes/twilight/README.org similarity index 100% rename from themes/twilight/README.org rename to modules/themes/twilight/README.org diff --git a/themes/twilight/default.nix b/modules/themes/twilight/default.nix similarity index 100% rename from themes/twilight/default.nix rename to modules/themes/twilight/default.nix diff --git a/themes/ubuntu/README.org b/modules/themes/ubuntu/README.org similarity index 100% rename from themes/ubuntu/README.org rename to modules/themes/ubuntu/README.org diff --git a/themes/ubuntu/default.nix b/modules/themes/ubuntu/default.nix similarity index 100% rename from themes/ubuntu/default.nix rename to modules/themes/ubuntu/default.nix diff --git a/themes/uwunicorn/README.org b/modules/themes/uwunicorn/README.org similarity index 100% rename from themes/uwunicorn/README.org rename to modules/themes/uwunicorn/README.org diff --git a/themes/uwunicorn/default.nix b/modules/themes/uwunicorn/default.nix similarity index 100% rename from themes/uwunicorn/default.nix rename to modules/themes/uwunicorn/default.nix diff --git a/themes/windows-95/README.org b/modules/themes/windows-95/README.org similarity index 100% rename from themes/windows-95/README.org rename to modules/themes/windows-95/README.org diff --git a/themes/windows-95/default.nix b/modules/themes/windows-95/default.nix similarity index 100% rename from themes/windows-95/default.nix rename to modules/themes/windows-95/default.nix diff --git a/themes/woodland/README.org b/modules/themes/woodland/README.org similarity index 100% rename from themes/woodland/README.org rename to modules/themes/woodland/README.org diff --git a/themes/woodland/default.nix b/modules/themes/woodland/default.nix similarity index 100% rename from themes/woodland/default.nix rename to modules/themes/woodland/default.nix diff --git a/themes/xcode-dusk/README.org b/modules/themes/xcode-dusk/README.org similarity index 100% rename from themes/xcode-dusk/README.org rename to modules/themes/xcode-dusk/README.org diff --git a/themes/xcode-dusk/default.nix b/modules/themes/xcode-dusk/default.nix similarity index 100% rename from themes/xcode-dusk/default.nix rename to modules/themes/xcode-dusk/default.nix diff --git a/user/README.org b/modules/user/README.org similarity index 100% rename from user/README.org rename to modules/user/README.org diff --git a/modules/user/art/default.nix b/modules/user/art/default.nix new file mode 100644 index 00000000..02d8158d --- /dev/null +++ b/modules/user/art/default.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.userSettings.art; +in { + options = { + userSettings.art = { + enable = lib.mkEnableOption "Enable art apps"; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + gimp + krita + pinta + inkscape + libresprite + ]; + userSettings.blender.enable = true; + }; +} diff --git a/user/app/blender/applyprefs.py b/modules/user/blender/applyprefs.py similarity index 100% rename from user/app/blender/applyprefs.py rename to modules/user/blender/applyprefs.py diff --git a/modules/user/blender/default.nix b/modules/user/blender/default.nix new file mode 100644 index 00000000..c6a6c898 --- /dev/null +++ b/modules/user/blender/default.nix @@ -0,0 +1,24 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.userSettings.blender; +in { + options = { + userSettings.blender = { + enable = lib.mkEnableOption "Enable blender"; + }; + }; + + config = { + home.packages = [ pkgs.blender-hip ]; + home.file.".config/blender/extensions/node_pie.zip".source = builtins.fetchurl { + url = "https://github.com/strike-digital/node_pie/releases/download/1.2.38/node_pie_1_2_38.zip"; + sha256 = "sha256:00kscj7dkl80kc482jg3kcw9vhr1n64n44ld2xncr6gxil679fk2"; + }; + home.file.".config/blender/extensions/bool_tool.zip".source = builtins.fetchurl { + name = "bool_tool"; + url = "https://extensions.blender.org/download/sha256:74ecd752ec3eda67153c74ea5a6b22709da2669a6da43264bfa291fc784306b3/add-on-bool-tool-v1.1.2.zip?repository=%2Fapi%2Fv1%2Fextensions%2F&blender_version_min=4.2.0"; + sha256 = "sha256:1cq68dwgr4d2pxj3593dk9ka57bh49mmmskl7hangniyxi9dgv3l"; + }; + }; +} diff --git a/modules/user/bluetooth/default.nix b/modules/user/bluetooth/default.nix new file mode 100644 index 00000000..bbff4111 --- /dev/null +++ b/modules/user/bluetooth/default.nix @@ -0,0 +1,20 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.userSettings.bluetooth; +in { + options = { + userSettings.bluetooth = { + enable = lib.mkEnableOption "Enable bluetooth"; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + blueman + ]; + services = { + blueman-applet.enable = true; + }; + }; +} diff --git a/modules/user/browser/brave.nix b/modules/user/browser/brave.nix new file mode 100644 index 00000000..3e40b6bf --- /dev/null +++ b/modules/user/browser/brave.nix @@ -0,0 +1,44 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.userSettings.brave; +in { + options = { + userSettings.brave = { + enable = lib.mkEnableOption "Enable brave browser"; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = [ pkgs.brave ]; + + nixpkgs.config.overlays = [ + (self: super: { + brave = super.brave.override { + commandLineArgs = [ + "--password-store=gnome-libsecret" + "--ignore-gpu-blocklist" + "--enable-gpu-rasterization" + "--enable-accelerated-video-decode" + "--enable-quic" + "--enable-zero-copy" + "--enable-native-gpu-memory-buffers" + "--num-raster-threads=4" + ]; + }; + }) + ]; + + xdg.mimeApps.defaultApplications = lib.mkIf (config.userSettings.browser == "brave" ) { + "text/html" = "brave-browser.desktop"; + "x-scheme-handler/http" = "brave-browser.desktop"; + "x-scheme-handler/https" = "brave-browser.desktop"; + "x-scheme-handler/about" = "brave-browser.desktop"; + "x-scheme-handler/unknown" = "brave-browser.desktop"; + }; + + home.sessionVariables = lib.mkIf (config.userSettings.browser == "brave") { + DEFAULT_BROWSER = "${pkgs.brave}/bin/brave"; + }; + }; +} diff --git a/modules/user/browser/default.nix b/modules/user/browser/default.nix new file mode 100644 index 00000000..f15343a8 --- /dev/null +++ b/modules/user/browser/default.nix @@ -0,0 +1,30 @@ +{ config, lib, pkgs, ... }: + +let + browser = config.userSettings.browser; +in { + options = { + userSettings.browser = lib.mkOption { + default = "brave"; + description = "Default browser"; + type = lib.types.enum [ "brave" "qutebrowser" "librewolf" ]; + }; + userSettings.spawnBrowser = lib.mkOption { + default = "brave"; + description = "Default browser spawn command"; + type = lib.types.str; + }; + }; + + config = { + userSettings.brave.enable = lib.mkIf (browser == "brave") true; + userSettings.librewolf.enable = lib.mkIf (browser == "librewolf") true; + userSettings.qutebrowser.enable = lib.mkIf (browser == "qutebrowser") true; + + userSettings.spawnBrowser = lib.mkMerge [ + (lib.mkIf ((browser == "brave") || (browser == "librewolf")) browser) + (lib.mkIf (!(config.userSettings.hyprland.hyprprofiles.enable) && (browser == "qutebrowser")) "qutebrowser --qt-flag ignore-gpu-blacklist --qt-flag enable-gpu-rasterization --qt-flag enable-native-gpu-memory-buffers --qt-flag enable-accelerated-2d-canvas --qt-flag num-raster-threads=4") + (lib.mkIf config.userSettings.hyprland.hyprprofiles.enable "qutebrowser-hyprprofile") + ]; + }; +} diff --git a/modules/user/browser/librewolf.nix b/modules/user/browser/librewolf.nix new file mode 100644 index 00000000..1c5804ab --- /dev/null +++ b/modules/user/browser/librewolf.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.userSettings.librewolf; +in { + options = { + userSettings.librewolf = { + enable = lib.mkEnableOption "Enable librewolf browser"; + }; + }; + + config = lib.mkIf cfg.enable { + # Module installing librewolf as default browser + home.packages = [ pkgs.librewolf ]; + + home.file.".librewolf/librewolf.overrides.cfg".text = '' + defaultPref("font.size.variable.x-western",20); + defaultPref("browser.toolbars.bookmarks.visibility","always"); + defaultPref("privacy.resisttFingerprinting.letterboxing", true); + defaultPref("network.http.referer.XOriginPolicy",2); + defaultPref("privacy.clearOnShutdown.history",true); + defaultPref("privacy.clearOnShutdown.downloads",true); + defaultPref("privacy.clearOnShutdown.cookies",true); + defaultPref("gfx.webrender.software.opengl",false); + defaultPref("webgl.disabled",true); + + pref("font.size.variable.x-western",20); + pref("browser.toolbars.bookmarks.visibility","always"); + pref("privacy.resisttFingerprinting.letterboxing", true); + pref("network.http.referer.XOriginPolicy",2); + pref("privacy.clearOnShutdown.history",true); + pref("privacy.clearOnShutdown.downloads",true); + pref("privacy.clearOnShutdown.cookies",true); + pref("gfx.webrender.software.opengl",false); + pref("webgl.disabled",true); + ''; + + xdg.mimeApps.defaultApplications = lib.mkIf (config.userSettings.browser == "librewolf") { + "text/html" = "librewolf.desktop"; + "x-scheme-handler/http" = "librewolf.desktop"; + "x-scheme-handler/https" = "librewolf.desktop"; + "x-scheme-handler/about" = "librewolf.desktop"; + "x-scheme-handler/unknown" = "librewolf.desktop"; + }; + + home.sessionVariables = lib.mkIf (config.userSettings.browser == "librewolf") { + DEFAULT_BROWSER = "${pkgs.librewolf}/bin/librewolf"; + }; + }; + +} diff --git a/user/app/browser/qutebrowser-logo.png b/modules/user/browser/qutebrowser-logo.png similarity index 100% rename from user/app/browser/qutebrowser-logo.png rename to modules/user/browser/qutebrowser-logo.png diff --git a/user/app/browser/qutebrowser.nix b/modules/user/browser/qutebrowser.nix similarity index 59% rename from user/app/browser/qutebrowser.nix rename to modules/user/browser/qutebrowser.nix index bab16348..b9205e0d 100644 --- a/user/app/browser/qutebrowser.nix +++ b/modules/user/browser/qutebrowser.nix @@ -1,129 +1,163 @@ -{ config, pkgs, userSettings, ... }: -let generateHomepage = name: font: config: - '' - +{ config, lib, pkgs, ... }: +let + cfg = config.userSettings.qutebrowser; + font = config.stylix.fonts.monospace.name; + generateHomepage = name: font: config: + '' + -
-Welcome to Qutebrowser
-''+name+" "+''Profile
-Welcome to Qutebrowser
+''+name+" "+''Profile
+