commit b6cee5e832577733d0755cff9a9d86dd027f5d03 Author: oqyude Date: Thu May 15 21:11:30 2025 +0300 Init diff --git a/README.md b/README.md new file mode 100755 index 0000000..74c7cc9 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +I'm a super newbie who just put my goodies here \ No newline at end of file diff --git a/devices/disko/server.nix b/devices/disko/server.nix new file mode 100755 index 0000000..c5928ac --- /dev/null +++ b/devices/disko/server.nix @@ -0,0 +1,38 @@ +{ + disko.devices = { + disk = { + main = { + device = "/dev/mmcblk0"; + type = "disk"; + content = { + type = "gpt"; + partitions = { + ESP = { + type = "EF00"; + size = "512M"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + }; + }; + swap = { + size = "2G"; + content = { + type = "swap"; + }; + }; + root = { + size = "100%"; + content = { + type = "filesystem"; + format = "ext4"; + mountpoint = "/"; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/devices/hardware/laptop.nix b/devices/hardware/laptop.nix new file mode 100644 index 0000000..601a4d9 --- /dev/null +++ b/devices/hardware/laptop.nix @@ -0,0 +1,59 @@ +{ + config, + lib, + pkgs, + modulesPath, + ... +}: + +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot = { + initrd = { + availableKernelModules = [ + "nvme" + "xhci_pci" + "usbhid" + "usb_storage" + "uas" + "sd_mod" + ]; + kernelModules = [ ]; + }; + kernelModules = [ "kvm-amd" ]; + extraModulePackages = [ ]; + }; + + fileSystems = { + "/" = { + device = "/dev/disk/by-uuid/5938c796-6ff5-49d9-a3a6-022b4c32beeb"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-uuid/61BF-3342"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + }; + + swapDevices = [ + { device = "/dev/disk/by-uuid/d89bccd2-0672-4855-9d87-40e2688cdec4"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp2s0.useDHCP = lib.mkDefault true; + # networking.interfaces.tailscale0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; +} diff --git a/devices/hardware/logitech.nix b/devices/hardware/logitech.nix new file mode 100644 index 0000000..4ec69a4 --- /dev/null +++ b/devices/hardware/logitech.nix @@ -0,0 +1,14 @@ +{ + config, + ... +}: +{ + hardware = { + logitech = { + wireless = { + enable = true; + enableGraphical = true; + }; + }; + }; +} diff --git a/devices/hardware/server.nix b/devices/hardware/server.nix new file mode 100644 index 0000000..669b605 --- /dev/null +++ b/devices/hardware/server.nix @@ -0,0 +1,78 @@ +{ + config, + lib, + pkgs, + modulesPath, + ... +}: +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + boot = { + initrd = { + availableKernelModules = [ + "ahci" + "xhci_pci" + "usbhid" + "usb_storage" + "sd_mod" + "sdhci_pci" + ]; + }; + kernel = { + sysctl = { + "fs.inotify.max_user_watches" = "204800"; + }; + }; + kernelModules = [ + "kvm-intel" + "coretemp" + ]; + }; + + fileSystems = { + "/" = { + device = "/dev/disk/by-partlabel/disk-main-root"; + fsType = "ext4"; + }; + "/boot" = { + device = "/dev/disk/by-partlabel/disk-main-ESP"; + fsType = "vfat"; + options = [ + "fmask=0022" + "dmask=0022" + ]; + }; + }; + + # fileSystems."/" = + # { device = "/dev/disk/by-uuid/8acccc34-edc6-4934-886c-ef4b778ca24a"; + # fsType = "ext4"; + # }; + # + # fileSystems."/boot" = + # { device = "/dev/disk/by-uuid/DDF2-C940"; + # fsType = "vfat"; + # options = [ "fmask=0022" "dmask=0022" ]; + # }; + # + # fileSystems."/home/otreca/External" = + # { device = "/dev/disk/by-uuid/37e53ebc-5343-a94d-9fe2-0ca39e13a8de"; + # fsType = "ext4"; + # }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.eno1.useDHCP = lib.mkDefault true; + # networking.interfaces.tailscale0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/devices/laptop.nix b/devices/laptop.nix new file mode 100755 index 0000000..3e19486 --- /dev/null +++ b/devices/laptop.nix @@ -0,0 +1,169 @@ +{ + inputs, + ... +}@flakeContext: +let + nixosModule = + { + config, + lib, + pkgs, + ... + }: + { + imports = + with inputs; + [ + ./hardware/laptop.nix + ./hardware/logitech.nix + self.nixosModules.default + nixos-hardware.nixosModules.asus-fa506ic + + self.nixosModules.software.wine + self.nixosModules.desktop + self.homeConfigurations.main.nixosModule + self.homeConfigurations.root.nixosModule + ] + ++ builtins.attrValues inputs.self.nixosModules.extra.self; + + fileSystems = { + "${inputs.zeroq.dirs.therima-drive}" = { + device = "/dev/disk/by-uuid/C0A2DDEFA2DDEA44"; + fsType = "ntfs3"; + options = [ + "defaults" + "uid=1000" + "gid=1000" + "fmask=0007" + "dmask=0007" + "nofail" + "x-systemd.device-timeout=0" + ]; + }; + "${inputs.zeroq.dirs.vetymae-drive}" = { + device = "/dev/disk/by-uuid/6E04EA7F04EA49A3"; + fsType = "ntfs3"; + options = [ + "defaults" + "uid=1000" + "gid=1000" + "fmask=0007" + "dmask=0007" + "nofail" + "x-systemd.device-timeout=0" + ]; + }; + }; + + boot = { + kernelPackages = lib.mkDefault pkgs.linuxPackages_xanmod_stable; + loader = { + systemd-boot.enable = lib.mkDefault true; + efi.canTouchEfiVariables = lib.mkDefault true; + }; + }; + + hardware = { + bluetooth.enable = true; + # nvidia = { + # open = true; + # dynamicBoost.enable = true; + # nvidiaSettings = true; + # powerManagement = { + # enable = false; + # finegrained = false; # maybe comment this out idk what it does + # }; + # #package = config.boot.kernelPackages.nvidiaPackages.stable; + # nvidiaPersistenced = true; + # modesetting.enable = true; + # prime = { + # offload = { + # enable = true; + # enableOffloadCmd = true; + # }; + # sync.enable = false; + # amdgpuBusId = "PCI:6:0:0"; + # nvidiaBusId = "PCI:1:0:0"; + # }; + # }; + }; + + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + networking = { + hostName = "${inputs.zeroq.devices.laptop.hostname}"; + networkmanager.enable = true; + firewall.enable = false; + }; + + i18n = { + extraLocaleSettings = { + LC_ADDRESS = "ru_RU.UTF-8"; + LC_IDENTIFICATION = "ru_RU.UTF-8"; + LC_MEASUREMENT = "ru_RU.UTF-8"; + LC_MONETARY = "ru_RU.UTF-8"; + LC_NAME = "ru_RU.UTF-8"; + LC_NUMERIC = "ru_RU.UTF-8"; + LC_PAPER = "ru_RU.UTF-8"; + LC_TELEPHONE = "ru_RU.UTF-8"; + LC_TIME = "ru_RU.UTF-8"; + }; + }; + + services = { + xserver = { + videoDrivers = [ + "amdgpu" + "nvidia" + ]; + }; + syncthing = { + enable = true; + systemService = true; + configDir = "${inputs.zeroq.dirs.user-storage}/Syncthing/${config.system.name}"; # ${inputs.zeroq.devices.laptop.hostname} + dataDir = "${inputs.zeroq.dirs.user-home}"; + group = "users"; + user = "${inputs.zeroq.devices.admin}"; + }; + pipewire = { + enable = lib.mkDefault true; + systemWide = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + extraConfig.pipewire = { + "99-default.conf" = { + "context.properties" = { + "default.clock.rate" = 96000; + "default.clock.allowed-rates" = [ + 44100 + 48000 + 96000 + ]; + "default.clock.quantum" = 256; + "default.clock.min-quantum" = 64; + "default.clock.max-quantum" = 1024; + }; + }; + }; + }; + thermald.enable = true; + earlyoom.enable = true; + preload.enable = true; + }; + + security = { + rtkit.enable = true; + }; + + system.stateVersion = "25.05"; + }; +in +inputs.nixpkgs.lib.nixosSystem { + modules = [ + nixosModule + inputs.sops-nix.nixosModules.sops + ]; + system = "x86_64-linux"; +} diff --git a/devices/mini-laptop.nix b/devices/mini-laptop.nix new file mode 100755 index 0000000..967c1f0 --- /dev/null +++ b/devices/mini-laptop.nix @@ -0,0 +1,31 @@ +{ + inputs, + ... +}@flakeContext: +let + nixosModule = + { + config, + lib, + pkgs, + ... + }: + { + system.nixos.label = "stock"; + + imports = with inputs; [ + self.nixosModules.default + + nixos-hardware.nixosModules.chuwi-minibook-x + home-manager.nixosModules.home-manager # home-manager module + self.homeConfigurations.oqyude.nixosModule # home-manager configuration module + ]; + hardware.intel-gpu-tools.enable = true; + }; +in +inputs.nixpkgs.lib.nixosSystem { + modules = with inputs; [ + nixosModule + ]; + system = "x86_64-linux"; +} diff --git a/devices/server.nix b/devices/server.nix new file mode 100644 index 0000000..0a2ba6a --- /dev/null +++ b/devices/server.nix @@ -0,0 +1,274 @@ +{ inputs, ... }@flakeContext: +let + nixosModule = + { + config, + lib, + pkgs, + ... + }: + { + imports = with inputs; [ + ./hardware/server.nix + self.nixosModules.default + + self.homeConfigurations.server.nixosModule # home-manager configuration module + ]; + + boot = { + kernelPackages = pkgs.linuxPackages_xanmod_stable; + hardwareScan = true; + loader = { + systemd-boot.enable = lib.mkDefault true; + efi.canTouchEfiVariables = lib.mkDefault true; + }; + }; + + hardware = { + bluetooth.enable = false; + }; + + #swapDevices = + # [ { device = "/dev/disk/by-partlabel/disk-main-swap"; } + # ]; + + users = { + users = { + "${inputs.zeroq.devices.admin}" = { + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKduJia+unaQQdN6X5syaHvnpIutO+yZwvfiCP4qKQ/P root@sapphira" + ]; + }; + }; + }; + + fileSystems = { + # External drive + "${inputs.zeroq.dirs.server-home}" = { + device = "/dev/disk/by-uuid/37e53ebc-5343-a94d-9fe2-0ca39e13a8de"; + fsType = "ext4"; + options = [ + "nofail" + "x-systemd.device-timeout=0" + ]; + }; + }; + + services = { + nextcloud = { + enable = false; + package = pkgs.nextcloud30; + hostName = "localhost:10000"; + database.createLocally = true; + config = { + dbtype = "mysql"; + dbuser = "nextcloud"; + #dbhost = "/run/postgresql"; + dbname = "nextcloud"; + adminuser = "root"; + #adminpassFile = "${inputs.zeroq.dirs.credentials-target}/nextcloud/admin-pass.txt"; + }; + settings = { + appstoreEnable = false; + log_type = "file"; + trusted_domains = [ + "100.64.0.0" + "192.168.1.18" + "localhost" + ]; + }; + extraAppsEnable = true; + extraApps = { + inherit (pkgs.nextcloud30Packages.apps) + bookmarks + calendar + contacts + cookbook + cospend + deck + end_to_end_encryption + forms + gpoddersync + groupfolders + impersonate + integration_paperless + mail + maps + memories + music + notes + notify_push + onlyoffice + polls + previewgenerator + richdocuments + spreed + tasks + user_oidc + user_saml + whiteboard + ; + }; + }; + earlyoom.enable = true; + preload.enable = true; + auto-cpufreq.enable = true; + throttled.enable = true; + nginx = { + enable = false; + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedProxySettings = true; + recommendedTlsSettings = true; + virtualHosts = { + "localhost:10000" = { + forceSSL = false; + enableACME = false; + listen = [ + { + addr = "100.64.0.0"; + port = 10000; + } + { + addr = "192.168.1.18"; + port = 10000; + } + ]; + }; + }; + }; + postgresql = { + enable = false; + # ensureDatabases = [ "nextcloud" ]; + # ensureUsers = [ + # { + # name = "nextcloud"; # Здесь не хватает строчек\\ + # } + # ]; + }; + journald = { + extraConfig = '' + SystemMaxUse=128M + ''; + }; + samba = { + enable = true; + settings = { + global = { + "invalid users" = [ ]; + "passwd program" = "/run/wrappers/bin/passwd %u"; + security = "user"; + }; + nixos = { + "path" = "/etc/nixos"; + "browseable" = "yes"; + "read only" = "no"; + "valid users" = "${inputs.zeroq.devices.admin}"; + "guest ok" = "no"; + "writable" = "yes"; + "create mask" = 644; + "directory mask" = 644; + "force user" = "root"; + "force group" = "root"; + }; + root = { + "path" = "/"; + "browseable" = "yes"; + "read only" = "no"; + "valid users" = "${inputs.zeroq.devices.admin}"; + "guest ok" = "no"; + "writable" = "yes"; + #"create mask" = 0644; + #"directory mask" = 0644; + "force user" = "root"; + "force group" = "root"; + }; + "${inputs.zeroq.devices.admin}" = { + "path" = "${inputs.zeroq.dirs.server-home}"; + "browseable" = "yes"; + "read only" = "no"; + "valid users" = "${inputs.zeroq.devices.admin}"; + "guest ok" = "no"; + "writable" = "yes"; + "create mask" = 700; + "directory mask" = 700; + "force user" = "${inputs.zeroq.devices.admin}"; + "force group" = "users"; + }; + }; + }; + calibre-web = { + enable = true; + group = "users"; + user = "${inputs.zeroq.devices.admin}"; + options = { + calibreLibrary = "${inputs.zeroq.dirs.calibre-library}"; + enableBookUploading = true; + enableKepubify = false; + }; + listen.ip = "0.0.0.0"; + listen.port = 8083; + openFirewall = true; + }; + openssh = { + enable = true; + allowSFTP = true; + #knownHosts.otreca.publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJpMaD143EZqhRlpAgNINLrH/qXkN3zXmKgFJlhbhGwg"; + hostKeys = [ + { + path = "/etc/ssh/id_ed25519"; + type = "ed25519"; + } + ]; + settings = { + PasswordAuthentication = false; + PermitRootLogin = "yes"; + UsePAM = true; + }; + }; + transmission = { + enable = true; + credentialsFile = "${inputs.zeroq.dirs.server-home}/server/transmission/settings.json"; + openRPCPort = true; + package = pkgs.transmission_4; + user = "${inputs.zeroq.devices.admin}"; + group = "users"; + settings = { + download-dir = "${inputs.zeroq.dirs.server-home}/Downloads"; + incomplete-dir = "${inputs.zeroq.dirs.server-home}/Downloads/Temp"; + incomplete-dir-enabled = true; + rpc-bind-address = "0.0.0.0"; + rpc-port = 9091; + rpc-whitelist-enabled = false; + umask = 0; + }; + }; + syncthing = { + enable = true; + systemService = true; + guiAddress = "0.0.0.0:8384"; + configDir = "${inputs.zeroq.dirs.storage}/Syncthing/${inputs.zeroq.devices.server.hostname}"; + dataDir = "${inputs.zeroq.dirs.server-home}"; + group = "users"; + user = "${inputs.zeroq.devices.admin}"; + }; + tailscale.enable = true; + }; + + networking = { + hostName = "${inputs.zeroq.devices.server.hostname}"; + networkmanager.enable = true; + firewall.enable = false; + }; + + system = { + stateVersion = "25.05"; + }; + }; +in +inputs.nixpkgs.lib.nixosSystem { + modules = with inputs; [ + nixosModule + ]; + system = "x86_64-linux"; +} diff --git a/devices/wsl.nix b/devices/wsl.nix new file mode 100755 index 0000000..8df7913 --- /dev/null +++ b/devices/wsl.nix @@ -0,0 +1,77 @@ +{ inputs, ... }@flakeContext: +let + nixosModule = + { + config, + lib, + pkgs, + modulesPath, + ... + }: + { + + imports = [ ]; + + i18n = { + defaultLocale = "en_US.UTF-8"; + supportedLocales = [ + "ru_RU.UTF-8/UTF-8" + "en_US.UTF-8/UTF-8" + ]; + }; + + networking.hostName = "${inputs.zeroq.devices.wsl.username}"; + + users = { + defaultUserShell = pkgs.zsh; + }; + + nixpkgs.config.allowUnfree = true; + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; + + environment.systemPackages = with pkgs; [ + btop + fastfetch + yazi + ]; + + programs = { + lazygit.enable = true; + git.enable = true; + nh.enable = true; + zsh = { + enable = true; + enableCompletion = true; + enableBashCompletion = true; + syntaxHighlighting.enable = true; + zsh-autoenv.enable = true; + loginShellInit = "clear && fastfetch"; + ohMyZsh = { + enable = true; + theme = "robbyrussell"; + }; + }; + }; + + zramSwap.enable = true; + services.earlyoom.enable = true; + + wsl = { + enable = true; + startMenuLaunchers = true; + #useWindowsDriver = true; + defaultUser = "nixos"; + }; + + system.stateVersion = "24.05"; + }; +in +inputs.nixpkgs.lib.nixosSystem { + modules = [ + nixosModule + ]; + system = "x86_64-linux"; +} diff --git a/flake.lock b/flake.lock new file mode 100755 index 0000000..c9ffe78 --- /dev/null +++ b/flake.lock @@ -0,0 +1,536 @@ +{ + "nodes": { + "aagl": { + "inputs": { + "flake-compat": [ + "flake-compat" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1747088856, + "narHash": "sha256-zWSO9D3dUiLXQ6eY7sjFASLwsiH140AMORrJPm44DPI=", + "owner": "ezKEa", + "repo": "aagl-gtk-on-nix", + "rev": "3448880953fc93666096d1e2878799d07a6c04db", + "type": "github" + }, + "original": { + "owner": "ezKEa", + "repo": "aagl-gtk-on-nix", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1746729224, + "narHash": "sha256-9R4sOLAK1w3Bq54H3XOJogdc7a6C2bLLmatOQ+5pf5w=", + "owner": "nix-community", + "repo": "disko", + "rev": "85555d27ded84604ad6657ecca255a03fd878607", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "flake-compat": { + "locked": { + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1743550720, + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "c621e8422220273271f52058f618c94e405bb0f5", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1743550720, + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "c621e8422220273271f52058f618c94e405bb0f5", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "grub2-themes": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1734412921, + "narHash": "sha256-JeMqc7lLowKn6klrCcOkcOg38yNqF7MPbN4Elh6Xvq0=", + "owner": "vinceliuice", + "repo": "grub2-themes", + "rev": "f6ab2438e124f60a340a526543e498e5e33b3c53", + "type": "github" + }, + "original": { + "owner": "vinceliuice", + "repo": "grub2-themes", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1747155932, + "narHash": "sha256-NnPzzXEqfYjfrimLzK0JOBItfdEJdP/i6SNTuunCGgw=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "8d832ddfda9facf538f3dda9b6985fb0234f151c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "musnix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741303672, + "narHash": "sha256-eRKbKccBu3PK/oJpmUuLo+0v45d0SEjosE8tVsHbpeA=", + "owner": "musnix", + "repo": "musnix", + "rev": "d56a15f30329f304151e4e05fa82264d127da934", + "type": "github" + }, + "original": { + "owner": "musnix", + "repo": "musnix", + "type": "github" + } + }, + "nix-gaming": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1747101345, + "narHash": "sha256-IjktcMUVCez262VtDAh9U9FCs8Cur+yagZpcJzDwdFY=", + "owner": "fufexan", + "repo": "nix-gaming", + "rev": "3b8f27e4a0b894dedc07f398b5ef1a747861fea3", + "type": "github" + }, + "original": { + "owner": "fufexan", + "repo": "nix-gaming", + "type": "github" + } + }, + "nix-index-database": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1746934494, + "narHash": "sha256-3n6i+F0sDASjkhbvgFDpPDZGp7z19IrRtjfF9TwJpCA=", + "owner": "nix-community", + "repo": "nix-index-database", + "rev": "e9b21b01e4307176b9718a29ac514838e7f6f4ff", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-index-database", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1747129300, + "narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "e81fd167b33121269149c57806599045fd33eeed", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1746576598, + "narHash": "sha256-FshoQvr6Aor5SnORVvh/ZdJ1Sa2U4ZrIMwKBX5k2wu0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b3582c75c7f21ce0b429898980eddbbf05c68e55", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-last-unstable": { + "locked": { + "lastModified": 1746269363, + "narHash": "sha256-Q0lKWway9OmZnkDTpAoAE9VLXHOHqCqdJ3N0tkSM99g=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b6aef6c3553f849e1e6c08f1bcd3061df2b69fc4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b6aef6c3553f849e1e6c08f1bcd3061df2b69fc4", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1743296961, + "narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "lastModified": 1743296961, + "narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1746957726, + "narHash": "sha256-k9ut1LSfHCr0AW82ttEQzXVCqmyWVA5+SHJkS5ID/Jo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a39ed32a651fdee6842ec930761e31d1f242cb94", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-unstable": { + "locked": { + "lastModified": 1747060738, + "narHash": "sha256-ByfPRQuqj+nhtVV0koinEpmJw0KLzNbgcgi9EF+NVow=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "eaeed9530c76ce5f1d2d8232e08bec5e26f18ec1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1747060738, + "narHash": "sha256-ByfPRQuqj+nhtVV0koinEpmJw0KLzNbgcgi9EF+NVow=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "eaeed9530c76ce5f1d2d8232e08bec5e26f18ec1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nur": { + "inputs": { + "flake-parts": "flake-parts_3", + "nixpkgs": [ + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1747151055, + "narHash": "sha256-zCGpF8BREFvzkSqgfEBgIcqtrnT8e9IqNQ3Zqe+OOk4=", + "owner": "nix-community", + "repo": "NUR", + "rev": "33dadfb985b667b866d1175a8519b7583a38ef63", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, + "nypkgs": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1744125335, + "narHash": "sha256-yH1bbLTB/Ozhg7ScAXiJKzW1GZ4Y4+VlS9HCmIZDyME=", + "owner": "yunfachi", + "repo": "nypkgs", + "rev": "e9a5d894690e9205e28839ef9289ee2baa3f017c", + "type": "github" + }, + "original": { + "owner": "yunfachi", + "repo": "nypkgs", + "type": "github" + } + }, + "plasma-manager": { + "inputs": { + "home-manager": [ + "home-manager" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1742765550, + "narHash": "sha256-2vVIh2JrL6GAGfgCeY9e6iNKrBjs0Hw3bGQEAbwVs68=", + "owner": "nix-community", + "repo": "plasma-manager", + "rev": "b70be387276e632fe51232887f9e04e2b6ef8c16", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "plasma-manager", + "type": "github" + } + }, + "root": { + "inputs": { + "aagl": "aagl", + "disko": "disko", + "flake-compat": "flake-compat", + "flake-parts": "flake-parts", + "flake-utils": "flake-utils", + "grub2-themes": "grub2-themes", + "home-manager": "home-manager", + "musnix": "musnix", + "nix-gaming": "nix-gaming", + "nix-index-database": "nix-index-database", + "nixos-hardware": "nixos-hardware", + "nixpkgs": "nixpkgs_2", + "nixpkgs-last-unstable": "nixpkgs-last-unstable", + "nixpkgs-stable": "nixpkgs-stable", + "nixpkgs-unstable": "nixpkgs-unstable", + "nur": "nur", + "nypkgs": "nypkgs", + "plasma-manager": "plasma-manager", + "sops-nix": "sops-nix", + "zapret": "zapret", + "zeroq": "zeroq" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1746485181, + "narHash": "sha256-PxrrSFLaC7YuItShxmYbMgSuFFuwxBB+qsl9BZUnRvg=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "e93ee1d900ad264d65e9701a5c6f895683433386", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733222881, + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "zapret": { + "locked": { + "lastModified": 1745932796, + "narHash": "sha256-nbQNqqtLUF7FNg0FfT+V/qvRtTanSA4O3c3e/lto5oU=", + "owner": "oqyude", + "repo": "zapret-easyflake", + "rev": "dd2c75127343d08cf0a5fa8d15bdfe016d2691c5", + "type": "github" + }, + "original": { + "owner": "oqyude", + "repo": "zapret-easyflake", + "type": "github" + } + }, + "zeroq": { + "locked": { + "path": "./modules/zeroq", + "type": "path" + }, + "original": { + "path": "./modules/zeroq", + "type": "path" + }, + "parent": [] + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100755 index 0000000..7a948ad --- /dev/null +++ b/flake.nix @@ -0,0 +1,127 @@ +{ + description = "oqyude flake"; + + inputs = { + + # My + zeroq.url = "path:./modules/zeroq"; # flake of variables + zapret.url = "github:oqyude/zapret-easyflake"; # stupid flake of zapret + + # nixpkgs + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # b6aef6c3553f849e1e6c08f1bcd3061df2b69fc4 + nixpkgs-last-unstable.url = "github:NixOS/nixpkgs/b6aef6c3553f849e1e6c08f1bcd3061df2b69fc4"; # 507b63021ada5fee621b6ca371c4fca9ca46f52c + nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-24.11"; + + # nix-community + nixos-hardware.url = "github:NixOS/nixos-hardware/master"; + flake-compat.url = "github:edolstra/flake-compat"; + flake-utils.url = "github:numtide/flake-utils"; + flake-parts.url = "github:hercules-ci/flake-parts"; + nur = { + url = "github:nix-community/NUR"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + home-manager = { + url = "github:nix-community/home-manager"; # flake:home-manager + inputs.nixpkgs.follows = "nixpkgs"; + }; + disko = { + url = "github:nix-community/disko"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + plasma-manager = { + # https://github.com/nix-community/plasma-manager + url = "github:nix-community/plasma-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; + nix-index-database = { + url = "github:nix-community/nix-index-database"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + # extras + nix-gaming.url = "github:fufexan/nix-gaming"; + aagl = { + url = "github:ezKEa/aagl-gtk-on-nix"; + inputs = { + nixpkgs.follows = "nixpkgs"; + flake-compat.follows = "flake-compat"; + }; + }; + musnix = { + url = "github:musnix/musnix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + grub2-themes = { + url = "github:vinceliuice/grub2-themes"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nypkgs = { + # https://github.com/yunfachi/nypkgs + url = "github:yunfachi/nypkgs"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + sops-nix = { + url = "github:Mic92/sops-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + # stylix = { + # url = "github:danth/stylix"; + # inputs = { + # nixpkgs.follows = "nixpkgs"; + # home-manager.follows = "home-manager"; + # flake-compat.follows = "flake-compat"; + # flake-utils.follows = "flake-utils"; + # }; + # }; + + }; + outputs = + inputs: + let + flakeContext = { inherit inputs; }; + in + { + nixosConfigurations = { + atoridu = import ./devices/laptop.nix flakeContext; # atoridu + lamet = import ./devices/mini-laptop.nix flakeContext; # lamet + sapphira = import ./devices/server.nix flakeContext; # sapphira + wsl = import ./devices/wsl.nix flakeContext; # wsl + }; + nixosModules = { + default = import ./modules/default.nix flakeContext; + desktop = import ./modules/desktop/default.nix flakeContext; + software = { + daw = import ./modules/software/daw.nix flakeContext; + virtual = import ./modules/software/virtual.nix flakeContext; + wine = import ./modules/software/wine.nix flakeContext; + }; + extra = { + self = { + fingerprint = import ./modules/extra/self/fingerprint.nix flakeContext; + zapret = import ./modules/extra/self/zapret.nix flakeContext; + }; + musnix = import ./modules/extra/musnix.nix flakeContext; # https://github.com/musnix/musnix + gaming = { + nix-gaming = import ./modules/extra/gaming/nix-gaming.nix flakeContext; # https://github.com/fufexan/nix-gaming + aagl = import ./modules/extra/gaming/aagl.nix flakeContext; # https://github.com/ezKEa/aagl-gtk-on-nix + }; + }; + }; + + homeConfigurations = { + root = import ./home/root.nix flakeContext; + main = import ./home/main.nix flakeContext; + server = import ./home/server.nix flakeContext; + }; + homeModules = { + packages = import ./home/modules/packages.nix flakeContext; + default = import ./home/modules/default.nix flakeContext; + dconf = import ./home/modules/dconf.nix flakeContext; + beets = import ./home/modules/beets.nix flakeContext; + plasma-manager = import ./home/modules/plasma-manager.nix flakeContext; + }; + }; +} diff --git a/home/main.nix b/home/main.nix new file mode 100755 index 0000000..1b266c5 --- /dev/null +++ b/home/main.nix @@ -0,0 +1,107 @@ +{ inputs, ... }@flakeContext: +let + homeModule = + { + config, + lib, + pkgs, + ... + }: + { + imports = [ ] ++ (builtins.attrValues inputs.self.homeModules); + xdg = { + enable = true; + autostart.enable = true; + configFile = { + "ludusavi" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.user-storage}/ludusavi/cfg"; + target = "ludusavi"; + }; + "nekoray" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.user-storage}/Nekoray/${config.home.username}"; + target = "nekoray"; + }; + "solaar" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.user-storage}/solaar"; + target = "solaar"; + }; + "easyeffects" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.user-storage}/easyeffects"; + target = "easyeffects"; + }; + "keepassxc" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.user-storage}/KeePassXC"; + target = "keepassxc"; + }; + }; + userDirs = { + enable = true; + createDirectories = true; + desktop = "${config.xdg.dataHome}/desktop"; + documents = null; + download = "${config.home.homeDirectory}/Downloads"; + music = "${config.home.homeDirectory}/Music"; + pictures = "${config.home.homeDirectory}/Pictures"; + publicShare = "${config.home.homeDirectory}/Misc/Public"; + templates = null; + videos = "${config.home.homeDirectory}/Pictures/Videos"; + }; + }; + + home = { + username = "${inputs.zeroq.devices.admin}"; + file = { + "ssh" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.user-storage}/SSH/${config.home.username}"; + target = ".ssh"; + }; + "External" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.therima-drive}"; + target = "External"; + }; + "Music" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.vetymae-drive}/Users/User/Music"; + target = "Music"; + }; + "Pictures" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.vetymae-drive}/Users/User/Pictures"; + target = "Pictures"; + }; + "Deploy" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.vetymae-drive}/Users/User/Deploy"; + target = "Deploy"; + }; + "Misc" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.vetymae-drive}/Users/User/Misc"; + target = "Misc"; + }; + }; + }; + }; + nixosModule = + { config, ... }: + { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + users.${inputs.zeroq.devices.admin} = homeModule; + sharedModules = [ inputs.plasma-manager.homeManagerModules.plasma-manager ]; + extraSpecialArgs = { + #inherit inputs; + inherit (config.networking) hostName; + }; + }; + + }; +in +( + (inputs.home-manager.lib.homeManagerConfiguration { + modules = [ + homeModule + ]; + pkgs = inputs.nixpkgs.legacyPackages.x86_64-linux; + }) + // { + inherit nixosModule; + } +) diff --git a/home/modules/dconf.nix b/home/modules/dconf.nix new file mode 100644 index 0000000..71641b0 --- /dev/null +++ b/home/modules/dconf.nix @@ -0,0 +1,38 @@ +{ inputs, ... }@flakeContext: +{ + config, + pkgs, + ... +}: +let + unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; }; + last-stable = import inputs.nixpkgs-last-unstable { system = "x86_64-linux"; }; +in +{ + dconf = { + settings = { + "org/virt-manager/virt-manager/connections" = { + autoconnect = [ "qemu:///system" ]; + uris = [ "qemu:///system" ]; + }; + "org/gnome/shell" = { + disable-user-extensions = false; + enabled-extensions = with pkgs.gnomeExtensions; [ + dash-to-panel.extensionUuid + arcmenu.extensionUuid + vitals.extensionUuid + appindicator.extensionUuid + ]; + disabled-extensions = [ ]; + }; + "org/gnome/desktop/interface" = { + color-scheme = "prefer-light"; + enable-hot-corners = false; + }; + }; + }; + home = { + packages = with pkgs; [ + ]; + }; +} diff --git a/home/modules/default.nix b/home/modules/default.nix new file mode 100644 index 0000000..fb2c914 --- /dev/null +++ b/home/modules/default.nix @@ -0,0 +1,13 @@ +{ inputs, ... }@flakeContext: +{ + config, + lib, + pkgs, + ... +}: +{ + home = { + stateVersion = lib.mkDefault "25.05"; + homeDirectory = lib.mkDefault "/home/${config.home.username}"; + }; +} diff --git a/home/modules/packages.nix b/home/modules/packages.nix new file mode 100644 index 0000000..dbf1259 --- /dev/null +++ b/home/modules/packages.nix @@ -0,0 +1,83 @@ +{ inputs, ... }@flakeContext: +{ + config, + pkgs, + ... +}: +let + unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; }; + last-stable = import inputs.nixpkgs-last-unstable { system = "x86_64-linux"; }; + stable = import inputs.nixpkgs-stable { system = "x86_64-linux"; }; +in +{ + programs = { + fastfetch.enable = true; + btop.enable = true; + mangohud.enable = true; + keepassxc.enable = true; + zed-editor = { + enable = true; + extensions = [ + "nix" + ]; + userSettings = { + "telemetry" = { + "diagnostics" = false; + "metrics" = false; + }; + "ui_font_size" = 20; + "buffer_font_size" = 26; + "theme" = { + "mode" = "system"; + "light" = "Ayu Light"; + "dark" = "Ayu Dark"; + }; + }; + }; + }; + services = { + kdeconnect.enable = true; + easyeffects.enable = true; + }; + home = { + packages = with pkgs; [ + # Surfing + (brave.override { + commandLineArgs = [ + "--password-store=basic" # on purpose to make it break "--password-store=gnome-libsecret" + ]; + }) + nekoray + + # Workflow + _64gram + discord + gramps + kdePackages.filelight + libreoffice-qt6 + localsend + lollypop + obsidian + pdfarranger + stretchly + transmission_4-gtk + vlc + #zerotierone + #tg + #reaper + + # Games + ludusavi + prismlauncher + lutris + + # Libs + libsecret + + # Display + #edid-decode + #displaycal + #argyllcms + ]; + }; +} diff --git a/home/modules/plasma-manager.nix b/home/modules/plasma-manager.nix new file mode 100644 index 0000000..22a0e43 --- /dev/null +++ b/home/modules/plasma-manager.nix @@ -0,0 +1,126 @@ +{ inputs, ... }@flakeContext: +{ + config, + pkgs, + ... +}: +{ + programs = { + kate = { + enable = true; + editor = { + brackets = { + automaticallyAddClosing = true; + highlightMatching = true; + }; + font = { + family = "Hack"; + pointSize = 14; + }; + }; + }; + plasma = { + enable = true; + overrideConfig = false; + configFile = { + dolphinrc = { + "General" = { + "RememberOpenedTabs" = true; + }; + "DetailsMode" = { + "ExpandableFolders" = false; + "PreviewSize" = 32; + "IconSize" = 32; + }; + }; + "katerc" = { + "KTextEditor View" = { + "Scroll Bar MiniMap" = false; + "Scroll Bar Preview" = false; + }; + }; + }; + input = { + # /proc/bus/input/devices + mice = [ + { + acceleration = -0.2; + accelerationProfile = "none"; + enable = true; + leftHanded = false; + middleButtonEmulation = false; + name = "Logitech USB Receiver Mouse"; + naturalScroll = false; + productId = "c548"; + scrollSpeed = 1; + vendorId = "046d"; + } + ]; + touchpads = [ + { + accelerationProfile = "none"; + disableWhileTyping = true; + enable = true; + leftHanded = true; + middleButtonEmulation = false; + name = "ELAN1203:00 04F3:307A Touchpad"; + naturalScroll = true; + pointerSpeed = 0; + productId = "307a"; + rightClickMethod = "bottomRight"; + scrollMethod = "twoFingers"; + tapDragLock = false; + tapToClick = true; + twoFingerTap = "rightClick"; + vendorId = "04f3"; + } + ]; + keyboard = { + switchingPolicy = "global"; + # options = [ + # "altshift" + # ]; + layouts = [ + { + layout = "us"; + } + { + layout = "ru"; + } + ]; + }; + }; + workspace = { + #clickItemTo = "open"; # If you liked the click-to-open default from plasma 5 + lookAndFeel = "com.github.vinceliuice.WhiteSur-alt"; + colorScheme = "WhiteSurAlt"; + theme = "WhiteSur-Alt"; + iconTheme = "WhiteSur"; + cursor = { + theme = "Qogir"; + size = 24; + }; + #wallpaper = "${config.home.homeDirectory}//Misc/Desktops/Wallpapers/Desktop/END_Circle_7.png"; + #windowDecorations = { + # library = "org.kde.kwin.aurorae"; + # theme = "__aurorae__svg__WhiteSur"; + #}; + }; + kwin = { + edgeBarrier = 0; # Disables the edge-barriers introduced in plasma 6.1 + cornerBarrier = false; + #scripts.polonium.enable = true; + nightLight = { + enable = true; + mode = "constant"; + temperature.night = 5800; + }; + effects.shakeCursor.enable = false; + virtualDesktops = { + number = 2; + rows = 1; + }; + }; + }; + }; +} diff --git a/home/root.nix b/home/root.nix new file mode 100755 index 0000000..e18cf09 --- /dev/null +++ b/home/root.nix @@ -0,0 +1,41 @@ +{ inputs, ... }@flakeContext: +let + homeModule = + { + config, + lib, + pkgs, + ... + }: + { + imports = with inputs; [ + self.homeModules.default + self.homeModules.plasma-manager + ]; + home = { + username = "root"; + homeDirectory = "/${config.home.username}"; + }; + }; + nixosModule = + { ... }: + { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + users.root = homeModule; + sharedModules = [ inputs.plasma-manager.homeManagerModules.plasma-manager ]; + }; + }; +in +( + (inputs.home-manager.lib.homeManagerConfiguration { + modules = [ + homeModule + ]; + pkgs = inputs.nixpkgs.legacyPackages.x86_64-linux; + }) + // { + inherit nixosModule; + } +) diff --git a/home/server.nix b/home/server.nix new file mode 100755 index 0000000..36df611 --- /dev/null +++ b/home/server.nix @@ -0,0 +1,59 @@ +{ inputs, ... }@flakeContext: +let + homeModule = + { + config, + lib, + pkgs, + ... + }: + { + imports = [ inputs.self.homeModules.default ]; + xdg = { + enable = true; + autostart.enable = true; + userDirs = { + enable = true; + createDirectories = false; + desktop = null; + documents = null; + download = null; + music = null; + pictures = null; + publicShare = null; + templates = null; + videos = null; + }; + }; + home = { + file = { + "ssh" = { + source = config.lib.file.mkOutOfStoreSymlink "${inputs.zeroq.dirs.storage}/SSH/${inputs.zeroq.devices.server.hostname}"; + target = ".ssh"; + }; + }; + username = "${inputs.zeroq.devices.admin}"; + }; + + }; + nixosModule = + { ... }: + { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + users.${inputs.zeroq.devices.admin} = homeModule; + }; + }; +in +( + (inputs.home-manager.lib.homeManagerConfiguration { + modules = [ + homeModule + ]; + pkgs = inputs.nixpkgs.legacyPackages.x86_64-linux; + }) + // { + inherit nixosModule; + } +) diff --git a/modules/.examples/umport.nix b/modules/.examples/umport.nix new file mode 100644 index 0000000..489e604 --- /dev/null +++ b/modules/.examples/umport.nix @@ -0,0 +1,12 @@ +{ + imports = inputs.nypkgs.legacyPackages.${pkgs.system}.lib.umport { + path = ./.; + include = [ + ./somed4/somef3.nix + ]; + exclude = [ + ./somed4 + ./somef4.nix + ]; + }; +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..2ee55d0 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,16 @@ +{ inputs, ... }@flakeContext: +{ + config, + lib, + ... +}: +{ + imports = [ + ./essentials + #./services + + # Flake modules + inputs.home-manager.nixosModules.home-manager # home-manager module + inputs.nix-index-database.nixosModules.nix-index + ]; +} diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix new file mode 100644 index 0000000..aed504c --- /dev/null +++ b/modules/desktop/default.nix @@ -0,0 +1,100 @@ +# Setup DE, xserver and bootloader +{ inputs, ... }@flakeContext: +{ + config, + lib, + pkgs, + ... +}: +{ + imports = [ + ./environment/kde.nix + #./environment/gnome.nix + #./environment/budgie.nix + #./environment/deepin.nix + + ./environment/theming.nix + + inputs.grub2-themes.nixosModules.default # grub2 themes module + ]; + + boot = { + plymouth = { + enable = true; + theme = "bgrt"; + }; + consoleLogLevel = 3; # Enable "Silent boot" + initrd.verbose = false; + kernelParams = [ + "quiet" + "splash" + "boot.shell_on_fail" + "udev.log_priority=3" + "rd.systemd.show_status=auto" + ]; + loader = { + timeout = 2; + efi.canTouchEfiVariables = lib.mkForce false; + systemd-boot.enable = lib.mkForce false; + grub = { + enable = lib.mkForce true; + useOSProber = true; + efiInstallAsRemovable = true; + efiSupport = true; + device = "nodev"; + }; + grub2-theme = { + enable = true; + theme = "whitesur"; + icon = "whitesur"; + footer = true; + customResolution = "1920x1080"; # Optional: Set a custom resolution + }; + }; + }; + + hardware.graphics.enable = true; + programs = { + adb.enable = true; + dconf.enable = true; + gamemode.enable = true; + steam.enable = true; + xwayland.enable = true; + }; + services = { + xserver = { + enable = true; + xkb = { + layout = "us,ru"; + variant = ""; + options = "grp:alt_shift_toggle"; + }; + }; + libinput.enable = true; + colord.enable = true; + printing = { + enable = true; + cups-pdf.enable = true; + }; + }; + environment.sessionVariables = { + NIXOS_OZONE_WL = "1"; + }; + + # environment = { + # systemPackages = with pkgs; [ + # ]; + # }; + # systemd.services.xiccd = { # Color Profiler bus for x11 + # enable = false; + # description = "Xiccd Screen Color Profiler"; + # serviceConfig = { + # ExecStart = "${pkgs.xiccd}/bin/xiccd"; + # ExecStop = "pkill xiccd"; + # Restart = "always"; + # }; + # wantedBy = [ "dbus.service" ]; + # after = [ "dbus.service" ]; + # partOf = [ "dbus.service" ]; + # }; +} diff --git a/modules/desktop/environment/bspwm.nix b/modules/desktop/environment/bspwm.nix new file mode 100644 index 0000000..91b3357 --- /dev/null +++ b/modules/desktop/environment/bspwm.nix @@ -0,0 +1,9 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + services.xserver.windowManager.bspwm.enable = true; +} diff --git a/modules/desktop/environment/budgie.nix b/modules/desktop/environment/budgie.nix new file mode 100644 index 0000000..7c2ee26 --- /dev/null +++ b/modules/desktop/environment/budgie.nix @@ -0,0 +1,36 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + + services.xserver.displayManager.lightdm.enable = true; + #services.displayManager.defaultSession = "lomiri"; + # services.xserver.desktopManager.budgie.enable = true; + #services.xserver.displayManager.lightdm.greeters.lomiri.enable= true; + + #services.desktopManager.lomiri.enable = true; + #-services.xserver.desktopManager.mate.enable = true; + #-services.xserver.desktopManager.lxqt.enable = true; + # services.xserver.desktopManager.lumina.enable = true; + # services.xserver.desktopManager.cde.enable = true; + # services.xserver.desktopManager.cinnamon.enable = true; + # services.xserver.desktopManager.enlightenment.enable = true; + # services.desktopManager.cosmic.xwayland.enable = true; + # services.desktopManager.cosmic.enable = true; + + # services.xserver = { + # enable = true; + # desktopManager = { + # #xterm.enable = false; + # xfce.enable = true; + # xfce.enableWaylandSession = true; + # }; + # }; + + #- services.xserver.desktopManager.pantheon.enable = true; + #- services.pantheon.apps.enable = true; + +} diff --git a/modules/desktop/environment/deepin.nix b/modules/desktop/environment/deepin.nix new file mode 100644 index 0000000..ab61b5f --- /dev/null +++ b/modules/desktop/environment/deepin.nix @@ -0,0 +1,24 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + + # services.xserver = { + # enable = true; + # desktopManager = { + # #xterm.enable = false; + # xfce.enable = true; + # }; + # }; + + services.xserver.displayManager.lightdm.enable = true; + services.xserver.desktopManager.deepin.enable = true; + services.deepin.deepin-anything.enable = true; + services.deepin.dde-daemon.enable = true; + services.deepin.dde-api.enable = true; + services.deepin.app-services.enable = true; + +} diff --git a/modules/desktop/environment/gnome.nix b/modules/desktop/environment/gnome.nix new file mode 100644 index 0000000..53945e0 --- /dev/null +++ b/modules/desktop/environment/gnome.nix @@ -0,0 +1,43 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + programs.dconf.enable = true; + environment = { + gnome.excludePackages = with pkgs; [ + cheese # webcam tool + epiphany # web browser + #evince # document viewer + geary # email reader + gnome-characters + gnome-music + gnome-user-docs + gnome-tour + ]; + systemPackages = with pkgs; [ + gnomeExtensions.appindicator + gnomeExtensions.dash-to-panel + gnomeExtensions.arcmenu + gnomeExtensions.vitals + gnomeExtensions.user-themes + gnome-tweaks + dconf-editor + dconf2nix + + gnome-color-manager + ]; + }; + services = { + udev.packages = with pkgs; [ gnome-settings-daemon ]; + xserver = { + displayManager.gdm = { + enable = true; + wayland = true; + }; + desktopManager.gnome.enable = true; + }; + }; +} diff --git a/modules/desktop/environment/kde.nix b/modules/desktop/environment/kde.nix new file mode 100644 index 0000000..75edc93 --- /dev/null +++ b/modules/desktop/environment/kde.nix @@ -0,0 +1,33 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + qt = { + enable = true; + style = "breeze"; + platformTheme = "kde6"; # kde6 + }; + environment.plasma6.excludePackages = with pkgs.kdePackages; [ + plasma-browser-integration + elisa + # kwallet + # kwallet-pam + # kwalletmanager + ]; + services = { + displayManager = { + sddm = { + enable = true; + theme = "WhiteSur-light"; + wayland = { + enable = true; + compositor = "kwin"; + }; + }; + }; + desktopManager.plasma6.enable = true; + }; +} diff --git a/modules/desktop/environment/theming.nix b/modules/desktop/environment/theming.nix new file mode 100644 index 0000000..e466df2 --- /dev/null +++ b/modules/desktop/environment/theming.nix @@ -0,0 +1,19 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + environment = { + systemPackages = with pkgs; [ + whitesur-gtk-theme + whitesur-icon-theme + #whitesur-cursors + whitesur-kde + qogir-icon-theme + #qogir-theme + #qogir-kde + ]; + }; +} diff --git a/modules/essentials/default.nix b/modules/essentials/default.nix new file mode 100644 index 0000000..00243a2 --- /dev/null +++ b/modules/essentials/default.nix @@ -0,0 +1,14 @@ +{ + config, + ... +}: +{ + imports = [ + ./packages.nix + ./programs.nix + ./services.nix + ./settings.nix + ./tty.nix + ./users.nix + ]; +} diff --git a/modules/essentials/packages.nix b/modules/essentials/packages.nix new file mode 100644 index 0000000..ebc9715 --- /dev/null +++ b/modules/essentials/packages.nix @@ -0,0 +1,50 @@ +{ + config, + pkgs, + ... +}: +{ + environment = { + systemPackages = with pkgs; [ + # Nix + nixfmt-tree + nix-diff + + # Base + mc + yazi + pciutils + smartmontools + efibootmgr + usbutils + + # Data + wget + curl + rsync + fdupes + + # Disk + gparted + parted + ntfs3g + exfatprogs # for gparted exfat support + + # Archivers + rar + unzip + zstd + zip + xarchiver + + # Net + ipset + iptables + nftables + + # Monitoring + btop + fastfetch + ]; + }; +} diff --git a/modules/essentials/programs.nix b/modules/essentials/programs.nix new file mode 100644 index 0000000..f0c4b4a --- /dev/null +++ b/modules/essentials/programs.nix @@ -0,0 +1,29 @@ +{ + config, + ... +}: +{ + programs = { + git = { + enable = true; + config = { + user = { + name = "oqyude"; + email = "oqyude@gmail.com"; + }; + }; + }; + lazygit.enable = true; + command-not-found.enable = false; + nix-index.enable = true; + nh = { + enable = true; + flake = "/etc/nixos"; + clean = { + enable = true; + extraArgs = "--keep 3 --keep-since 2d"; + dates = "daily"; + }; + }; + }; +} diff --git a/modules/essentials/services.nix b/modules/essentials/services.nix new file mode 100644 index 0000000..97563e7 --- /dev/null +++ b/modules/essentials/services.nix @@ -0,0 +1,9 @@ +{ + config, + ... +}: +{ + services = { + tailscale.enable = true; + }; +} diff --git a/modules/essentials/settings.nix b/modules/essentials/settings.nix new file mode 100644 index 0000000..976ad9d --- /dev/null +++ b/modules/essentials/settings.nix @@ -0,0 +1,50 @@ +{ + config, + ... +}: +{ + system.nixos.label = "default"; + + nix = { + settings = { + substituters = [ + "https://nixos-cache-proxy.cofob.dev" # https://gist.github.com/cofob/9b1fd205e6d961a45c225ae9f0af1394 + "https://nix-community.cachix.org" + ]; + auto-optimise-store = true; + experimental-features = [ + "nix-command" + "flakes" + ]; + }; + }; + + nixpkgs.config.allowUnfree = true; + + security = { + sudo.wheelNeedsPassword = false; + polkit = { + enable = true; + extraConfig = '' + polkit.addRule(function(action, subject) { + if ((action.id == "org.gnome.gparted" || // for gnome + action.id == "org.freedesktop.policykit.exec") && // for desktop, nekoray + subject.isInGroup("wheel")){ // for sudo + return polkit.Result.YES; + } + }); + ''; + }; + }; + systemd.network.wait-online.enable = false; + + time.timeZone = "Europe/Moscow"; + i18n = { + defaultLocale = "en_US.UTF-8"; + supportedLocales = [ + #"C.UTF-8/UTF-8" + "en_US.UTF-8/UTF-8" + "ru_RU.UTF-8/UTF-8" + ]; + }; +} diff --git a/modules/essentials/tty.nix b/modules/essentials/tty.nix new file mode 100644 index 0000000..b22cc3a --- /dev/null +++ b/modules/essentials/tty.nix @@ -0,0 +1,37 @@ +{ + config, + pkgs, + ... +}: +{ + system.userActivationScripts.zshrc = "touch .zshrc"; + users.defaultUserShell = pkgs.zsh; + programs.zsh = { + enable = true; + enableCompletion = true; + enableBashCompletion = true; + syntaxHighlighting.enable = true; + zsh-autoenv.enable = true; + histSize = 10000; + loginShellInit = "cd /etc/nixos && clear && fastfetch"; + ohMyZsh = { + enable = true; + theme = "robbyrussell"; + }; + shellAliases = { + # shell + ff = "clear && fastfetch"; + l = "ls -l"; + + # ssh + s-1 = "ssh sapphira-1"; + s-1t = "ssh sapphira-1t"; + + # Somethings + reboot-bios = "sudo systemctl reboot --firmware-setup"; + + # Extras + plasma-manager = "nix run github:nix-community/plasma-manager"; + }; + }; +} diff --git a/modules/essentials/users.nix b/modules/essentials/users.nix new file mode 100644 index 0000000..0807095 --- /dev/null +++ b/modules/essentials/users.nix @@ -0,0 +1,25 @@ +{ + config, + ... +}: +{ + users = { + users = { + oqyude = { + isNormalUser = true; + description = "Jor Oqyude"; + initialPassword = "1234"; + extraGroups = [ + "audio" + "disk" + "gamemode" + "libvirtd" + "networkmanager" + "pipewire" + "qemu-libvirtd" + "wheel" + ]; + }; + }; + }; +} diff --git a/modules/extra/gaming/aagl.nix b/modules/extra/gaming/aagl.nix new file mode 100644 index 0000000..d9948e8 --- /dev/null +++ b/modules/extra/gaming/aagl.nix @@ -0,0 +1,19 @@ +# https://github.com/ezKEa/aagl-gtk-on-nix +{ inputs, ... }@flakeContext: +{ + config, + pkgs, + ... +}: +{ + imports = [ inputs.aagl.nixosModules.default ]; + nix.settings = inputs.aagl.nixConfig; # Set up Cachix + programs = { + anime-game-launcher.enable = true; + #anime-games-launcher.enable = true; + #honkers-railway-launcher.enable = true; + #honkers-launcher.enable = true; + #wavey-launcher.enable = true; + #sleepy-launcher.enable = true; + }; +} diff --git a/modules/extra/gaming/nix-gaming.nix b/modules/extra/gaming/nix-gaming.nix new file mode 100644 index 0000000..ffb6d71 --- /dev/null +++ b/modules/extra/gaming/nix-gaming.nix @@ -0,0 +1,13 @@ +# https://github.com/fufexan/nix-gaming +{ inputs, ... }@flakeContext: +{ + config, + pkgs, + ... +}: +{ + nix.settings = { + substituters = [ "https://nix-gaming.cachix.org" ]; + trusted-public-keys = [ "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4=" ]; + }; +} diff --git a/modules/extra/musnix.nix b/modules/extra/musnix.nix new file mode 100644 index 0000000..c2c7f87 --- /dev/null +++ b/modules/extra/musnix.nix @@ -0,0 +1,47 @@ +# https://github.com/musnix/musnix +{ inputs, ... }@flakeContext: +{ + config, + lib, + pkgs, + ... +}: +{ + imports = [ inputs.musnix.nixosModules.musnix ]; + + specialisation = { + "rt_kernel" = { + inheritParentConfig = true; + configuration = { + ### + boot.kernelModules = [ + "snd-seq" + "snd-rawmidi" + ]; + services = { + pipewire.enable = lib.mkForce false; + jack = { + jackd.enable = lib.mkForce true; + alsa.enable = true; + loopback.enable = true; + }; + }; + environment.systemPackages = with pkgs; [ + jack2 + jack_capture + libjack2 + pavucontrol + qjackctl + ]; + musnix = { + enable = true; + #ffado.enable = true; + rtcqs.enable = true; + kernel.realtime = true; + kernel.packages = pkgs.linuxPackages_latest_rt; + }; + ### + }; + }; + }; +} diff --git a/modules/extra/self/fingerprint.nix b/modules/extra/self/fingerprint.nix new file mode 100644 index 0000000..d407628 --- /dev/null +++ b/modules/extra/self/fingerprint.nix @@ -0,0 +1,33 @@ +{ inputs, ... }@flakeContext: +let + pkgs-stable = import inputs.nixpkgs-stable { system = "x86_64-linux"; }; +in +{ + config, + pkgs, + ... +}: +{ + security.pam.services.login.fprintAuth = false; + services = { + fprintd = { + enable = true; + package = pkgs-stable.fprintd.override { + libfprint = pkgs-stable.libfprint.overrideAttrs (oldAttrs: { + version = "git"; + src = pkgs-stable.fetchFromGitHub { + owner = "ericlinagora"; + repo = "libfprint-CS9711"; + rev = "c242a40fcc51aec5b57d877bdf3edfe8cb4883fd"; + sha256 = "sha256-WFq8sNitwhOOS3eO8V35EMs+FA73pbILRP0JoW/UR80="; + }; + nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ + pkgs-stable.opencv + pkgs-stable.cmake + pkgs-stable.doctest + ]; + }); + }; + }; + }; +} diff --git a/modules/extra/self/zapret.nix b/modules/extra/self/zapret.nix new file mode 100644 index 0000000..a52c59b --- /dev/null +++ b/modules/extra/self/zapret.nix @@ -0,0 +1,30 @@ +{ inputs, ... }@flakeContext: +{ + config, + pkgs, + ... +}: +{ + systemd.services.zapret = { + description = "zapret complete"; + unitConfig = { + After = [ "network-online.target" ]; + Wants = [ "network-online.target" ]; + }; + wantedBy = [ "multi-user.target" ]; + path = [ "/run/current-system/sw" ]; + serviceConfig = { + Type = "simple"; + Restart = "on-failure"; + User = "root"; + WorkingDirectory = "${inputs.zapret.script-dir}"; + ExecStart = "/run/current-system/sw/bin/bash ./main_script.sh -nointeractive"; + ExecStop = "/run/current-system/sw/bin/bash ./stop_and_clean_nft.sh"; + }; + }; + environment = { + systemPackages = with pkgs; [ + nftables + ]; + }; +} diff --git a/modules/software/daw.nix b/modules/software/daw.nix new file mode 100644 index 0000000..f34c27d --- /dev/null +++ b/modules/software/daw.nix @@ -0,0 +1,21 @@ +{ inputs, ... }@flakeContext: +{ + config, + lib, + pkgs, + ... +}: +{ + environment = { + systemPackages = with pkgs; [ + # yabridge + wineWowPackages.yabridge + yabridge + yabridgectl + + # JACK Control + qjackctl + ]; + }; + +} diff --git a/modules/software/virtual.nix b/modules/software/virtual.nix new file mode 100644 index 0000000..f508bbb --- /dev/null +++ b/modules/software/virtual.nix @@ -0,0 +1,52 @@ +{ inputs, ... }@flakeContext: +{ + config, + lib, + pkgs, + ... +}: +{ + boot = { + kernelModules = [ + "kvm-amd" + "vfio" + "vfio-pci" + "vfio_iommu_type1" + "vfio_virqfd" + ]; + kernelParams = [ + "amd_iommu=on" + "iommu=pt" + "kvm.ignore_msrs=1" + ]; + }; + services = { + spice-vdagentd.enable = true; + }; + virtualisation = { + libvirtd = { + enable = true; + onBoot = "ignore"; + onShutdown = "shutdown"; + qemu = { + swtpm.enable = true; + ovmf.enable = true; + ovmf.packages = [ pkgs.OVMFFull.fd ]; + }; + }; + spiceUSBRedirection.enable = true; + }; + environment = { + systemPackages = with pkgs; [ + spice + #spice-gtk + #spice-protocol + virt-manager + virt-viewer + virtiofsd + win-spice + virtio-win + #looking-glass-client # pci-passthrough + ]; + }; +} diff --git a/modules/software/wine.nix b/modules/software/wine.nix new file mode 100644 index 0000000..07bf53a --- /dev/null +++ b/modules/software/wine.nix @@ -0,0 +1,20 @@ +{ inputs, ... }@flakeContext: +{ + config, + lib, + pkgs, + ... +}: +{ + environment = { + systemPackages = with pkgs; [ + #wineWowPackages.waylandFull + wineWowPackages.stagingFull + #wineWowPackages.fonts + dxvk + ]; + sessionVariables = { + WINEARCH = "win64"; + }; + }; +} diff --git a/modules/zeroq/flake.nix b/modules/zeroq/flake.nix new file mode 100755 index 0000000..29d8019 --- /dev/null +++ b/modules/zeroq/flake.nix @@ -0,0 +1,40 @@ +{ + description = "zeroq structure flake"; + + outputs = + { self }: + + rec { + + nixos = "/etc/nixos"; + + devices = rec { + admin = "oqyude"; + laptop = { + hostname = "atoridu"; + }; + mini-laptop = { + hostname = "lamet"; + }; + server = { + username = "otreca"; + hostname = "sapphira"; + }; + wsl.hostname = "wsl"; + }; + + dirs = rec { + # User + user-home = "/home/${devices.admin}"; + user-storage = "${user-home}/Storage"; + therima-drive = "/mnt/therima"; + vetymae-drive = "/mnt/vetymae"; + + # Server + server-home = "/home/${devices.admin}/External"; + storage = "${server-home}/Storage"; + calibre-library = "${server-home}/Books-Library"; + }; + }; + +}