From eb95abfc230dc239122f1e89e90cd9a998491a2f Mon Sep 17 00:00:00 2001 From: adikro Date: Tue, 3 Feb 2026 22:58:50 +0100 Subject: ... --- flake.lock | 96 ++++++------- flake.nix | 78 +++++------ hm/editors/nixvim.nix | 255 ++++++++++++++++++++++++----------- hm/env/niri/binds.nix | 281 ++++++++++++++++++++------------------- hm/env/niri/niri.nix | 32 ++--- hm/env/screenshot.nix | 12 +- hm/env/waybar.nix | 14 +- hm/shell/cli.nix | 46 ++++++- hm/soft/browser.nix | 114 +--------------- hm/soft/media.nix | 15 +-- hm/soft/nixcord.nix | 12 +- hosts/desktop/configuration.nix | 23 ++-- hosts/desktop/home.nix | 18 ++- hosts/laptop/configuration.nix | 20 ++- hosts/oci/configuration.nix | 95 ------------- hosts/oci/disko.nix | 104 --------------- hosts/oci/home.nix | 73 ---------- hosts/thinkpad/configuration.nix | 22 ++- hosts/thinkpad/disko.nix | 31 ++--- hosts/vm/configuration.nix | 95 ------------- hosts/vm/disko.nix | 104 --------------- hosts/vm/home.nix | 73 ---------- os/core/audio.nix | 39 ++++-- os/core/bootloader.nix | 91 +++++++++---- os/core/drivers.nix | 81 ++++++----- os/core/power.nix | 56 ++++++-- os/srv/kdeconnect.nix | 8 +- 27 files changed, 767 insertions(+), 1121 deletions(-) delete mode 100644 hosts/oci/configuration.nix delete mode 100644 hosts/oci/disko.nix delete mode 100644 hosts/oci/home.nix delete mode 100644 hosts/vm/configuration.nix delete mode 100644 hosts/vm/disko.nix delete mode 100644 hosts/vm/home.nix diff --git a/flake.lock b/flake.lock index f2200e2..1f8dd44 100644 --- a/flake.lock +++ b/flake.lock @@ -59,11 +59,11 @@ ] }, "locked": { - "lastModified": 1768135262, - "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "type": "github" }, "original": { @@ -157,11 +157,11 @@ ] }, "locked": { - "lastModified": 1769622371, - "narHash": "sha256-Cs1/+P3ntxl9mOIL7/QtItBAzQJ2xjvTMHv7qw0nFV0=", + "lastModified": 1769978395, + "narHash": "sha256-gj1yP3spUb1vGtaF5qPhshd2j0cg4xf51pklDsIm19Q=", "owner": "nix-community", "repo": "home-manager", - "rev": "02d763228d8aff317e6e5a319474b6d4d9d826a5", + "rev": "984708c34d3495a518e6ab6b8633469bbca2f77a", "type": "github" }, "original": { @@ -196,11 +196,11 @@ ] }, "locked": { - "lastModified": 1769558677, - "narHash": "sha256-Fm3HxKGYbZXI2vktMAU7ODLMzkq6X9x20cd8A9wb4cY=", + "lastModified": 1770128147, + "narHash": "sha256-R132VbY2fTbTBk96e7XX2Mis8jKhkpdDq8xHt5lUGTw=", "owner": "nix-community", "repo": "neovim-nightly-overlay", - "rev": "895a9a1b269f662da852832bde52863882c7a253", + "rev": "7c11c6be010c28eef42f564c383741f4a2678491", "type": "github" }, "original": { @@ -212,11 +212,11 @@ "neovim-src": { "flake": false, "locked": { - "lastModified": 1769556336, - "narHash": "sha256-Ex7TnHo8DQLGpLB9OdrCMaqsHIlnSYNUx1cJOR+HfO8=", + "lastModified": 1770059021, + "narHash": "sha256-VgKBxczgdh+MHdKCpaC4MjZgco9CDYfLdyADKFn6IHE=", "owner": "neovim", "repo": "neovim", - "rev": "027b7d6bbb4f164b95f1588b250a02020d85b029", + "rev": "19eb75831b931b7cbe6a95323f941f2836592f02", "type": "github" }, "original": { @@ -237,11 +237,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1769582851, - "narHash": "sha256-T2a9J3iZ+p+dSmrd8mGgehvXrzwnFlMF22BmBqYHkVg=", + "lastModified": 1770133761, + "narHash": "sha256-3/2F3IfdyEz9ot0NytsVymt5Ma54EBBWcAc3CJKQFPE=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "8942525e9d5c79f6b47cffef4992454c9b3f9b69", + "rev": "c44eff590edaff58ef9e34ecf38f6fbccb1be647", "type": "github" }, "original": { @@ -270,11 +270,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1769577126, - "narHash": "sha256-v9vz9Rj4MGwPuhGELdvpRKl2HH+xvkgat6VwL0L86Fg=", + "lastModified": 1770092965, + "narHash": "sha256-++K1ftjwPqMJzIO8t2GsdkYQzC2LLA5A1w21Uo+SLz4=", "owner": "YaLTeR", "repo": "niri", - "rev": "f30db163b5748e8cf95c05aba77d0d3736f40543", + "rev": "189917c93329c86ac2ddd89f459c26a028d590ba", "type": "github" }, "original": { @@ -292,11 +292,11 @@ ] }, "locked": { - "lastModified": 1769588191, - "narHash": "sha256-h+OoQvvlx2q0XOxIa1j7YmkcGeUVDK0feh/p7txpmCk=", + "lastModified": 1770079495, + "narHash": "sha256-QQIkfywgOnkfaMLT/rjxaS9XSPNvTRwOHN1o3+lJHHE=", "owner": "KaylorBen", "repo": "nixcord", - "rev": "924198119c361aa8d5817188bd06c659ab99339c", + "rev": "ffe541f2ec948f55fd16a069040d505b810a814f", "type": "github" }, "original": { @@ -307,11 +307,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1769461804, - "narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=", + "lastModified": 1770115704, + "narHash": "sha256-KHFT9UWOF2yRPlAnSXQJh6uVcgNcWlFqqiAZ7OVlHNc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d", + "rev": "e6eae2ee2110f3d31110d5c222cd395303343b08", "type": "github" }, "original": { @@ -338,11 +338,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1769318308, - "narHash": "sha256-Mjx6p96Pkefks3+aA+72lu1xVehb6mv2yTUUqmSet6Q=", + "lastModified": 1770056022, + "narHash": "sha256-yvCz+Qmci1bVucXEyac3TdoSPMtjqVJmVy5wro6j/70=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1cd347bf3355fce6c64ab37d3967b4a2cb4b878c", + "rev": "d04d8548aed39902419f14a8537006426dc1e4fa", "type": "github" }, "original": { @@ -377,11 +377,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1769537308, - "narHash": "sha256-N7famD4s2hiDIicr9mJWhUj8l9EULB60+1QN/S+UjeM=", + "lastModified": 1770025103, + "narHash": "sha256-Qlb19PP0n6s+v1MywVjROV5XwsCvA58XXiXHk0Govb4=", "owner": "nix-community", "repo": "nixvim", - "rev": "7addac6d111837217c16762968a9042eac703f7e", + "rev": "31c3b3687dc85e3fbbf5c44728a5ee231608f8a9", "type": "github" }, "original": { @@ -398,11 +398,11 @@ ] }, "locked": { - "lastModified": 1769626081, - "narHash": "sha256-K4PUhR4EFstOGd1546IQlpcLe4F6dn0cd9z1z4f1zwI=", + "lastModified": 1770143912, + "narHash": "sha256-x+YAcvgybyeHMZcjNjKyHG8WBTNetusVO/PCEipPrA4=", "owner": "nix-community", "repo": "NUR", - "rev": "4b19fec1bd8d743b0ca3bea3016aa84ca4115dae", + "rev": "5a34f005effc58a448900b9e16b9dd15373e85eb", "type": "github" }, "original": { @@ -475,11 +475,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1768801657, - "narHash": "sha256-/9a6lwyYkGAEi9MMqQAncHxu2Xsu1wluhQJItHZrDhk=", + "lastModified": 1770046271, + "narHash": "sha256-OE/d7E4g7BfPpL0PMG8B5AuGLA8/IPItG/h7+YZyBoU=", "owner": "gabm", "repo": "Satty", - "rev": "755cfae367852378c382cbb5bc76eed424eb1c95", + "rev": "69305902cb5cfc55bc7d3e2de36ab2df26440bad", "type": "github" }, "original": { @@ -496,11 +496,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1769316930, - "narHash": "sha256-4EOGHYLpIscwr+6drHE28Qj7NDjjowp2Vd8QkXjdBBE=", + "lastModified": 1769986820, + "narHash": "sha256-O9OQ44dk9TJdtRIG828DUI54XdkfZET7AlN1RgTsPis=", "owner": "Gerg-L", "repo": "spicetify-nix", - "rev": "b2ce438f386943ef611e196a178af2d79042903b", + "rev": "68de6434cfaa8983f3775b858b8b76e7c5dbd29c", "type": "github" }, "original": { @@ -562,11 +562,11 @@ ] }, "locked": { - "lastModified": 1769374781, - "narHash": "sha256-ZJ3reEJ8TQaNEfPiEl1uLlktTTogpsQ1DyQhjfOCQTA=", + "lastModified": 1770141194, + "narHash": "sha256-cgtKNt9t+LlaCKwkVtcVpNeJR8v0jcUDdSzbfmgW5S0=", "owner": "Alexays", "repo": "Waybar", - "rev": "2f9443501403a11e5d7e28ab05801debabefa2a8", + "rev": "0d27c093b1b07bbde86fe83a29b2b1d380ac54bd", "type": "github" }, "original": { @@ -595,11 +595,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1769356222, - "narHash": "sha256-Q0BVubV9ZnmLs506EhBSPglM+YJK56wsQNbeecvWPUo=", + "lastModified": 1770083504, + "narHash": "sha256-1CB57EPNjZOAjMeFzkG5wbzjuLuKT317alEK6JUf9sc=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "cf14278b92b0a91d01587f09b4b00ea655ae24e6", + "rev": "75c9f5e77573b36b8d341c28c0d32e9c9a0a2309", "type": "github" }, "original": { @@ -617,11 +617,11 @@ "rust-overlay": "rust-overlay_2" }, "locked": { - "lastModified": 1769620102, - "narHash": "sha256-dCwy6fTkSV22Und5+Jny5fMW6WlJEsH/hF6ucyNztbc=", + "lastModified": 1769971982, + "narHash": "sha256-dc8lG9CxtrIk+tOsQx8TJKULQBG27Hoio4O4M/6CxFM=", "owner": "sxyazi", "repo": "yazi", - "rev": "cfd9a22125caf1df72bc34e185157a76bfaf43e5", + "rev": "6757fed5aa82bfdcd5ecd52e8f374dc286220cc0", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 80c33a8..ee9cc2f 100644 --- a/flake.nix +++ b/flake.nix @@ -63,45 +63,47 @@ }; }; - outputs = - { self, nixpkgs, ... }@inputs: - let - mkHost = - { - hostname, - path, - user ? "adam", - }: - nixpkgs.lib.nixosSystem { - specialArgs = { - inherit inputs; - username = user; - }; - modules = [ - path - { networking.hostName = hostname; } - ]; - }; - in - { - nixosConfigurations = { - szpont = mkHost { - hostname = "szpont"; - path = ./hosts/desktop/configuration.nix; - }; - laptop = mkHost { - hostname = "laptop"; - path = ./hosts/laptop/configuration.nix; - }; - thinkpad = mkHost { - hostname = "thinkpad"; - path = ./hosts/thinkpad/configuration.nix; - }; - pendrive = mkHost { - hostname = "pendrive"; - path = ./hosts/pendrive/configuration.nix; - user = "user"; + outputs = { + self, + nixpkgs, + nur, + ... + } @ inputs: let + mkHost = { + hostname, + path, + user ? "adam", + }: + nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs; + username = user; }; + modules = [ + path + {networking.hostName = hostname;} + {nixpkgs.overlays = [nur.overlays.default];} + ]; + }; + in { + nixosConfigurations = { + szpont = mkHost { + hostname = "szpont"; + path = ./hosts/desktop/configuration.nix; + }; + laptop = mkHost { + hostname = "laptop"; + path = ./hosts/laptop/configuration.nix; + }; + thinkpad = mkHost { + hostname = "thinkpad"; + path = ./hosts/thinkpad/configuration.nix; + }; + pendrive = mkHost { + hostname = "pendrive"; + path = ./hosts/pendrive/configuration.nix; + user = "user"; }; }; + }; } diff --git a/hm/editors/nixvim.nix b/hm/editors/nixvim.nix index 51fdf95..e46f6e2 100644 --- a/hm/editors/nixvim.nix +++ b/hm/editors/nixvim.nix @@ -1,4 +1,10 @@ -{ inputs, config, lib, pkgs, ... }: +{ + inputs, + config, + lib, + pkgs, + ... +}: let cfg = config.hm.editors.nixvim; in @@ -6,8 +12,10 @@ in imports = [ inputs.nixvim.homeModules.nixvim ]; options.hm.editors.nixvim.enable = lib.mkEnableOption "enables nixvim config framework"; + config = lib.mkIf cfg.enable { programs.nixvim = { + diagnostics.virtual_text = false; enable = true; package = inputs.neovim-nightly-overlay.packages.${pkgs.stdenv.hostPlatform.system}.default; @@ -19,19 +27,80 @@ in globals.mapleader = " "; + clipboard = { + providers.wl-copy.enable = true; + register = "unnamedplus"; + }; + + opts = { + number = true; + relativenumber = true; + termguicolors = true; + ignorecase = true; + smartcase = true; + expandtab = true; + shiftwidth = 2; + encoding = "utf-8"; + fileencoding = "utf-8"; + undofile = true; + swapfile = true; + backup = false; + autoread = true; + cursorline = true; + ruler = true; + gdefault = true; + scrolloff = 5; + }; + keymaps = [ { - # mode = [ "n" "i" "v" ]; + mode = [ "" ]; key = ""; action = ""; options.silent = true; } + { + mode = "n"; + key = "gs"; + action = "Neogit"; + options.desc = "Neogit Status"; + } { mode = "n"; key = "ff"; action = "Telescope find_files"; options.desc = "Find Files"; } + { + mode = "n"; + key = "gd"; + action = "lua vim.lsp.buf.definition()"; + options.desc = "Go to Definition"; + } + { + mode = "n"; + key = "K"; + action = "lua vim.lsp.buf.hover()"; + options.desc = "Hover Docs"; + } + { + mode = "n"; + key = "ca"; + action = "lua vim.lsp.buf.code_action()"; + options.desc = "Code Actions"; + } + { + mode = "n"; + key = "rn"; + action = "lua vim.lsp.buf.rename()"; + options.desc = "Rename Symbol"; + } + { + mode = "n"; + key = "fs"; + action = "Telescope lsp_document_symbols"; + options.desc = "Find Symbols (Functions/Variables)"; + } { mode = "n"; key = "fg"; @@ -62,14 +131,60 @@ in action = "Trouble diagnostics toggle"; options.desc = "Toggle Trouble (Diagnostics)"; } + { + mode = "n"; + key = "p"; + action = "Telescope yank_history"; + options.desc = "Open Yank History"; + } ]; - plugins = { - lualine = { - enable = true; - settings.options.theme = "gruvbox-material"; - }; - multicursors.enable = true; + plugins = { + overseer.enable = true; + neotest.enable = true; + + tiny-inline-diagnostic = { + enable = true; + settings = { + preset = "minimal"; + show_all_diags_on_cursorline = true; + options = { + multilines = { + enabled = true; + always_show = true; + }; + }; + }; + }; + comment.enable = true; + flash = { + enable = true; + settings = { + search.enabled = true; + jump.autojump = true; + }; + }; + notify = { + enable = true; + settings.topDown = false; + }; + yanky = { + enable = true; + settings.ring.history_length = 100; + settings.system_clipboard.sync_with_ring = true; + }; + lualine = { + enable = true; + settings = { + options.theme = "gruvbox-material"; + sections = { + lualine_b = [ "diagnostics" ]; + lualine_c = [ "filename" ]; + lualine_x = [ "filetype" ]; + }; + }; + }; + treesitter-context = { enable = true; settings = { @@ -77,87 +192,75 @@ in trim_scope = "outer"; }; }; - oil.enable = true; - persistence.enable = true; - nvim-autopairs.enable = true; - neoscroll.enable = true; - bufferline.enable = true; - web-devicons.enable = true; + oil.enable = true; + nvim-autopairs.enable = true; + neoscroll.enable = true; + bufferline.enable = true; + web-devicons.enable = true; + lsp-kind.enable = true; - blink-cmp.enable = true; - gitsigns.enable = true; - which-key.enable = true; - harpoon = { - enable = true; - enableTelescope = true; - }; - toggleterm.enable = true; - treesitter = { - enable = true; - }; - telescope = { - enable = true; - extensions = { - fzf-native = { - enable = true; - }; + blink-cmp = { + enable = true; + settings = { + keymap = { + preset = "default"; + "" = [ + "show" + "show_documentation" + "hide" + ]; + "" = [ + "accept" + "fallback" + ]; + "" = [ + "select_next" + "fallback" + ]; + "" = [ + "select_prev" + "fallback" + ]; }; }; + }; + gitsigns.enable = true; + which-key.enable = true; + harpoon = { + enable = true; + enableTelescope = true; + }; + toggleterm.enable = true; + treesitter.enable = true; + telescope = { + enable = true; + extensions.fzf-native.enable = true; + }; noice.enable = true; dressing.enable = true; - trouble.enable = true; + conform-nvim = { enable = true; - settings.format_on_save = { - lsp_fallback = true; - timeout_ms = 500; + settings = { + formatters_by_ft = { + nix = [ "alejandra" ]; + }; + format_on_save = { + lsp_fallback = true; + timeout_ms = 500; + }; }; }; - # notify = { - # enable = true; - # settings = { - # backgroundColour = "#1e1e2e"; - # fps = 60; - # render = "default"; - # timeout = 500; - # topDown = true; - # }; - # }; - - nix.enable = true; - lsp = { - enable = true; - servers = { + lsp = { + enable = true; + servers = { + zls.enable = true; + zls.package = pkgs.zls; nil_ls.enable = true; clangd.enable = true; - }; - }; - }; - - opts = { - number = true; - relativenumber = true; - termguicolors = true; - # mouse = "a"; - ignorecase = true; - smartcase = true; - expandtab = true; - shiftwidth = 2; - encoding = "utf-8"; - fileencoding = "utf-8"; - undofile = true; - swapfile = true; - backup = false; - autoread = true; - cursorline = true; - ruler = true; - gdefault = true; - scrolloff = 5; - clipboard = { - providers.wl-copy.enable = true; - register = "unnamedplus"; + }; }; }; }; diff --git a/hm/env/niri/binds.nix b/hm/env/niri/binds.nix index 4cf92e0..fd46c17 100644 --- a/hm/env/niri/binds.nix +++ b/hm/env/niri/binds.nix @@ -4,147 +4,156 @@ pkgs, ... }: -with config.lib.niri.actions; -let +with config.lib.niri.actions; let playerctl = spawn "${pkgs.playerctl}/bin/playerctl"; ss = "${toString config.hm.conf.xdg-dirs.mediaPath}/pics/ss/$(date +%Y-%m-%d_%H-%M-%S)"; in -{ - "Mod+O" = { - action = toggle-overview; - repeat = false; - }; - "Mod+Slash".action = show-hotkey-overlay; - - XF86AudioRaiseVolume.action = playerctl "volume" "0.03+"; - XF86AudioLowerVolume.action = playerctl "volume" "0.03-"; - XF86AudioMute.action = spawn "sh" "-c" '' - wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && \ - wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle - ''; - # XF86Tools.action = spawn "sh" "-c" '' - # wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && \ - # wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle - # ''; - "XF86Tools" = { - action = spawn "sh" "-c" '' - pkill -9 firefox || true - swaylock -f - wpctl set-mute @DEFAULT_AUDIO_SINK@ 1 - wpctl set-mute @DEFAULT_AUDIO_SOURCE@ 1 - niri msg action power-off-monitors + { + "Mod+O" = { + action = toggle-overview; + repeat = false; + }; + "Mod+Slash".action = show-hotkey-overlay; + + XF86AudioRaiseVolume.action = playerctl "volume" "0.03+"; + XF86AudioLowerVolume.action = playerctl "volume" "0.03-"; + XF86AudioMute.action = spawn "sh" "-c" '' + wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && \ + wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle ''; - repeat = false; - }; - - "Mod+WheelScrollDown".action = focus-column-right; - "Mod+WheelScrollUp".action = focus-column-left; - "Mod+Shift+WheelScrollDown".action = move-column-right; - "Mod+Shift+WheelScrollUp".action = move-column-left; - - "Super+WheelScrollDown".action = focus-workspace-down; - "Super+WheelScrollUp".action = focus-workspace-up; - "Super+Shift+WheelScrollDown".action = move-window-down-or-to-workspace-down; - "Super+Shift+WheelScrollUp".action = move-window-up-or-to-workspace-up; - - XF86Launch5.action = consume-or-expel-window-right; - XF86Launch6.action = consume-or-expel-window-left; - XF86Launch7.action = switch-preset-column-width; - - "Super+Shift+L".action = spawn "swaylock" "-f"; - XF86AudioPlay.action = playerctl "play-pause"; - XF86AudioPrev.action = playerctl "previous"; - XF86AudioNext.action = playerctl "next"; - - "Mod+Minus".action = set-column-width "-10%"; - "Mod+Equal".action = set-column-width "+10%"; - - "Mod+Shift+Minus".action = set-window-height "-10%"; - "Mod+Shift+Equal".action = set-window-height "+10%"; - - "Mod+Shift+V".action = toggle-window-floating; - "Mod+W".action = toggle-column-tabbed-display; - - "Mod+XF86Launch7" = { - action = spawn "sh" "-c" '' - grim -g "$(slurp)" - | tee ${ss}.png | wl-copy + XF86Tools.action = spawn "sh" "-c" '' + wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && \ + wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle ''; - repeat = false; - }; - "Mod+Shift+XF86Launch7" = { - action = spawn "sh" "-c" '' - grim -g "$(slurp)" ${ss}.png - satty --filename "${ss}.png" --output-filename "${ss}-edited.png" - ''; - repeat = false; - }; - "Mod+S" = { - action = spawn "sh" "-c" '' - grim -g "$(slurp)" - | tee ${ss}.png | wl-copy + "Mod+WheelScrollDown".action = focus-column-right; + "Mod+WheelScrollUp".action = focus-column-left; + "Mod+Shift+WheelScrollDown".action = move-column-right; + "Mod+Shift+WheelScrollUp".action = move-column-left; + + "Super+WheelScrollDown".action = focus-workspace-down; + "Super+WheelScrollUp".action = focus-workspace-up; + "Super+Shift+WheelScrollDown".action = move-window-down-or-to-workspace-down; + "Super+Shift+WheelScrollUp".action = move-window-up-or-to-workspace-up; + + XF86Launch5.action = consume-or-expel-window-right; + XF86Launch6.action = consume-or-expel-window-left; + XF86Launch7.action = switch-preset-column-width; + + "Super+Shift+L".action = spawn "swaylock" "-f"; + XF86AudioPlay.action = playerctl "play-pause"; + XF86AudioPrev.action = playerctl "previous"; + XF86AudioNext.action = playerctl "next"; + + "Mod+Minus".action = set-column-width "-10%"; + "Mod+Equal".action = set-column-width "+10%"; + + "Mod+Shift+Minus".action = set-window-height "-10%"; + "Mod+Shift+Equal".action = set-window-height "+10%"; + + "Mod+Shift+V".action = toggle-window-floating; + "Mod+W".action = toggle-column-tabbed-display; + + "Mod+XF86Launch7" = { + action = spawn "sh" "-c" '' + wayfreeze & + sleep 0.1 + GEOM=$(slurp) + if [ -n "$GEOM" ]; then + grim -g "$GEOM" - | tee ${ss}.png | wl-copy + fi + pkill -n wayfreeze + ''; + repeat = false; + }; + + "Mod+Shift+XF86Launch7" = { + action = spawn "sh" "-c" '' + wayfreeze & + sleep 0.1 + GEOM=$(slurp) + if [ -n "$GEOM" ]; then + grim -g "$GEOM" -t ppm - | satty --filename - --output-filename "${ss}-edited.png" + fi + pkill -n wayfreeze + ''; + repeat = false; + }; + + "Mod+S" = { + action = spawn "sh" "-c" '' + wayfreeze & + sleep 0.1 + GEOM=$(slurp) + if [ -n "$GEOM" ]; then + grim -g "$GEOM" - | tee ${ss}.png | wl-copy + fi + pkill -n wayfreeze + ''; + repeat = false; + }; + + "Mod+Shift+S" = { + action = spawn "sh" "-c" '' + wayfreeze & + sleep 0.1 + GEOM=$(slurp) + if [ -n "$GEOM" ]; then + grim -g "$GEOM" -t ppm - | satty --filename - --output-filename "${ss}-edited.png" + fi + pkill -n wayfreeze + ''; + repeat = false; + }; + + "Mod+Shift+D".action = spawn "sh" "-c" '' + cliphist list | fuzzel --dmenu | cliphist decode | wl-copy ''; - repeat = false; - }; - "Mod+Shift+S" = { - action = spawn "sh" "-c" '' - grim -g "$(slurp)" ${ss}.png - satty --filename "${ss}.png" --output-filename "${ss}-edited.png" - ''; - repeat = false; - }; - - "Mod+Shift+D".action = spawn "sh" "-c" '' - cliphist list | fuzzel --dmenu | cliphist decode | wl-copy - ''; - - "Mod+Return".action = spawn "foot"; - "Mod+D".action = spawn "fuzzel"; - "Mod+C".action = spawn "qalculate-gtk"; - "Mod+BracketLeft".action = consume-or-expel-window-left; - "Mod+BracketRight".action = consume-or-expel-window-right; - - "Mod+R".action = switch-preset-column-width; - "Mod+Shift+R".action = reset-window-height; - "Mod+F".action = maximize-column; - "Mod+Shift+F".action = fullscreen-window; - - "Mod+Comma".action = consume-window-into-column; - "Mod+Period".action = expel-window-from-column; - - "Mod+Shift+E".action = quit; - - "Mod+H".action = focus-column-left; - "Mod+L".action = focus-column-right; - "Mod+J".action = focus-workspace-down; - "Mod+K".action = focus-workspace-up; - - "Mod+Shift+H".action = move-column-left; - "Mod+Shift+L".action = move-column-right; - "Mod+Shift+J".action = move-window-down-or-to-workspace-down; - "Mod+Shift+K".action = move-window-up-or-to-workspace-up; - - "Mod+Shift+Q".action = close-window; - - "Super+Return".action = spawn "obs-cmd" "replay" "save"; - -} -// (builtins.listToAttrs ( - builtins.concatMap ( - keyNum: - let - key = toString keyNum; - targetWS = keyNum + 1; - in - [ - { - name = "Mod+${key}"; - value.action = focus-workspace targetWS; - } - { - name = "Mod+Shift+${key}"; - value.action.move-column-to-workspace = [ targetWS ]; - } - ] - ) (lib.range 1 9) -)) + "Mod+Return".action = spawn "foot"; + "Mod+D".action = spawn "fuzzel"; + "Mod+C".action = spawn "qalculate-gtk"; + "Mod+BracketLeft".action = consume-or-expel-window-left; + "Mod+BracketRight".action = consume-or-expel-window-right; + + "Mod+R".action = switch-preset-column-width; + "Mod+Shift+R".action = reset-window-height; + "Mod+F".action = maximize-column; + "Mod+Shift+F".action = fullscreen-window; + + "Mod+Comma".action = consume-window-into-column; + "Mod+Period".action = expel-window-from-column; + + "Mod+Shift+E".action = quit; + + "Mod+H".action = focus-column-left; + "Mod+L".action = focus-column-right; + "Mod+J".action = focus-workspace-down; + "Mod+K".action = focus-workspace-up; + + "Mod+Shift+H".action = move-column-left; + "Mod+Shift+L".action = move-column-right; + "Mod+Shift+J".action = move-window-down-or-to-workspace-down; + "Mod+Shift+K".action = move-window-up-or-to-workspace-up; + + "Mod+Shift+Q".action = close-window; + + "Super+Return".action = spawn "obs-cmd" "replay" "save"; + } + // (builtins.listToAttrs ( + builtins.concatMap ( + keyNum: let + key = toString keyNum; + targetWS = keyNum + 1; + in [ + { + name = "Mod+${key}"; + value.action = focus-workspace targetWS; + } + { + name = "Mod+Shift+${key}"; + value.action.move-column-to-workspace = [targetWS]; + } + ] + ) (lib.range 1 9) + )) diff --git a/hm/env/niri/niri.nix b/hm/env/niri/niri.nix index b751d3d..3f66f6e 100644 --- a/hm/env/niri/niri.nix +++ b/hm/env/niri/niri.nix @@ -1,8 +1,11 @@ -{ config, lib, pkgs, ... }: -let - cfg = config.hm.env.niri; -in { + config, + lib, + pkgs, + ... +}: let + cfg = config.hm.env.niri; +in { options.hm.env.niri.enable = lib.mkEnableOption "niri hm"; config = lib.mkIf cfg.enable { hm.env = { @@ -15,9 +18,8 @@ in programs.niri.settings = { debug.disable-cursor-plane = []; - binds = import ./binds.nix { inherit config lib pkgs; }; + binds = import ./binds.nix {inherit config lib pkgs;}; - # animations.enable = false; prefer-no-csd = true; hotkey-overlay.skip-at-startup = true; input = { @@ -53,7 +55,6 @@ in cursor = { hide-when-typing = true; size = 48; - theme = "miyabi"; }; layout = { empty-workspace-above-first = true; @@ -66,14 +67,14 @@ in # active = ; }; preset-column-widths = [ - { proportion = 1. / 3.; } - { proportion = 1. / 2.; } - { proportion = 2. / 3.; } + {proportion = 1. / 3.;} + {proportion = 1. / 2.;} + {proportion = 2. / 3.;} ]; preset-window-heights = [ - { proportion = 1. / 3.; } - { proportion = 1. / 2.; } - { proportion = 2. / 3.; } + {proportion = 1. / 3.;} + {proportion = 1. / 2.;} + {proportion = 2. / 3.;} ]; default-column-width.proportion = 0.5; tab-indicator = { @@ -84,15 +85,14 @@ in window-rules = [ { matches = [ - { app-id = "Bitwarden"; } + {app-id = "Bitwarden";} ]; block-out-from = "screen-capture"; } ]; gestures.hot-corners.enable = false; spawn-at-startup = [ - { command = [ "waybar" ]; } - { command = [ "obs" "--disable-missing-files-check" "--startreplaybuffer" ]; } + {command = ["obs" "--disable-missing-files-check" "--startreplaybuffer"];} ]; }; home.packages = with pkgs; [ diff --git a/hm/env/screenshot.nix b/hm/env/screenshot.nix index e61e3de..eac2fe7 100644 --- a/hm/env/screenshot.nix +++ b/hm/env/screenshot.nix @@ -1,14 +1,18 @@ -{ config, lib, pkgs, ... }: -let - cfg = config.hm.env.screenshot; -in { + config, + lib, + pkgs, + ... +}: let + cfg = config.hm.env.screenshot; +in { options.hm.env.screenshot.enable = lib.mkEnableOption "enables screenshot utilities"; config = lib.mkIf cfg.enable { programs.satty = { enable = true; }; home.packages = with pkgs; [ + wayfreeze grim slurp ]; diff --git a/hm/env/waybar.nix b/hm/env/waybar.nix index 182a4fb..b75cc91 100644 --- a/hm/env/waybar.nix +++ b/hm/env/waybar.nix @@ -1,12 +1,18 @@ -{ config, lib, ... }: -let - cfg = config.hm.env.waybar; -in { + config, + lib, + ... +}: let + cfg = config.hm.env.waybar; +in { options.hm.env.waybar.enable = lib.mkEnableOption "enables waybar"; config = lib.mkIf cfg.enable { programs.waybar = { enable = true; + systemd = { + enable = true; + target = "graphical-session.target"; + }; }; }; } diff --git a/hm/shell/cli.nix b/hm/shell/cli.nix index b02922b..142fda5 100644 --- a/hm/shell/cli.nix +++ b/hm/shell/cli.nix @@ -3,16 +3,14 @@ lib, pkgs, ... -}: -let +}: let cfg = config.hm.shell.cli; -in -{ +in { options.hm.shell.cli.enable = lib.mkEnableOption "modern cli tools"; config = lib.mkIf cfg.enable { programs.zoxide = { enable = true; - options = [ "--cmd cd" ]; + options = ["--cmd cd"]; }; programs.bat = { enable = true; @@ -25,7 +23,43 @@ in programs.ripgrep.enable = true; programs.yazi.enable = true; programs.btop.enable = true; - programs.fastfetch.enable = true; + programs.fastfetch = { + enable = true; + settings = { + display = { + size = { + binaryPrefix = "iec"; + }; + separator = "  "; + }; + multithreading = true; + modules = [ + "title" + "separator" + "os" + { + type = "command"; + key = "Generation"; + text = "readlink /nix/var/nix/profiles/system | cut -d- -f2"; + } + "kernel" + "uptime" + "processes" + "shell" + "display" + "wm" + "terminal" + "cpu" + "gpu" + "memory" + "swap" + "disk" + "localip" + "break" + "colors" + ]; + }; + }; programs.direnv.enable = true; programs.jq.enable = true; programs.nix-your-shell = { diff --git a/hm/soft/browser.nix b/hm/soft/browser.nix index 72f13c3..a9a2f1b 100644 --- a/hm/soft/browser.nix +++ b/hm/soft/browser.nix @@ -3,11 +3,9 @@ lib, pkgs, ... -}: -let +}: let cfg = config.hm.soft.browser; -in -{ +in { options.hm.soft.browser = { librewolf.enable = lib.mkEnableOption "LibreWolf browser"; brave.enable = lib.mkEnableOption "Brave browser"; @@ -16,125 +14,23 @@ in (lib.mkIf cfg.librewolf.enable { programs.librewolf = { enable = true; - profiles = { - main = { - isDefault = true; - name = "main"; - extensions = { }; - bookmarks = { - force = true; - settings = [ - { - name = "Toolbar Root"; - toolbar = true; - bookmarks = [ - { - name = "Youtube"; - tags = [ "yt" ]; - keyword = "yt"; - url = "https://www.youtube.com"; - } - { - name = "cwel"; - tags = [ "cwel" ]; - keyword = "cwel"; - url = "https://gemini.google.com/app"; - } - ]; - } - ]; - }; - search = { - force = true; - default = "SearXNG"; - privateDefault = "SearXNG"; - engines = { - "SearXNG" = { - urls = [ { template = "https://searx.tiekoetter.com/search?q={searchTerms}"; } ]; - icon = "https://searx.tiekoetter.com/favicon.ico"; - definedAliases = [ "@s" ]; - }; - "Nixos Packages" = { - urls = [ - { - template = "https://search.nixos.org/packages"; - params = [ - { - name = "channel"; - value = "unstable"; - } - { - name = "query"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = [ "@nix" ]; - }; - "HM Options" = { - urls = [ - { - template = "https://home-manager-options.extranix.com"; - params = [ - { - name = "query"; - value = "{searchTerms}"; - } - { - name = "release"; - value = "master"; - } - ]; - } - ]; - }; - "google".metaData.hidden = true; - "amazondotcom-us".metaData.hidden = true; - "bing".metaData.hidden = true; - "ebay".metaData.hidden = true; - "duckduckgo".metaData.hidden = true; - "wikipedia".metaData.hidden = true; - "perplexity".metaData.hidden = true; - }; - }; - settings = { }; - }; - }; settings = { "ui.key.menuAccessKeyFocuses" = false; "browser.search.update" = false; "browser.formfill.enable" = false; "browser.search.suggest.enabled" = false; "signon.rememberSignons" = false; - - "browser.urlbar.suggest.history" = false; - "browser.urlbar.suggest.bookmark" = false; - "browser.urlbar.suggest.openpage" = false; - "browser.urlbar.suggest.engines" = false; - "browser.urlbar.suggest.topsites" = false; "browser.urlbar.showSearchTerms.featureGate" = false; - "browser.toolbars.bookmarks.visibility" = "always"; - "privacy.clearOnShutdown.cookies" = true; - "privacy.clearOnShutdown.cache" = true; - - "network.cookie.lifetimePolicy" = 0; - "privacy.cpd.cookies" = true; - - # "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org"; - # "layout.css.prefers-color-scheme.content-override" = 0; - # "browser.theme.content-theme" = 0; - # "browser.theme.toolbar-theme" = 0; + # "privacy.clearOnShutdown.cookies" = true; + # "privacy.clearOnShutdown.cache" = true; }; }; - home.packages = [ pkgs.nixos-icons ]; }) (lib.mkIf cfg.brave.enable { - home.packages = [ pkgs.brave ]; + home.packages = [pkgs.brave]; }) ]; } diff --git a/hm/soft/media.nix b/hm/soft/media.nix index 3ea4dfa..8dcd6de 100644 --- a/hm/soft/media.nix +++ b/hm/soft/media.nix @@ -1,14 +1,14 @@ -{ config, lib, pkgs, ... }: -let - cfg = config.hm.soft.media; -in { + config, + lib, + pkgs, + ... +}: let + cfg = config.hm.soft.media; +in { options.hm.soft.media.enable = lib.mkEnableOption "media cli tools"; config = lib.mkIf cfg.enable { home.packages = with pkgs; [ - krita - gimp - zathura pinta ffmpeg imagemagick @@ -16,4 +16,3 @@ in ]; }; } - diff --git a/hm/soft/nixcord.nix b/hm/soft/nixcord.nix index 77d4adb..e1345b2 100644 --- a/hm/soft/nixcord.nix +++ b/hm/soft/nixcord.nix @@ -2,6 +2,7 @@ inputs, config, lib, + pkgs, ... }: let @@ -12,6 +13,9 @@ in options.hm.soft.nixcord.enable = lib.mkEnableOption "nixcord configuration"; config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + equibop + ]; programs.nixcord = { enable = true; discord = { @@ -21,10 +25,10 @@ in vencord.enable = false; equicord.enable = true; }; - equibop = { - enable = true; - autoscroll.enable = true; - }; + # equibop = { + # enable = true; + # autoscroll.enable = true; + # }; config = { frameless = true; plugins = { diff --git a/hosts/desktop/configuration.nix b/hosts/desktop/configuration.nix index 8c1f0b5..9ea9552 100644 --- a/hosts/desktop/configuration.nix +++ b/hosts/desktop/configuration.nix @@ -3,8 +3,7 @@ inputs, username, ... -}: -{ +}: { system.stateVersion = "25.05"; imports = [ @@ -23,10 +22,14 @@ enable = true; disable-devices.enable = true; }; - bootloader = "systemd-boot"; + bootloader.type = "systemd-boot"; drivers = { enable = true; - amdgpu.enable = true; + cpu = "amd"; + graphics = { + enable = true; + amdgpu.enable = true; + }; kernel = "unstable"; }; fonts.enable = true; @@ -69,7 +72,7 @@ kdeconnect.enable = true; monero = { enable = true; - service.enable = true; + # service.enable = true; }; }; wm = { @@ -78,18 +81,18 @@ }; }; + services.zerotierone.enable = true; + xdg.terminal-exec = { enable = true; settings = { - default = [ "foot.desktop" ]; + default = ["foot.desktop"]; }; }; - programs.firefox.enable = true; - boot = { - kernelParams = [ "video=DP-1:2560x1440@240" ]; - kernelModules = [ "nct6687" ]; + kernelParams = ["video=DP-1:2560x1440@240"]; + kernelModules = ["nct6687"]; extraModulePackages = [ config.boot.kernelPackages.nct6687d ]; diff --git a/hosts/desktop/home.nix b/hosts/desktop/home.nix index f47deb7..5dfb31e 100644 --- a/hosts/desktop/home.nix +++ b/hosts/desktop/home.nix @@ -1,6 +1,9 @@ -{ username, pkgs, ... }: { - imports = [ ../../hm/default.nix ]; + username, + pkgs, + ... +}: { + imports = [../../hm/default.nix]; home = { username = "${username}"; @@ -59,16 +62,17 @@ }; }; - home.packages = with pkgs.sweethome3d; [ - application - furniture-editor + home.packages = with pkgs; [ + sweethome3d.application + sweethome3d.furniture-editor + czkawka ]; xdg.mimeApps = { enable = true; defaultApplications = { - "x-scheme-handler/terminal" = [ "foot.desktop" ]; - "inode/directory" = [ "thunar.desktop" ]; + "x-scheme-handler/terminal" = ["foot.desktop"]; + "inode/directory" = ["thunar.desktop"]; }; }; diff --git a/hosts/laptop/configuration.nix b/hosts/laptop/configuration.nix index 3390af0..304302d 100644 --- a/hosts/laptop/configuration.nix +++ b/hosts/laptop/configuration.nix @@ -1,5 +1,4 @@ -{ username, ... }: -{ +{username, ...}: { system.stateVersion = "25.05"; imports = [ @@ -12,8 +11,16 @@ allowUnfree.enable = true; audio.enable = true; - bootloader = "grub"; - drivers.enable = true; + bootloader = { + type = "grub"; + useOSProber = true; + grubDevice = "nodev"; + }; + drivers = { + enable = true; + cpu = "amd"; + graphics.enable = true; + }; fonts.enable = true; greet.enable = true; home-manager = { @@ -32,7 +39,10 @@ }; }; network.enable = true; - power.enable = true; + power = { + enable = true; + mode = "amd"; + }; security.enable = true; ssh.enable = true; storage.enable = true; diff --git a/hosts/oci/configuration.nix b/hosts/oci/configuration.nix deleted file mode 100644 index cc3cbf4..0000000 --- a/hosts/oci/configuration.nix +++ /dev/null @@ -1,95 +0,0 @@ -{ - config, - inputs, - username, - ... -}: -{ - system.stateVersion = "25.05"; - - imports = [ - inputs.disko.nixosModules.disko - - ./hardware-configuration.nix - ../../os/default.nix - ]; - - os = { - core = { - allowUnfree.enable = true; - flatpak.enable = true; - - audio = { - enable = true; - disable-devices.enable = true; - }; - bootloader = "systemd-boot"; - drivers = { - enable = true; - amdgpu.enable = true; - stability = "unstable"; - }; - fonts.enable = true; - greet.enable = true; - home-manager = { - enable = true; - users.${username}.path = ./home.nix; - }; - locale.enable = true; - memory = { - zram = { - enable = true; - percent = 25; - }; - swapfile = { - enable = true; - size = 32; - }; - }; - network.enable = true; - security.enable = true; - ssh.enable = true; - storage.enable = true; - users.enable = true; - }; - srv = { - files = { - thunar.enable = true; - krusader.enable = true; - utils.enable = true; - }; - gaming = { - enable = true; - steam.enable = true; - vr.enable = true; - }; - virtualization.enable = true; - nix-helper.enable = true; - ollama.enable = true; - kdeconnect.enable = true; - monero = { - enable = true; - service.enable = true; - }; - }; - wm = { - enable = true; - niri.enable = true; - }; - }; - - xdg.terminal-exec = { - enable = true; - settings = { - default = [ "foot.desktop" ]; - }; - }; - - boot = { - kernelParams = [ "video=DP-1:2560x1440@240" ]; - kernelModules = [ "nct6687" ]; - extraModulePackages = [ - config.boot.kernelPackages.nct6687d - ]; - }; -} diff --git a/hosts/oci/disko.nix b/hosts/oci/disko.nix deleted file mode 100644 index edc4008..0000000 --- a/hosts/oci/disko.nix +++ /dev/null @@ -1,104 +0,0 @@ -{ - disko.devices = { - disk = { - main = { - type = "disk"; - device = "/dev/nvme0n1"; - content = { - type = "gpt"; - partitions = { - ESP = { - size = "2G"; - type = "EF00"; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - mountOptions = [ "umask=0077" ]; - }; - }; - root = { - size = "100%"; - content = { - type = "btrfs"; - extraArgs = [ "-f" ]; - subvolumes = { - "@" = { - mountpoint = "/"; - mountOptions = [ "compress=zstd:1" "noatime" ]; - }; - "@home" = { - mountpoint = "/home"; - mountOptions = [ "compress=zstd:1" "noatime" ]; - }; - "@nix" = { - mountpoint = "/nix"; - mountOptions = [ "compress=zstd:1" "noatime" ]; - }; - "@log" = { - mountpoint = "/var/log"; - mountOptions = [ "compress=zstd:1" "noatime" ]; - }; - "@games" = { - mountpoint = "/games"; - mountOptions = [ "compress=zstd:1" "noatime" ]; - }; - "@llms" = { - mountpoint = "/llms"; - mountOptions = [ "nodatacow" "noatime"]; - }; - "@vms" = { - mountpoint = "/vms"; - mountOptions = [ "nodatacow" "noatime" ]; - }; - "@swap" = { - mountpoint = "/.swapvol"; - mountOptions = [ "nodatacow" "noatime" ]; - }; - }; - }; - }; - }; - }; - }; - media = { - type = "disk"; - device = "/dev/sda"; - content = { - type = "gpt"; - partitions = { - media = { - size = "100%"; - content = { - type = "btrfs"; - extraArgs = [ "-f" ]; - subvolumes = { - "@archive" = { - mountpoint = "/media/archive"; - mountOptions = [ "compress=zstd:1" "autodefrag" "noatime" ]; - }; - "@movies" = { - mountpoint = "/media/movies"; - mountOptions = [ "autodefrag" "noatime" ]; - }; - "@anime" = { - mountpoint = "/media/anime"; - mountOptions = [ "autodefrag" "noatime" ]; - }; - "@pictures" = { - mountpoint = "/media/pics"; - mountOptions = [ "autodefrag" "noatime" ]; - }; - "@videos" = { - mountpoint = "/media/vids"; - mountOptions = [ "autodefrag" "noatime" ]; - }; - }; - }; - }; - }; - }; - }; - }; - }; -} diff --git a/hosts/oci/home.nix b/hosts/oci/home.nix deleted file mode 100644 index e274907..0000000 --- a/hosts/oci/home.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ username, ... }: -{ - imports = [ ../../hm/default.nix ]; - - home = { - username = "${username}"; - homeDirectory = "/home/${username}"; - stateVersion = "25.05"; - }; - - hm = { - conf = { - clip = { - enable = true; - backend = "wayland"; - }; - git.enable = true; - xdg-dirs = { - enable = true; - mediaPath = /storage; - }; - }; - editors.nixvim.enable = true; - env = { - niri.enable = true; - cursor = { - size = 48; - enableMiyabi = true; - }; - - waybar.enable = true; - themes = { - enable = true; - gtk.enable = true; - qt.enable = true; - }; - }; - shell = { - cli.enable = true; - fish.enable = true; - foot.enable = true; - starship.enable = true; - }; - soft = { - browser = { - librewolf.enable = true; - brave.enable = true; - }; - email.evolution.enable = true; - media.enable = true; - mpv.enable = true; - nixcord.enable = true; - obs.enable = true; - obsidian.enable = true; - spicetify.enable = true; - torrent.enable = true; - vpn.protonvpn.enable = true; - yt-dlp.enable = true; - }; - }; - - xdg.mimeApps = { - enable = true; - defaultApplications = { - "x-scheme-handler/terminal" = [ "foot.desktop" ]; - "inode/directory" = [ "thunar.desktop" ]; - }; - }; - - home.sessionVariables = { - XDG_UTILS_TERMINAL = "foot"; - }; -} diff --git a/hosts/thinkpad/configuration.nix b/hosts/thinkpad/configuration.nix index 4713892..a38d74b 100644 --- a/hosts/thinkpad/configuration.nix +++ b/hosts/thinkpad/configuration.nix @@ -1,5 +1,8 @@ -{ inputs, username, ... }: { + inputs, + username, + ... +}: { system.stateVersion = "25.05"; imports = [ @@ -15,9 +18,16 @@ allowUnfree.enable = true; audio.enable = true; - bootloader = "systemd-boot"; + bootloader = { + type = "grub"; + enableEncryption = true; + grubDevice = "/dev/nvme0n1"; + luksDevice = "/dev/nvme0n1p2"; + }; drivers = { enable = true; + cpu = "intel"; + graphics.enable = true; kernel = "hardened"; }; fonts.enable = true; @@ -38,7 +48,10 @@ }; }; network.enable = true; - power.enable = true; + power = { + enable = true; + mode = "intel"; + }; security.enable = true; ssh.enable = true; storage.enable = true; @@ -52,10 +65,13 @@ }; kdeconnect.enable = true; nix-helper.enable = true; + monero.enable = true; }; wm = { enable = true; niri.enable = true; }; }; + services.thinkfan.enable = true; + boot.kernelModules = ["thinkpad_acpi"]; } diff --git a/hosts/thinkpad/disko.nix b/hosts/thinkpad/disko.nix index f3243d8..97e5c87 100644 --- a/hosts/thinkpad/disko.nix +++ b/hosts/thinkpad/disko.nix @@ -7,67 +7,60 @@ content = { type = "gpt"; partitions = { - ESP = { - size = "2G"; - type = "EF00"; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - mountOptions = [ "umask=0077" ]; - }; + biosboot = { + size = "1M"; + type = "EF02"; }; luks = { size = "100%"; content = { type = "luks"; name = "crypted"; - settings = { - allowDiscards = true; - }; + settings.allowDiscards = true; content = { type = "btrfs"; - extraArgs = [ "-f" ]; + extraArgs = ["-f"]; subvolumes = { - "@" = { + "root" = { mountpoint = "/"; mountOptions = [ "compress=zstd:1" "noatime" ]; }; - "@home" = { + "home" = { mountpoint = "/home"; mountOptions = [ "compress=zstd:1" "noatime" ]; }; - "@nix" = { + "nix" = { mountpoint = "/nix"; mountOptions = [ "compress=zstd:1" "noatime" ]; }; - "@log" = { + "log" = { mountpoint = "/var/log"; mountOptions = [ "compress=zstd:1" "noatime" ]; }; - "@vms" = { + "vms" = { mountpoint = "/vms"; mountOptions = [ "nodatacow" "noatime" ]; }; - "@swap" = { + "swap" = { mountpoint = "/.swapvol"; mountOptions = [ "nodatacow" + "compress=no" "noatime" ]; }; diff --git a/hosts/vm/configuration.nix b/hosts/vm/configuration.nix deleted file mode 100644 index cc3cbf4..0000000 --- a/hosts/vm/configuration.nix +++ /dev/null @@ -1,95 +0,0 @@ -{ - config, - inputs, - username, - ... -}: -{ - system.stateVersion = "25.05"; - - imports = [ - inputs.disko.nixosModules.disko - - ./hardware-configuration.nix - ../../os/default.nix - ]; - - os = { - core = { - allowUnfree.enable = true; - flatpak.enable = true; - - audio = { - enable = true; - disable-devices.enable = true; - }; - bootloader = "systemd-boot"; - drivers = { - enable = true; - amdgpu.enable = true; - stability = "unstable"; - }; - fonts.enable = true; - greet.enable = true; - home-manager = { - enable = true; - users.${username}.path = ./home.nix; - }; - locale.enable = true; - memory = { - zram = { - enable = true; - percent = 25; - }; - swapfile = { - enable = true; - size = 32; - }; - }; - network.enable = true; - security.enable = true; - ssh.enable = true; - storage.enable = true; - users.enable = true; - }; - srv = { - files = { - thunar.enable = true; - krusader.enable = true; - utils.enable = true; - }; - gaming = { - enable = true; - steam.enable = true; - vr.enable = true; - }; - virtualization.enable = true; - nix-helper.enable = true; - ollama.enable = true; - kdeconnect.enable = true; - monero = { - enable = true; - service.enable = true; - }; - }; - wm = { - enable = true; - niri.enable = true; - }; - }; - - xdg.terminal-exec = { - enable = true; - settings = { - default = [ "foot.desktop" ]; - }; - }; - - boot = { - kernelParams = [ "video=DP-1:2560x1440@240" ]; - kernelModules = [ "nct6687" ]; - extraModulePackages = [ - config.boot.kernelPackages.nct6687d - ]; - }; -} diff --git a/hosts/vm/disko.nix b/hosts/vm/disko.nix deleted file mode 100644 index edc4008..0000000 --- a/hosts/vm/disko.nix +++ /dev/null @@ -1,104 +0,0 @@ -{ - disko.devices = { - disk = { - main = { - type = "disk"; - device = "/dev/nvme0n1"; - content = { - type = "gpt"; - partitions = { - ESP = { - size = "2G"; - type = "EF00"; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - mountOptions = [ "umask=0077" ]; - }; - }; - root = { - size = "100%"; - content = { - type = "btrfs"; - extraArgs = [ "-f" ]; - subvolumes = { - "@" = { - mountpoint = "/"; - mountOptions = [ "compress=zstd:1" "noatime" ]; - }; - "@home" = { - mountpoint = "/home"; - mountOptions = [ "compress=zstd:1" "noatime" ]; - }; - "@nix" = { - mountpoint = "/nix"; - mountOptions = [ "compress=zstd:1" "noatime" ]; - }; - "@log" = { - mountpoint = "/var/log"; - mountOptions = [ "compress=zstd:1" "noatime" ]; - }; - "@games" = { - mountpoint = "/games"; - mountOptions = [ "compress=zstd:1" "noatime" ]; - }; - "@llms" = { - mountpoint = "/llms"; - mountOptions = [ "nodatacow" "noatime"]; - }; - "@vms" = { - mountpoint = "/vms"; - mountOptions = [ "nodatacow" "noatime" ]; - }; - "@swap" = { - mountpoint = "/.swapvol"; - mountOptions = [ "nodatacow" "noatime" ]; - }; - }; - }; - }; - }; - }; - }; - media = { - type = "disk"; - device = "/dev/sda"; - content = { - type = "gpt"; - partitions = { - media = { - size = "100%"; - content = { - type = "btrfs"; - extraArgs = [ "-f" ]; - subvolumes = { - "@archive" = { - mountpoint = "/media/archive"; - mountOptions = [ "compress=zstd:1" "autodefrag" "noatime" ]; - }; - "@movies" = { - mountpoint = "/media/movies"; - mountOptions = [ "autodefrag" "noatime" ]; - }; - "@anime" = { - mountpoint = "/media/anime"; - mountOptions = [ "autodefrag" "noatime" ]; - }; - "@pictures" = { - mountpoint = "/media/pics"; - mountOptions = [ "autodefrag" "noatime" ]; - }; - "@videos" = { - mountpoint = "/media/vids"; - mountOptions = [ "autodefrag" "noatime" ]; - }; - }; - }; - }; - }; - }; - }; - }; - }; -} diff --git a/hosts/vm/home.nix b/hosts/vm/home.nix deleted file mode 100644 index e274907..0000000 --- a/hosts/vm/home.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ username, ... }: -{ - imports = [ ../../hm/default.nix ]; - - home = { - username = "${username}"; - homeDirectory = "/home/${username}"; - stateVersion = "25.05"; - }; - - hm = { - conf = { - clip = { - enable = true; - backend = "wayland"; - }; - git.enable = true; - xdg-dirs = { - enable = true; - mediaPath = /storage; - }; - }; - editors.nixvim.enable = true; - env = { - niri.enable = true; - cursor = { - size = 48; - enableMiyabi = true; - }; - - waybar.enable = true; - themes = { - enable = true; - gtk.enable = true; - qt.enable = true; - }; - }; - shell = { - cli.enable = true; - fish.enable = true; - foot.enable = true; - starship.enable = true; - }; - soft = { - browser = { - librewolf.enable = true; - brave.enable = true; - }; - email.evolution.enable = true; - media.enable = true; - mpv.enable = true; - nixcord.enable = true; - obs.enable = true; - obsidian.enable = true; - spicetify.enable = true; - torrent.enable = true; - vpn.protonvpn.enable = true; - yt-dlp.enable = true; - }; - }; - - xdg.mimeApps = { - enable = true; - defaultApplications = { - "x-scheme-handler/terminal" = [ "foot.desktop" ]; - "inode/directory" = [ "thunar.desktop" ]; - }; - }; - - home.sessionVariables = { - XDG_UTILS_TERMINAL = "foot"; - }; -} diff --git a/os/core/audio.nix b/os/core/audio.nix index 0290b6c..2454a89 100644 --- a/os/core/audio.nix +++ b/os/core/audio.nix @@ -1,8 +1,11 @@ -{ config, lib, pkgs, ... }: -let - cfg = config.os.core.audio; -in { + config, + lib, + pkgs, + ... +}: let + cfg = config.os.core.audio; +in { options.os.core.audio = { enable = lib.mkEnableOption "audio support"; disable-devices.enable = lib.mkEnableOption "disables some random devices cluttering up"; @@ -31,13 +34,29 @@ in ]; }) (lib.mkIf cfg.disable-devices.enable { - services.pipewire.wireplumber.extraConfig."99-disable-useless-devices"."monitor.alsa.rules" = [{ - matches = [ - { "device.name" = "~alsa_card.pci-0000_03_00.1*"; } - { "device.description" = "~USB Audio*"; } + services.pipewire.wireplumber.extraConfig = { + "10-keep-hyperx-alive"."monitor.alsa.rules" = [ + { + matches = [ + {"device.description" = "~HyperX*";} + ]; + actions.update-props = { + "device.disabled" = false; + "session.suspend-on-idle" = false; + }; + } ]; - actions.update-props = { "device.disabled" = true; }; - }]; + + "99-disable-useless-devices"."monitor.alsa.rules" = [ + { + matches = [ + {"device.name" = "~alsa_card.pci-0000_03_00.1*";} + {"device.description" = "~USB Audio*";} + ]; + actions.update-props = {"device.disabled" = true;}; + } + ]; + }; }) ]; } diff --git a/os/core/bootloader.nix b/os/core/bootloader.nix index 8ba9406..f0aacc0 100644 --- a/os/core/bootloader.nix +++ b/os/core/bootloader.nix @@ -1,43 +1,84 @@ -{ config, lib, ... }: -let - cfg = config.os.core.bootloader; -in { - options.os.core.bootloader = lib.mkOption { - type = lib.types.enum [ "systemd-boot" "grub" "none" ]; - default = "systemd-boot"; - description = "which bootloader to use"; + config, + lib, + ... +}: let + cfg = config.os.core.bootloader; +in { + options.os.core.bootloader = { + type = lib.mkOption { + type = lib.types.enum ["systemd-boot" "grub" "none"]; + default = "systemd-boot"; + description = "which bootloader to use"; + }; + useOSProber = lib.mkOption { + type = lib.types.bool; + default = false; + description = "scan for other operating systems"; + }; + enableEncryption = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Enables LUKS encryption"; + }; + grubDevice = lib.mkOption { + type = lib.types.str; + default = "nodev"; + }; + luksDevice = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; + description = "The underlying partition for LUKS"; + }; }; + config = lib.mkMerge [ { - boot.loader.efi.canTouchEfiVariables = true; - boot.supportedFilesystems = [ "ntfs" ]; - boot.kernelParams = [ "quiet" "splash" ]; - systemd.settings.Manager = { - DefaultTimeoutStopSec = "5s"; + boot = { + supportedFilesystems = ["ntfs" "btrfs"]; + kernelParams = ["quiet" "splash"]; + initrd.luks.devices = lib.mkIf (cfg.enableEncryption && cfg.luksDevice != null) { + "crypted" = { + device = cfg.luksDevice; + preLVM = true; + allowDiscards = true; + }; + }; }; + systemd.settings.Manager.DefaultTimeoutStopSec = "5s"; } - (lib.mkIf (cfg == "systemd-boot") { - boot.consoleLogLevel = 0; - boot.loader = { - systemd-boot.enable = true; - systemd-boot.editor = false; - timeout = 0; + (lib.mkIf (cfg.type == "systemd-boot") { + boot = { + consoleLogLevel = 0; + loader = { + efi.canTouchEfiVariables = true; + timeout = 0; + systemd-boot = { + enable = true; + editor = false; + }; + }; }; }) - (lib.mkIf (cfg == "grub") { + (lib.mkIf (cfg.type == "grub") { boot.loader = { timeout = 3; - efi.efiSysMountPoint = "/boot"; + efi.canTouchEfiVariables = cfg.grubDevice == "nodev"; grub = { enable = true; - device = "nodev"; - efiSupport = true; - useOSProber = true; + device = cfg.grubDevice; + useOSProber = cfg.useOSProber; + enableCryptodisk = cfg.enableEncryption; + + default = + if cfg.useOSProber + then 2 + else 0; - default = 2; + efiSupport = lib.mkDefault (cfg.grubDevice == "nodev"); + copyKernels = lib.mkIf cfg.enableEncryption true; }; }; }) diff --git a/os/core/drivers.nix b/os/core/drivers.nix index a6905d5..da9d83a 100644 --- a/os/core/drivers.nix +++ b/os/core/drivers.nix @@ -4,14 +4,23 @@ pkgs, inputs, ... -}: -let +}: let cfg = config.os.core.drivers; -in -{ +in { options.os.core.drivers = { enable = lib.mkEnableOption "enables hardware drivers"; - amdgpu.enable = lib.mkEnableOption "AMD specific drivers and microcode"; + + cpu = lib.mkOption { + type = lib.types.enum ["intel" "amd" "none"]; + default = "none"; + description = "cpu manufacturer for microcode and platform-specific drivers"; + }; + + graphics = { + enable = lib.mkEnableOption "graphics support"; + amdgpu.enable = lib.mkEnableOption "amd specific gpu features"; + }; + kernel = lib.mkOption { type = lib.types.enum [ "stable" @@ -22,47 +31,57 @@ in default = "stable"; }; }; + config = lib.mkIf cfg.enable ( lib.mkMerge [ { - programs.coolercontrol.enable = true; - services.lact.enable = true; - services.smartd.enable = true; - hardware.sensor.iio.enable = true; hardware.enableAllFirmware = true; + services = { + smartd.enable = true; + fwupd.enable = true; + }; + environment.systemPackages = [pkgs.rivalcfg]; + } + + (lib.mkIf (cfg.cpu == "amd") { hardware.cpu.amd.updateMicrocode = true; + programs.coolercontrol.enable = true; + }) + + (lib.mkIf (cfg.cpu == "intel") { + hardware.cpu.intel.updateMicrocode = true; + services.thermald.enable = true; + }) + + (lib.mkIf cfg.graphics.enable { hardware.graphics = { enable = true; enable32Bit = true; - extraPackages = with pkgs; [ - rocmPackages.clr.icd - ]; }; - environment.systemPackages = [ pkgs.rivalcfg ]; - } + hardware.sensor.iio.enable = true; + }) - (lib.mkIf cfg.amdgpu.enable { + (lib.mkIf (cfg.graphics.enable && cfg.graphics.amdgpu.enable) { + services.lact.enable = true; hardware.amdgpu = { initrd.enable = true; overdrive.enable = true; }; + hardware.graphics.extraPackages = with pkgs; [ + rocmPackages.clr.icd + ]; }) - - (lib.mkIf (cfg.kernel == "unstable") { - boot.kernelPackages = inputs.kernelv.legacyPackages.x86_64-linux.linuxPackages_6_17; - }) - - (lib.mkIf (cfg.kernel == "stable") { - boot.kernelPackages = pkgs.linuxPackages_latest; - }) - - (lib.mkIf (cfg.kernel == "zen") { - boot.kernelPackages = pkgs.linuxPackages_zen; - }) - - (lib.mkIf (cfg.kernel == "hardened") { - boot.kernelPackages = pkgs.linuxPackages_hardened; - }) + { + boot.kernelPackages = let + kernels = { + "stable" = pkgs.linuxPackages_latest; + "zen" = pkgs.linuxPackages_zen; + "hardened" = pkgs.linuxPackages_hardened; + "unstable" = inputs.kernelv.legacyPackages.x86_64-linux.linuxPackages_6_17; + }; + in + kernels.${cfg.kernel} or kernels."stable"; + } ] ); } diff --git a/os/core/power.nix b/os/core/power.nix index 3a8bed2..3929033 100644 --- a/os/core/power.nix +++ b/os/core/power.nix @@ -1,18 +1,46 @@ -{ config, lib, ... }: -let - cfg = config.os.core.power; -in { - options.os.core.power.enable = lib.mkEnableOption "enables AMD-optimized power management"; - config = lib.mkIf cfg.enable { - services.power-profiles-daemon.enable = true; + config, + lib, + ... +}: let + cfg = config.os.core.power; +in { + options.os.core.power = { + enable = lib.mkEnableOption "enables power management"; + mode = lib.mkOption { + type = lib.types.enum ["amd" "intel" "none"]; + default = "none"; + }; + }; - boot.kernelParams = [ - "amd_pstate=active" - "nvme_core.default_ps_max_latency_us=0" - ]; + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + powerManagement.powertop.enable = true; + boot.kernelParams = ["nvme_core.default_ps_max_latency_us=0"]; + } - powerManagement.powertop.enable = true; - services.thermald.enable = true; - }; + (lib.mkIf (cfg.mode == "amd") { + services.power-profiles-daemon.enable = true; + boot.kernelParams = ["amd_pstate=active"]; + }) + + (lib.mkIf (cfg.mode == "intel") { + services = { + power-profiles-daemon.enable = false; + + thermald.enable = true; + tlp = { + enable = true; + settings = { + START_CHARGE_THRESH_BAT0 = 75; + STOP_CHARGE_THRESH_BAT0 = 80; + START_CHARGE_THRESH_BAT1 = 75; + STOP_CHARGE_THRESH_BAT1 = 80; + CPU_SCALING_GOVERNOR_ON_AC = "performance"; + CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; + }; + }; + }; + }) + ]); } diff --git a/os/srv/kdeconnect.nix b/os/srv/kdeconnect.nix index 6bf125c..049a1c6 100644 --- a/os/srv/kdeconnect.nix +++ b/os/srv/kdeconnect.nix @@ -2,14 +2,14 @@ config, lib, username, + pkgs, ... -}: -let +}: let cfg = config.os.srv.kdeconnect; -in -{ +in { options.os.srv.kdeconnect.enable = lib.mkEnableOption "enables kde connect"; config = lib.mkIf cfg.enable { + environment.systemPackages = [pkgs.kdePackages.dolphin]; programs.kdeconnect.enable = true; home-manager.users.${username}.services.kdeconnect = { enable = true; -- cgit v1.3