diff --git a/default.nix b/default.nix index f7a574e..dd0466b 100644 --- a/default.nix +++ b/default.nix @@ -1,8 +1,8 @@ -top @ {inputs, ...}: { - imports = [./nixos ./home ./packages ./overlays ./hardware-configurations]; - systems = ["x86_64-linux"]; +top @ { inputs, ... }: { + imports = [ ./nixos ./home ./packages ./overlays ./hardware-configurations ]; + systems = [ "x86_64-linux" ]; flake.stateVersion = "24.05"; - perSystem = perSystem @ {system, ...}: { + perSystem = { system, ... }: { config._module.args = { pkgs = import inputs.nixpkgs { inherit system; diff --git a/hardware-configurations/default.nix b/hardware-configurations/default.nix index 7003a30..c988429 100644 --- a/hardware-configurations/default.nix +++ b/hardware-configurations/default.nix @@ -1,19 +1,15 @@ -top @ {...}: { +{ ... }: { flake.hardwareConfigurations = { - nova = { - lib, - modulesPath, - ... - }: { - imports = [(modulesPath + "/installer/scan/not-detected.nix")]; + nova = { lib, modulesPath, ... }: { + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; boot = { initrd = { - availableKernelModules = ["xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" "sdhci_pci"]; - kernelModules = []; + availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" "sdhci_pci" ]; + kernelModules = [ ]; luks.devices."nixos".device = "/dev/disk/by-uuid/712dd8ba-d5b4-438a-9a77-663b8c935cfe"; }; - kernelModules = ["kvm-intel"]; - extraModulePackages = []; + kernelModules = [ "kvm-intel" ]; + extraModulePackages = [ ]; }; fileSystems = { "/" = { @@ -25,7 +21,7 @@ top @ {...}: { fsType = "vfat"; }; }; - swapDevices = []; + swapDevices = [ ]; networking.useDHCP = lib.mkForce true; nixpkgs.hostPlatform = lib.mkForce "x86_64-linux"; hardware.cpu.intel.updateMicrocode = lib.mkForce false; diff --git a/home/modules/default.nix b/home/modules/default.nix index 11118ea..5798030 100644 --- a/home/modules/default.nix +++ b/home/modules/default.nix @@ -1,7 +1,7 @@ -toplevel @ {moduleWithSystem, ...}: { +toplevel @ { moduleWithSystem, ... }: { flake.homeManagerModules = { base = moduleWithSystem ( - top @ {...}: perSystem @ {config, ...}: { + { ... }: { config, ... }: { programs.home-manager.enable = true; home.stateVersion = toplevel.config.flake.stateVersion; xdg = { @@ -23,12 +23,12 @@ toplevel @ {moduleWithSystem, ...}: { } ); ivand = moduleWithSystem ( - top @ {...}: perSystem @ {pkgs, ...}: { + { ... }: { pkgs, ... }: { home = { username = "ivand"; homeDirectory = "/home/ivand"; - sessionVariables = {EDITOR = "nvim";}; - packages = with pkgs; [nvim]; + sessionVariables = { EDITOR = "nvim"; }; + packages = with pkgs; [ nvim ]; }; programs = { git = with pkgs.lib; { @@ -55,13 +55,12 @@ toplevel @ {moduleWithSystem, ...}: { } ); util = moduleWithSystem ( - top @ {...}: perSystem @ { - pkgs, - config, - ... - }: { + { ... }: { pkgs + , config + , ... + }: { home = { - packages = with pkgs; [openssl mlocate uutils-coreutils-noprefix speedtest-cli]; + packages = with pkgs; [ openssl mlocate uutils-coreutils-noprefix speedtest-cli ]; sessionVariables = { PAGER = "bat"; BAT_THEME = "catppuccin-mocha"; @@ -70,8 +69,8 @@ toplevel @ {moduleWithSystem, ...}: { programs = { password-store = { enable = true; - package = pkgs.pass.withExtensions (e: with e; [pass-otp pass-file]); - settings = {PASSWORD_STORE_DIR = "${config.home.homeDirectory}/.password-store";}; + package = pkgs.pass.withExtensions (e: with e; [ pass-otp pass-file ]); + settings = { PASSWORD_STORE_DIR = "${config.home.homeDirectory}/.password-store"; }; }; git = { enable = true; @@ -92,22 +91,22 @@ toplevel @ {moduleWithSystem, ...}: { tealdeer = { enable = true; settings = { - display = {compact = true;}; - updates = {auto_update = true;}; + display = { compact = true; }; + updates = { auto_update = true; }; }; }; bottom = { enable = true; settings = { - flags = {rate = "250ms";}; + flags = { rate = "250ms"; }; row = [ { ratio = 40; - child = [{type = "cpu";} {type = "mem";} {type = "net";}]; + child = [{ type = "cpu"; } { type = "mem"; } { type = "net"; }]; } { ratio = 35; - child = [{type = "temp";} {type = "disk";}]; + child = [{ type = "temp"; } { type = "disk"; }]; } { ratio = 40; @@ -133,31 +132,33 @@ toplevel @ {moduleWithSystem, ...}: { }; bat = { enable = true; - themes = let - catppuccin = pkgs.fetchFromGitHub { - owner = "catppuccin"; - repo = "bat"; - rev = "82e7ca555f805b53d2b377390e4ab38c20282e83"; - sha256 = "sha256-/Ob9iCVyjJDBCXlss9KwFQTuxybmSSzYRBZxOT10PZg="; + themes = + let + catppuccin = pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "bat"; + rev = "82e7ca555f805b53d2b377390e4ab38c20282e83"; + sha256 = "sha256-/Ob9iCVyjJDBCXlss9KwFQTuxybmSSzYRBZxOT10PZg="; + }; + in + { + catppuccin-mocha = { + src = catppuccin; + file = "themes/Catppuccin Mocha.tmTheme"; + }; + catppuccin-macchiato = { + src = catppuccin; + file = "themes/Catppuccin Macchiato.tmTheme"; + }; + catppuccin-frappe = { + src = catppuccin; + file = "themes/Catppuccin Frappe.tmTheme"; + }; + catppuccin-latte = { + src = catppuccin; + file = "themes/Catppuccin Latte.tmTheme"; + }; }; - in { - catppuccin-mocha = { - src = catppuccin; - file = "themes/Catppuccin Mocha.tmTheme"; - }; - catppuccin-macchiato = { - src = catppuccin; - file = "themes/Catppuccin Macchiato.tmTheme"; - }; - catppuccin-frappe = { - src = catppuccin; - file = "themes/Catppuccin Frappe.tmTheme"; - }; - catppuccin-latte = { - src = catppuccin; - file = "themes/Catppuccin Latte.tmTheme"; - }; - }; }; ssh.enable = true; gpg.enable = true; @@ -174,99 +175,100 @@ toplevel @ {moduleWithSystem, ...}: { } ); shell = moduleWithSystem ( - top @ {...}: perSystem @ {pkgs, ...}: { - programs = let - shellAliases = { - cal = "cal $(date +%Y)"; - GG = "git add . && git commit -m 'GG' && git push --set-upstream origin HEAD"; - gad = "git add . && git diff --cached"; - gac = "ga && gc"; - ga = "git add ."; - gc = "git commit"; - dev = "nix develop --command $SHELL"; - ls = "eza"; - la = "eza --all"; - lt = "eza --git-ignore --all --tree --level=10"; - sc = "systemctl"; - neofetch = "${pkgs.fastfetch}/bin/fastfetch -c all.jsonc"; - }; - sessionVariables = {}; - in { - bash = { - inherit shellAliases sessionVariables; - enable = true; - enableVteIntegration = true; - historyControl = ["erasedups"]; - historyIgnore = ["ls" "cd" "exit"]; - }; - zsh = { - inherit shellAliases sessionVariables; - enable = true; - dotDir = ".config/zsh"; - defaultKeymap = "viins"; - enableVteIntegration = true; - syntaxHighlighting.enable = true; - autosuggestion.enable = true; - history.expireDuplicatesFirst = true; - historySubstringSearch.enable = true; - }; - nushell = { - enable = true; - environmentVariables = {config = ''{ show_banner: false, completions: { quick: false partial: false algorithm: "prefix" } } '';}; + { ... }: { pkgs, ... }: { + programs = + let shellAliases = { - gcal = ''bash -c "cal $(date +%Y)" ''; - la = "ls -al"; - dev = "nix develop --command $env.SHELL"; + cal = "cal $(date +%Y)"; + GG = "git add . && git commit -m 'GG' && git push --set-upstream origin HEAD"; + gad = "git add . && git diff --cached"; + gac = "ga && gc"; + ga = "git add ."; + gc = "git commit"; + dev = "nix develop --command $SHELL"; + ls = "eza"; + la = "eza --all"; + lt = "eza --git-ignore --all --tree --level=10"; + sc = "systemctl"; + neofetch = "${pkgs.fastfetch}/bin/fastfetch -c all.jsonc"; + }; + sessionVariables = { }; + in + { + bash = { + inherit shellAliases sessionVariables; + enable = true; + enableVteIntegration = true; + historyControl = [ "erasedups" ]; + historyIgnore = [ "ls" "cd" "exit" ]; + }; + zsh = { + inherit shellAliases sessionVariables; + enable = true; + dotDir = ".config/zsh"; + defaultKeymap = "viins"; + enableVteIntegration = true; + syntaxHighlighting.enable = true; + autosuggestion.enable = true; + history.expireDuplicatesFirst = true; + historySubstringSearch.enable = true; + }; + nushell = { + enable = true; + environmentVariables = { config = ''{ show_banner: false, completions: { quick: false partial: false algorithm: "prefix" } } ''; }; + shellAliases = { + gcal = ''bash -c "cal $(date +%Y)" ''; + la = "ls -al"; + dev = "nix develop --command $env.SHELL"; + }; + }; + kitty.shellIntegration = { + enableBashIntegration = true; + enableZshIntegration = true; + }; + tmux = { + enable = true; + clock24 = true; + baseIndex = 1; + escapeTime = 0; + keyMode = "vi"; + shell = "\${SHELL}"; + terminal = "screen-256color"; + plugins = with pkgs.tmuxPlugins; [ tilish catppuccin ]; + extraConfig = '' + set-option -a terminal-features 'screen-256color:RGB' + ''; + }; + starship = { + enable = true; + enableNushellIntegration = true; + enableZshIntegration = true; + enableBashIntegration = true; + }; + eza = { + enable = true; + enableZshIntegration = true; + enableBashIntegration = true; + extraOptions = [ + "--long" + "--header" + "--icons" + "--smart-group" + "--mounts" + "--octal-permissions" + "--git" + ]; }; }; - kitty.shellIntegration = { - enableBashIntegration = true; - enableZshIntegration = true; - }; - tmux = { - enable = true; - clock24 = true; - baseIndex = 1; - escapeTime = 0; - keyMode = "vi"; - shell = "\${SHELL}"; - terminal = "screen-256color"; - plugins = with pkgs.tmuxPlugins; [tilish catppuccin]; - extraConfig = '' - set-option -a terminal-features 'screen-256color:RGB' - ''; - }; - starship = { - enable = true; - enableNushellIntegration = true; - enableZshIntegration = true; - enableBashIntegration = true; - }; - eza = { - enable = true; - enableZshIntegration = true; - enableBashIntegration = true; - extraOptions = [ - "--long" - "--header" - "--icons" - "--smart-group" - "--mounts" - "--octal-permissions" - "--git" - ]; - }; - }; } ); swayland = moduleWithSystem ( - top @ {...}: perSystem @ { - pkgs, - config, - ... - }: { + { ... }: { pkgs + , config + , ... + }: { home = { - packages = with pkgs; [audacity gimp grim libnotify libreoffice-qt mupdf slurp transmission_4 wl-clipboard xdg-user-dirs xdg-utils xwayland telegram-desktop]; + packages = with pkgs; [ audacity gimp grim libnotify libreoffice-qt mupdf slurp transmission_4 wl-clipboard xdg-user-dirs xdg-utils xwayland telegram-desktop ]; pointerCursor = with pkgs; { name = "catppuccin-mocha-green-cursors"; package = catppuccin-cursors.mochaGreen; @@ -282,10 +284,10 @@ toplevel @ {moduleWithSystem, ...}: { terminal = "kitty"; modifier = "Mod4"; startup = [ - {command = "swaymsg 'workspace 2; exec firefox'";} - {command = "swaymsg 'workspace 1; exec kitty'";} + { command = "swaymsg 'workspace 2; exec firefox'"; } + { command = "swaymsg 'workspace 1; exec kitty'"; } ]; - bars = []; + bars = [ ]; window.titlebar = false; keybindings = pkgs.lib.mkOptionDefault { "F1" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle"; @@ -313,81 +315,82 @@ toplevel @ {moduleWithSystem, ...}: { }; }; }; - swaynag = {enable = config.wayland.windowManager.sway.enable;}; + swaynag = { enable = config.wayland.windowManager.sway.enable; }; }; programs = { waybar = { enable = true; settings = { - mainBar = let - in { - layer = "top"; - position = "top"; - height = 30; - output = ["eDP-1" "HDMI-A-1" "*"]; + mainBar = + let + in { + layer = "top"; + position = "top"; + height = 30; + output = [ "eDP-1" "HDMI-A-1" "*" ]; - modules-left = ["sway/workspaces" "sway/mode"]; - modules-center = ["clock#week" "clock#year" "clock#time"]; - modules-right = ["network" "pulseaudio" "memory" "cpu" "battery"]; + modules-left = [ "sway/workspaces" "sway/mode" ]; + modules-center = [ "clock#week" "clock#year" "clock#time" ]; + modules-right = [ "network" "pulseaudio" "memory" "cpu" "battery" ]; - "clock#time" = { - format = "{:%H:%M:%S}"; - interval = 1; - tooltip = false; - }; - "clock#week" = { - format = "{:%a}"; - tooltip = false; - }; - "clock#year" = { - format = "{:%Y-%m-%d}"; - tooltip = false; - }; - - battery = { - format = "{icon} {capacity}% {time}"; - format-time = " {H} h {M} m"; - format-icons = ["" "" "" "" ""]; - states = { - warning = 30; - critical = 15; + "clock#time" = { + format = "{:%H:%M:%S}"; + interval = 1; + tooltip = false; }; - tooltip = false; - }; - - cpu = {format = " {usage}%";}; - - memory = { - format = " {percentage}%"; - interval = 5; - }; - - pulseaudio = { - format = "{icon} {volume}% | {format_source}"; - format-muted = "󰝟 {volume}% | {format_source}"; - format-source = "{volume}% "; - format-source-muted = "{volume}% "; - format-icons = { - headphone = ""; - default = ["" "" ""]; + "clock#week" = { + format = "{:%a}"; + tooltip = false; + }; + "clock#year" = { + format = "{:%Y-%m-%d}"; + tooltip = false; }; - tooltip = false; - }; - network = { - format-ethernet = "󰈁 | {bandwidthUpBytes} {bandwidthDownBytes}"; - format-wifi = "{icon} | {bandwidthUpBytes} {bandwidthDownBytes}"; - format-disconnected = "󰈂 no connection"; - format-icons = ["󰤟" "󰤢" "󰤥" "󰤨"]; - interval = 5; - tooltip = false; - }; + battery = { + format = "{icon} {capacity}% {time}"; + format-time = " {H} h {M} m"; + format-icons = [ "" "" "" "" "" ]; + states = { + warning = 30; + critical = 15; + }; + tooltip = false; + }; - "sway/workspaces" = { - disable-scroll = true; - all-outputs = true; + cpu = { format = " {usage}%"; }; + + memory = { + format = " {percentage}%"; + interval = 5; + }; + + pulseaudio = { + format = "{icon} {volume}% | {format_source}"; + format-muted = "󰝟 {volume}% | {format_source}"; + format-source = "{volume}% "; + format-source-muted = "{volume}% "; + format-icons = { + headphone = ""; + default = [ "" "" "" ]; + }; + tooltip = false; + }; + + network = { + format-ethernet = "󰈁 | {bandwidthUpBytes} {bandwidthDownBytes}"; + format-wifi = "{icon} | {bandwidthUpBytes} {bandwidthDownBytes}"; + format-disconnected = "󰈂 no connection"; + format-icons = [ "󰤟" "󰤢" "󰤥" "󰤨" ]; + interval = 5; + tooltip = false; + }; + + "sway/workspaces" = { + disable-scroll = true; + all-outputs = true; + }; }; - }; }; systemd = { enable = true; @@ -537,9 +540,9 @@ toplevel @ {moduleWithSystem, ...}: { plugins = with pkgs; [ ( rofi-calc.override - { - rofi-unwrapped = rofi-wayland-unwrapped; - } + { + rofi-unwrapped = rofi-wayland-unwrapped; + } ) ]; }; @@ -560,11 +563,11 @@ toplevel @ {moduleWithSystem, ...}: { }; imv = { enable = true; - settings = {options.fullscreen = true;}; + settings = { options.fullscreen = true; }; }; mpv = { enable = true; - scripts = with pkgs.mpvScripts; [uosc thumbfast]; + scripts = with pkgs.mpvScripts; [ uosc thumbfast ]; }; bash.profileExtra = ''[ "$(tty)" = "/dev/tty1" ] && exec sway ''; zsh.loginExtra = ''[ "$(tty)" = "/dev/tty1" ] && exec sway ''; @@ -584,19 +587,19 @@ toplevel @ {moduleWithSystem, ...}: { OnCalendar = "*-*-* 10:00:00"; Persistent = true; }; - Install = {WantedBy = ["timers.target"];}; + Install = { WantedBy = [ "timers.target" ]; }; }; }; services = { wpd = { - Install = {WantedBy = ["sway-session.target"];}; + Install = { WantedBy = [ "sway-session.target" ]; }; Unit = { Description = "Switch background every x minutes"; After = "graphical-session-pre.target"; PartOf = "graphical-session.target"; }; Service = { - ExecStart = ["${pkgs.wpd}/bin/wpd"]; + ExecStart = [ "${pkgs.wpd}/bin/wpd" ]; }; }; }; @@ -617,7 +620,7 @@ toplevel @ {moduleWithSystem, ...}: { } ); web = moduleWithSystem ( - top @ {...}: perSystem @ {...}: { + { ... }: { ... }: { programs = { browserpass.enable = true; firefox = { diff --git a/nixos/configs/default.nix b/nixos/configs/default.nix index d771b7b..fab0621 100644 --- a/nixos/configs/default.nix +++ b/nixos/configs/default.nix @@ -1,44 +1,41 @@ -toplevel @ { - inputs, - withSystem, - ... -}: let +toplevel @ { inputs +, withSystem +, ... +}: +let system = "x86_64-linux"; mods = toplevel.config.flake.nixosModules; hardwareConfigurations = toplevel.config.flake.hardwareConfigurations; - essential = with mods; [grub base shell security wireless intranet]; - desktop = with mods; [sound wayland]; - configWithModules = { - hardware ? {nixpkgs.hostPlatform = system;}, - modules, - }: - withSystem system (ctx @ { - config, - inputs', - pkgs, - ... + essential = with mods; [ grub base shell security wireless intranet ]; + desktop = with mods; [ sound wayland ]; + configWithModules = + { hardware ? { nixpkgs.hostPlatform = system; } + , modules + , }: - inputs.nixpkgs.lib.nixosSystem { - specialArgs = { - inherit inputs inputs' pkgs; - packages = config.packages; - }; - modules = [hardware] ++ modules; - }); + withSystem system ({ config, inputs', pkgs, ... }: + inputs.nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs inputs' pkgs; + packages = config.packages; + }; + modules = [ hardware ] ++ modules; + }); novaConfig = mods: configWithModules { hardware = hardwareConfigurations.nova; modules = essential ++ desktop ++ mods; }; -in { +in +{ flake.nixosConfigurations = { - nova = novaConfig [mods.ivand]; - nova-music = novaConfig (with mods; [ivand music]); - nova-crypto = novaConfig (with mods; [ivand cryptocurrency]); - nova-nonya = novaConfig (with mods; [ivand anon cryptocurrency]); - nova-ai = novaConfig (with mods; [ivand ai]); - install-iso = configWithModules {modules = with mods; [grub base shell wireless];}; - vps = configWithModules {modules = with mods; [base shell security vps mailserver nginx wireguard-output anonymous-dns firewall rest];}; - stara-miner = configWithModules {modules = essential ++ [mods.monero-miner];}; + nova = novaConfig [ mods.ivand ]; + nova-music = novaConfig (with mods; [ ivand music ]); + nova-crypto = novaConfig (with mods; [ ivand cryptocurrency ]); + nova-nonya = novaConfig (with mods; [ ivand anon cryptocurrency ]); + nova-ai = novaConfig (with mods; [ ivand ai ]); + install-iso = configWithModules { modules = with mods; [ grub base shell wireless ]; }; + vps = configWithModules { modules = with mods; [ base shell security vps mailserver nginx wireguard-output anonymous-dns firewall rest ]; }; + stara-miner = configWithModules { modules = essential ++ [ mods.monero-miner ]; }; }; } diff --git a/nixos/modules/default.nix b/nixos/modules/default.nix index 08fd61b..654f6b9 100644 --- a/nixos/modules/default.nix +++ b/nixos/modules/default.nix @@ -1,39 +1,37 @@ -top @ { - inputs, - moduleWithSystem, - ... -}: { +top @ { inputs, moduleWithSystem, ... }: { flake.nixosModules = { - grub = moduleWithSystem (toplevel @ {...}: perSystem @ {pkgs, ...}: { + grub = moduleWithSystem ({ ... }: { pkgs, ... }: { boot = { loader = { - grub = let - theme = pkgs.sleek-grub-theme.override { - withBanner = "Hello Ivan"; - withStyle = "bigSur"; + grub = + let + theme = pkgs.sleek-grub-theme.override { + withBanner = "Hello Ivan"; + withStyle = "bigSur"; + }; + in + { + enable = pkgs.lib.mkDefault true; + useOSProber = true; + efiSupport = true; + device = "nodev"; + theme = theme; + splashImage = "${theme}/background.png"; }; - in { - enable = pkgs.lib.mkDefault true; - useOSProber = true; - efiSupport = true; - device = "nodev"; - theme = theme; - splashImage = "${theme}/background.png"; - }; efi.canTouchEfiVariables = true; }; }; }); - base = moduleWithSystem (toplevel @ {...}: perSystem @ {pkgs, ...}: { - imports = [inputs.hosts.nixosModule]; + base = moduleWithSystem ({ ... }: { pkgs, ... }: { + imports = [ inputs.hosts.nixosModule ]; system.stateVersion = top.config.flake.stateVersion; - nix = {extraOptions = ''experimental-features = nix-command flakes'';}; - i18n.supportedLocales = ["all"]; + nix = { extraOptions = ''experimental-features = nix-command flakes''; }; + i18n.supportedLocales = [ "all" ]; time.timeZone = "Europe/Prague"; environment = { - systemPackages = with pkgs; [cmatrix uutils-coreutils-noprefix cryptsetup fd file git glibc gnumake mlocate openssh openssl procs ripgrep srm unzip vim zip just nixos-install-tools tshark]; - sessionVariables = {MAKEFLAGS = "-j 4";}; - shells = with pkgs; [bash zsh nushell]; + systemPackages = with pkgs; [ cmatrix uutils-coreutils-noprefix cryptsetup fd file git glibc gnumake mlocate openssh openssl procs ripgrep srm unzip vim zip just nixos-install-tools tshark ]; + sessionVariables = { MAKEFLAGS = "-j 4"; }; + shells = with pkgs; [ bash zsh nushell ]; enableAllTerminfo = true; }; users.defaultUserShell = pkgs.zsh; @@ -57,7 +55,7 @@ top @ { }; }; }); - shell = moduleWithSystem (toplevel @ {...}: perSystem @ {pkgs, ...}: { + shell = moduleWithSystem ({ ... }: { pkgs, ... }: { programs = { starship.enable = true; zsh = { @@ -65,7 +63,7 @@ top @ { syntaxHighlighting.enable = true; autosuggestions = { enable = true; - strategy = ["completion"]; + strategy = [ "completion" ]; }; shellAliases = { cal = "cal $(date +%Y)"; @@ -85,7 +83,7 @@ top @ { }; }; }); - sound = moduleWithSystem (toplevel @ {...}: perSystem @ {pkgs, ...}: { + sound = moduleWithSystem ({ ... }: { pkgs, ... }: { services = { pipewire = { enable = true; @@ -93,14 +91,14 @@ top @ { pulse.enable = true; }; }; - environment.systemPackages = with pkgs; [pwvucontrol]; + environment.systemPackages = with pkgs; [ pwvucontrol ]; }); - music = moduleWithSystem (toplevel @ {...}: perSystem @ {pkgs, ...}: { - imports = [inputs.musnix.nixosModules.musnix]; - environment.systemPackages = with pkgs; [guitarix]; + music = moduleWithSystem ({ ... }: { pkgs, ... }: { + imports = [ inputs.musnix.nixosModules.musnix ]; + environment.systemPackages = with pkgs; [ guitarix ]; services.pipewire = { jack.enable = true; - extraConfig = {jack."69-low-latency" = {"jack.properties" = {"node.latency" = "64/48000";};};}; + extraConfig = { jack."69-low-latency" = { "jack.properties" = { "node.latency" = "64/48000"; }; }; }; }; musnix = { enable = true; @@ -112,9 +110,9 @@ top @ { }; }; }); - wayland = moduleWithSystem (toplevel @ {...}: perSystem @ {...}: { + wayland = moduleWithSystem ({ ... }: { ... }: { hardware.graphics.enable = true; - security.pam.services.swaylock = {}; + security.pam.services.swaylock = { }; xdg.portal = { enable = true; xdgOpenUsePortal = true; @@ -130,18 +128,18 @@ top @ { config.common.default = "*"; }; }); - security = moduleWithSystem (toplevel @ {...}: perSystem @ {...}: { + security = moduleWithSystem ({ ... }: { ... }: { security = { sudo = { enable = false; execWheelOnly = true; - extraRules = [{groups = ["wheel"];}]; + extraRules = [{ groups = [ "wheel" ]; }]; }; doas = { enable = true; extraRules = [ { - groups = ["wheel"]; + groups = [ "wheel" ]; noPass = true; keepEnv = true; } @@ -154,12 +152,12 @@ top @ { intranet = { networking.wg-quick.interfaces = { wg0 = { - address = ["10.0.0.2/32"]; + address = [ "10.0.0.2/32" ]; privateKeyFile = "/etc/wireguard/privatekey"; peers = [ { publicKey = "5FiTLnzbgcbgQLlyVyYeESEd+2DtwM1JHCGz/32UcEU="; - allowedIPs = ["0.0.0.0/0" "::/0"]; + allowedIPs = [ "0.0.0.0/0" "::/0" ]; endpoint = "37.205.13.29:51820"; persistentKeepalive = 25; } @@ -218,54 +216,56 @@ top @ { }; }; }; - ivand = moduleWithSystem (toplevel @ {...}: perSystem @ {pkgs, ...}: let - homeMods = top.config.flake.homeManagerModules; - in { - imports = [inputs.home-manager.nixosModules.default]; - home-manager = { - backupFileExtension = "bak"; - useUserPackages = true; - useGlobalPkgs = true; - users.ivand = {...}: { - imports = with homeMods; [ - base - ivand - shell - util - swayland - web - ]; - }; - }; - fonts.packages = with pkgs; [(nerdfonts.override {fonts = ["FiraCode"];}) noto-fonts noto-fonts-emoji noto-fonts-lgc-plus]; - users = { - users = { - ivand = { - isNormalUser = true; - createHome = true; - extraGroups = [ - "adbusers" - "adm" - "audio" - "bluetooth" - "dialout" - "flatpak" - "kvm" - "mlocate" - "realtime" - "render" - "video" - "wheel" + ivand = moduleWithSystem ({ ... }: { pkgs, ... }: + let + homeMods = top.config.flake.homeManagerModules; + in + { + imports = [ inputs.home-manager.nixosModules.default ]; + home-manager = { + backupFileExtension = "bak"; + useUserPackages = true; + useGlobalPkgs = true; + users.ivand = { ... }: { + imports = with homeMods; [ + base + ivand + shell + util + swayland + web ]; }; }; - extraGroups = { - mlocate = {}; - realtime = {}; + fonts.packages = with pkgs; [ (nerdfonts.override { fonts = [ "FiraCode" ]; }) noto-fonts noto-fonts-emoji noto-fonts-lgc-plus ]; + users = { + users = { + ivand = { + isNormalUser = true; + createHome = true; + extraGroups = [ + "adbusers" + "adm" + "audio" + "bluetooth" + "dialout" + "flatpak" + "kvm" + "mlocate" + "realtime" + "render" + "video" + "wheel" + ]; + }; + }; + extraGroups = { + mlocate = { }; + realtime = { }; + }; }; - }; - programs.dconf.enable = true; - }); + programs.dconf.enable = true; + }); flatpak = { xdg = { portal = { @@ -276,17 +276,17 @@ top @ { }; services.flatpak.enable = true; }; - ai = moduleWithSystem (toplevel @ {...}: perSystem @ {...}: { - services = {ollama.enable = true;}; + ai = moduleWithSystem ({ ... }: { ... }: { + services = { ollama.enable = true; }; }); - anon = moduleWithSystem (toplevel @ {...}: perSystem @ {pkgs, ...}: { - environment.systemPackages = with pkgs; [tor-browser]; + anon = moduleWithSystem ({ ... }: { pkgs, ... }: { + environment.systemPackages = with pkgs; [ tor-browser ]; }); - cryptocurrency = moduleWithSystem (toplevel @ {...}: perSystem @ {pkgs, ...}: { - environment.systemPackages = with pkgs; [monero-cli]; - services = {monero.enable = true;}; + cryptocurrency = moduleWithSystem ({ ... }: { pkgs, ... }: { + environment.systemPackages = with pkgs; [ monero-cli ]; + services = { monero.enable = true; }; }); - monero-miner = moduleWithSystem (toplevel @ {...}: perSystem @ {...}: { + monero-miner = moduleWithSystem ({ ... }: { ... }: { services = { xmrig = { enable = true; @@ -307,16 +307,15 @@ top @ { }; }; }); - vps = moduleWithSystem (toplevel @ {...}: perSystem @ {...}: { + vps = moduleWithSystem ({ ... }: { ... }: { imports = [ inputs.vpsadminos.nixosConfigurations.container ]; }); - mailserver = moduleWithSystem (toplevel @ {...}: perSystem @ { - config, - pkgs, - ... - }: { + mailserver = moduleWithSystem ({ ... }: { config + , pkgs + , ... + }: { imports = [ inputs.simple-nixos-mailserver.nixosModule ]; @@ -324,11 +323,11 @@ top @ { enable = true; localDnsResolver = false; fqdn = "mail.idimitrov.dev"; - domains = ["idimitrov.dev" "mail.idimitrov.dev"]; + domains = [ "idimitrov.dev" "mail.idimitrov.dev" ]; loginAccounts = { "ivan@idimitrov.dev" = { hashedPassword = "$2b$05$rTVIQD98ogXeCBKdk/YufulWHqpMCAlb7SHDPlh5y8Xbukoa/uQLm"; - aliases = ["admin@idimitrov.dev"]; + aliases = [ "admin@idimitrov.dev" ]; }; "security@idimitrov.dev" = { hashedPassword = "$2b$05$rTVIQD98ogXeCBKdk/YufulWHqpMCAlb7SHDPlh5y8Xbukoa/uQLm"; @@ -338,10 +337,10 @@ top @ { hierarchySeparator = "/"; }; services = { - dovecot2.sieve.extensions = ["fileinto"]; + dovecot2.sieve.extensions = [ "fileinto" ]; roundcube = { enable = true; - package = pkgs.roundcube.withPlugins (plugins: [plugins.persistent_login]); + package = pkgs.roundcube.withPlugins (plugins: [ plugins.persistent_login ]); plugins = [ "persistent_login" ]; @@ -352,18 +351,20 @@ top @ { $config['smtp_pass'] = "%p"; ''; }; - nginx.virtualHosts = let - restrictToVpn = '' - allow 10.0.0.2/32; - allow 10.0.0.3/32; - allow 10.0.0.4/32; - deny all; - ''; - in { - "${config.mailserver.fqdn}" = { - extraConfig = restrictToVpn; + nginx.virtualHosts = + let + restrictToVpn = '' + allow 10.0.0.2/32; + allow 10.0.0.3/32; + allow 10.0.0.4/32; + deny all; + ''; + in + { + "${config.mailserver.fqdn}" = { + extraConfig = restrictToVpn; + }; }; - }; postgresql.enable = true; }; security = { @@ -373,63 +374,65 @@ top @ { }; }; }); - nginx = moduleWithSystem (toplevel @ {...}: perSystem @ {pkgs, ...}: { + nginx = moduleWithSystem ({ ... }: { pkgs, ... }: { services = { - nginx = let - webshiteConfig = '' - add_header 'Referrer-Policy' 'origin-when-cross-origin'; - add_header X-Content-Type-Options nosniff; - ''; - extensions = ["html" "txt" "png" "jpg" "jpeg"]; - serveStatic = exts: '' - try_files $uri $uri/ ${pkgs.lib.strings.concatStringsSep " " (builtins.map (x: "$uri." + "${x}") exts)} =404; - ''; - in { - enable = true; - recommendedGzipSettings = true; - recommendedOptimisation = true; - recommendedProxySettings = true; - recommendedTlsSettings = true; - sslCiphers = "AES256+EECDH:AES256+EDH:!aNULL"; - virtualHosts = { - "idimitrov.dev" = { - enableACME = true; - forceSSL = true; - locations."/" = { - root = "${pkgs.webshite}"; - extraConfig = serveStatic extensions; + nginx = + let + webshiteConfig = '' + add_header 'Referrer-Policy' 'origin-when-cross-origin'; + add_header X-Content-Type-Options nosniff; + ''; + extensions = [ "html" "txt" "png" "jpg" "jpeg" ]; + serveStatic = exts: '' + try_files $uri $uri/ ${pkgs.lib.strings.concatStringsSep " " (builtins.map (x: "$uri." + "${x}") exts)} =404; + ''; + in + { + enable = true; + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedProxySettings = true; + recommendedTlsSettings = true; + sslCiphers = "AES256+EECDH:AES256+EDH:!aNULL"; + virtualHosts = { + "idimitrov.dev" = { + enableACME = true; + forceSSL = true; + locations."/" = { + root = "${pkgs.webshite}"; + extraConfig = serveStatic extensions; + }; + extraConfig = webshiteConfig; }; - extraConfig = webshiteConfig; - }; - "www.idimitrov.dev" = { - enableACME = true; - forceSSL = true; - locations."/" = { - root = "${pkgs.webshite}"; - extraConfig = serveStatic extensions; + "www.idimitrov.dev" = { + enableACME = true; + forceSSL = true; + locations."/" = { + root = "${pkgs.webshite}"; + extraConfig = serveStatic extensions; + }; + extraConfig = webshiteConfig; }; - extraConfig = webshiteConfig; - }; - "src.idimitrov.dev" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://127.0.0.1:3001"; + "src.idimitrov.dev" = { + enableACME = true; + forceSSL = true; + locations."/" = { + proxyPass = "http://127.0.0.1:3001"; + }; }; - }; - "pic.idimitrov.dev" = { - enableACME = true; - forceSSL = true; - locations."/" = { - root = "/var/pic"; - extraConfig = '' - autoindex on; - ${serveStatic ["png"]} - ''; + "pic.idimitrov.dev" = { + enableACME = true; + forceSSL = true; + locations."/" = { + root = "/var/pic"; + extraConfig = '' + autoindex on; + ${serveStatic ["png"]} + ''; + }; }; }; }; - }; gitea = { enable = true; appName = "src"; @@ -465,55 +468,57 @@ top @ { }; }; }); - wireguard-output = moduleWithSystem (toplevel @ {...}: perSystem @ {pkgs, ...}: { + wireguard-output = moduleWithSystem ({ ... }: { pkgs, ... }: { networking = { nat = { enable = true; enableIPv6 = true; externalInterface = "venet0"; - internalInterfaces = ["wg0"]; + internalInterfaces = [ "wg0" ]; }; wg-quick.interfaces = { - wg0 = let - iptables = "${pkgs.iptables}/bin/iptables"; - ip6tables = "${pkgs.iptables}/bin/ip6tables"; - in { - address = ["10.0.0.1/32"]; - listenPort = 51820; - privateKeyFile = "/etc/wireguard/privatekey"; - postUp = '' - ${iptables} -A FORWARD -i wg0 -j ACCEPT - ${iptables} -t nat -A POSTROUTING -s 10.0.0.1/24 -o venet0 -j MASQUERADE - ${ip6tables} -A FORWARD -i wg0 -j ACCEPT - ${ip6tables} -t nat -A POSTROUTING -s fdc9:281f:04d7:9ee9::1/64 -o venet0 -j MASQUERADE - ''; - preDown = '' - ${iptables} -D FORWARD -i wg0 -j ACCEPT - ${iptables} -t nat -D POSTROUTING -s 10.0.0.1/24 -o venet0 -j MASQUERADE - ${ip6tables} -D FORWARD -i wg0 -j ACCEPT - ${ip6tables} -t nat -D POSTROUTING -s fdc9:281f:04d7:9ee9::1/64 -o venet0 -j MASQUERADE - ''; - peers = [ - { - publicKey = "kI93V0dVKSqX8hxMJHK5C0c1hEDPQTgPQDU8TKocVgo="; - allowedIPs = ["10.0.0.2/32"]; - } - { - publicKey = "RqTsFxFCcgYsytcDr+jfEoOA5UNxa1ZzGlpx6iuTpXY="; - allowedIPs = ["10.0.0.3/32"]; - } - { - publicKey = "1e0mjluqXdLbzv681HlC9B8BfGN8sIXIw3huLyQqwXI="; - allowedIPs = ["10.0.0.4/32"]; - } - ]; - }; + wg0 = + let + iptables = "${pkgs.iptables}/bin/iptables"; + ip6tables = "${pkgs.iptables}/bin/ip6tables"; + in + { + address = [ "10.0.0.1/32" ]; + listenPort = 51820; + privateKeyFile = "/etc/wireguard/privatekey"; + postUp = '' + ${iptables} -A FORWARD -i wg0 -j ACCEPT + ${iptables} -t nat -A POSTROUTING -s 10.0.0.1/24 -o venet0 -j MASQUERADE + ${ip6tables} -A FORWARD -i wg0 -j ACCEPT + ${ip6tables} -t nat -A POSTROUTING -s fdc9:281f:04d7:9ee9::1/64 -o venet0 -j MASQUERADE + ''; + preDown = '' + ${iptables} -D FORWARD -i wg0 -j ACCEPT + ${iptables} -t nat -D POSTROUTING -s 10.0.0.1/24 -o venet0 -j MASQUERADE + ${ip6tables} -D FORWARD -i wg0 -j ACCEPT + ${ip6tables} -t nat -D POSTROUTING -s fdc9:281f:04d7:9ee9::1/64 -o venet0 -j MASQUERADE + ''; + peers = [ + { + publicKey = "kI93V0dVKSqX8hxMJHK5C0c1hEDPQTgPQDU8TKocVgo="; + allowedIPs = [ "10.0.0.2/32" ]; + } + { + publicKey = "RqTsFxFCcgYsytcDr+jfEoOA5UNxa1ZzGlpx6iuTpXY="; + allowedIPs = [ "10.0.0.3/32" ]; + } + { + publicKey = "1e0mjluqXdLbzv681HlC9B8BfGN8sIXIw3huLyQqwXI="; + allowedIPs = [ "10.0.0.4/32" ]; + } + ]; + }; }; }; }); - anonymous-dns = moduleWithSystem (toplevel @ {...}: perSystem @ {...}: { + anonymous-dns = moduleWithSystem ({ ... }: { ... }: { networking = { - nameservers = ["127.0.0.1" "::1"]; + nameservers = [ "127.0.0.1" "::1" ]; dhcpcd.extraConfig = "nohook resolv.conf"; }; services = { @@ -533,7 +538,7 @@ top @ { routes = [ { server_name = "*"; - via = ["sdns://gQ8yMTcuMTM4LjIyMC4yNDM"]; + via = [ "sdns://gQ8yMTcuMTM4LjIyMC4yNDM" ]; } ]; }; @@ -549,7 +554,7 @@ top @ { }; }; }); - firewall = moduleWithSystem (toplevel @ {...}: perSystem @ {lib, ...}: { + firewall = moduleWithSystem ({ ... }: { lib, ... }: { networking = { firewall = lib.mkForce { enable = true; @@ -582,24 +587,24 @@ top @ { }; }; }); - rest = moduleWithSystem (toplevel @ {...}: perSystem @ {pkgs, ...}: { + rest = moduleWithSystem ({ ... }: { pkgs, ... }: { fileSystems."/mnt/export1981" = { device = "172.16.128.47:/nas/5490"; fsType = "nfs"; - options = ["nofail"]; + options = [ "nofail" ]; }; users = { users.ivand = { isNormalUser = true; hashedPassword = "$2b$05$hPrPcewxj4qjLCRQpKBAu.FKvKZdIVlnyn4uYsWE8lc21Jhvc9jWG"; - extraGroups = ["wheel" "adm" "mlocate"]; + extraGroups = [ "wheel" "adm" "mlocate" ]; openssh.authorizedKeys.keys = [ '' ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICcLkzuCoBEg+wq/H+hkrv6pLJ8J5BejaNJVNnymlnlo ivan@idimitrov.dev '' ]; }; - extraGroups = {mlocate = {};}; + extraGroups = { mlocate = { }; }; }; services = { openssh = { @@ -612,7 +617,7 @@ top @ { systemd = { timers = { bingwp = { - wantedBy = ["timers.target"]; + wantedBy = [ "timers.target" ]; timerConfig = { OnCalendar = "*-*-* 10:00:00"; Persistent = true; diff --git a/overlays/default.nix b/overlays/default.nix index a036c3f..7ab5087 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -1,13 +1,10 @@ -top @ { - inputs, - withSystem, - ... -}: { - flake.overlays.default = final: prev: let - system = "x86_64-linux"; - in +{ inputs, withSystem, ... }: { + flake.overlays.default = _final: _prev: + let + system = "x86_64-linux"; + in withSystem system ( - {config, ...}: { + { config, ... }: { nvim = config.packages.nvim; bingwp = config.packages.bingwp; screenshot = config.packages.screenshot; diff --git a/packages/default.nix b/packages/default.nix index 27ae691..f324927 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -1,71 +1,68 @@ -top @ {inputs, ...}: { - perSystem = perSystem @ { - system, - pkgs, - ... - }: { - config.packages = { - nvim = inputs.ide.nvim.${system}.standalone.default { - plugins.lsp.servers = { - bashls.enable = true; - pylsp.enable = true; - lua-ls.enable = true; +{ inputs, ... }: { + perSystem = + { system, pkgs, ... }: { + config.packages = { + nvim = inputs.ide.nvim.${system}.standalone.default { + plugins.lsp.servers = { + bashls.enable = true; + pylsp.enable = true; + lua-ls.enable = true; + }; + extraPlugins = with pkgs.vimPlugins; [ vim-just ]; }; - extraPlugins = with pkgs.vimPlugins; [vim-just]; - }; - wpd = pkgs.writeShellApplication { - name = "wpd"; - runtimeInputs = with pkgs; [swaybg xdg-user-dirs fd uutils-coreutils-noprefix]; - runtimeEnv = {WAYLAND_DISPLAY = "wayland-1";}; - text = '' - random_pic () { - bg_dir="$(xdg-user-dir PICTURES)/bg" - fd . --extension png "$bg_dir" | shuf -n1 - } - swaybg -i "$(random_pic)" -m fill & - OLD_PID=$! - while true; do - sleep 60 - swaybg -i "$(random_pic)" -m fill & - NEXT_PID=$! - sleep 5 - kill -9 $OLD_PID - OLD_PID=$NEXT_PID - done - ''; - }; - screenshot = pkgs.writeShellApplication { - name = "screenshot"; - runtimeInputs = with pkgs; [wl-clipboard xdg-utils]; - text = '' - ss_dir="$(xdg-user-dir PICTURES)/ss" - pic_dir="$ss_dir/$(date "+%Y-%m-%d_%H-%M-%S").png" - - mkdir -p "$ss_dir" - - copy_image () { - wl-copy < "$pic_dir" - } - - main () { - grim "$pic_dir" - copy_image - } - - main - ''; - }; - cursors = pkgs.catppuccin-cursors.overrideAttrs (prev: rec { - version = "0.3.1"; - nativeBuildInputs = prev.nativeBuildInputs ++ [pkgs.xcur2png]; - src = pkgs.fetchFromGitHub { - owner = "catppuccin"; - repo = "cursors"; - rev = "v${version}"; - hash = "sha256-CuzD6O/RImFKLWzJoiUv7nlIdoXNvwwl+k5mTeVIY10="; + wpd = pkgs.writeShellApplication { + name = "wpd"; + runtimeInputs = with pkgs; [ swaybg xdg-user-dirs fd uutils-coreutils-noprefix ]; + runtimeEnv = { WAYLAND_DISPLAY = "wayland-1"; }; + text = '' + random_pic () { + bg_dir="$(xdg-user-dir PICTURES)/bg" + fd . --extension png "$bg_dir" | shuf -n1 + } + swaybg -i "$(random_pic)" -m fill & + OLD_PID=$! + while true; do + sleep 60 + swaybg -i "$(random_pic)" -m fill & + NEXT_PID=$! + sleep 5 + kill -9 $OLD_PID + OLD_PID=$NEXT_PID + done + ''; }; - }); - webshite = inputs.webshite.packages.${system}.default; + screenshot = pkgs.writeShellApplication { + name = "screenshot"; + runtimeInputs = with pkgs; [ wl-clipboard xdg-utils ]; + text = '' + ss_dir="$(xdg-user-dir PICTURES)/ss" + pic_dir="$ss_dir/$(date "+%Y-%m-%d_%H-%M-%S").png" + + mkdir -p "$ss_dir" + + copy_image () { + wl-copy < "$pic_dir" + } + + main () { + grim "$pic_dir" + copy_image + } + + main + ''; + }; + cursors = pkgs.catppuccin-cursors.overrideAttrs (prev: rec { + version = "0.3.1"; + nativeBuildInputs = prev.nativeBuildInputs ++ [ pkgs.xcur2png ]; + src = pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "cursors"; + rev = "v${version}"; + hash = "sha256-CuzD6O/RImFKLWzJoiUv7nlIdoXNvwwl+k5mTeVIY10="; + }; + }); + webshite = inputs.webshite.packages.${system}.default; + }; }; - }; }