From 355cf57a1cac565a1540a90df535111b0e0418a7 Mon Sep 17 00:00:00 2001 From: Ashlynne Mitchell Date: Tue, 10 Jun 2025 20:14:10 +1000 Subject: [PATCH] refactor: move to using Denix as a module system --- flake.lock | 166 +++++++-- flake.nix | 75 ++--- home/darwin/configs.nix | 6 - home/desktop/apps.nix | 78 ----- home/modules/niri.nix | 238 ------------- home/modules/ssh.nix | 22 -- home/modules/xdg.nix | 24 -- home/programs/common-cli.nix | 113 ------- home/programs/git.nix | 70 ---- home/programs/syncthing.nix | 15 - home/programs/vscode.nix | 234 ------------- home/server.nix | 10 - home/shimmer.nix | 18 - home/wallsocket.nix | 39 --- hosts/wallsocket/default.nix | 4 + hosts/wallsocket/hardware.nix | 68 ++++ modules/1password.nix | 37 ++ modules/audio.nix | 20 ++ modules/bluetooth.nix | 26 ++ modules/config/args.nix | 30 ++ modules/config/constants.nix | 10 + modules/config/home.nix | 26 ++ modules/config/hosts.nix | 21 ++ modules/config/user.nix | 21 ++ modules/devices.nix | 20 ++ modules/fonts.nix | 50 +++ modules/gaming.nix | 41 +++ modules/graphics.nix | 28 ++ modules/i18n.nix | 21 ++ modules/logitech.nix | 11 + modules/memory.nix | 11 + modules/networking.nix | 53 +++ modules/nix.nix | 39 +++ modules/nixpkgs.nix | 13 - modules/ollama.nix | 10 + modules/packaging.nix | 13 + modules/plasma.nix | 43 +++ modules/programs/bat.nix | 12 + .../programs/chromium.nix | 13 +- modules/programs/core-cli.nix | 45 +++ modules/programs/desktop-apps.nix | 52 +++ {home => modules}/programs/desktop-cli.nix | 12 +- modules/programs/direnv.nix | 19 ++ .../modules => modules/programs}/espanso.nix | 11 +- {home => modules}/programs/fish.nix | 11 +- modules/programs/fzf.nix | 31 ++ modules/programs/git.nix | 73 ++++ {home => modules}/programs/kitty.nix | 9 +- modules/programs/micro.nix | 17 + modules/programs/pager.nix | 19 ++ modules/programs/ssh.nix | 18 + modules/programs/syncthing.nix | 24 ++ modules/programs/tldr.nix | 13 + modules/programs/vscode.nix | 240 +++++++++++++ modules/programs/zellij.nix | 15 + modules/programs/zoxide.nix | 9 + modules/sysctl.nix | 11 + modules/systemd.nix | 15 + modules/tray.nix | 16 + modules/virtualisation.nix | 26 ++ modules/xdg.nix | 34 ++ modules/zsa.nix | 15 + nixos/wallsocket/bluetooth.nix | 14 - nixos/wallsocket/configuration.nix | 316 ------------------ nixos/wallsocket/graphics.nix | 16 - nixos/wallsocket/hardware-configuration.nix | 60 ---- nixos/wallsocket/niri.nix | 27 -- 67 files changed, 1516 insertions(+), 1401 deletions(-) delete mode 100644 home/darwin/configs.nix delete mode 100644 home/desktop/apps.nix delete mode 100644 home/modules/niri.nix delete mode 100644 home/modules/ssh.nix delete mode 100644 home/modules/xdg.nix delete mode 100644 home/programs/common-cli.nix delete mode 100644 home/programs/git.nix delete mode 100644 home/programs/syncthing.nix delete mode 100644 home/programs/vscode.nix delete mode 100644 home/server.nix delete mode 100644 home/shimmer.nix delete mode 100644 home/wallsocket.nix create mode 100644 hosts/wallsocket/default.nix create mode 100644 hosts/wallsocket/hardware.nix create mode 100644 modules/1password.nix create mode 100644 modules/audio.nix create mode 100644 modules/bluetooth.nix create mode 100644 modules/config/args.nix create mode 100644 modules/config/constants.nix create mode 100644 modules/config/home.nix create mode 100644 modules/config/hosts.nix create mode 100644 modules/config/user.nix create mode 100644 modules/devices.nix create mode 100644 modules/fonts.nix create mode 100644 modules/gaming.nix create mode 100644 modules/graphics.nix create mode 100644 modules/i18n.nix create mode 100644 modules/logitech.nix create mode 100644 modules/memory.nix create mode 100644 modules/networking.nix create mode 100644 modules/nix.nix delete mode 100644 modules/nixpkgs.nix create mode 100644 modules/ollama.nix create mode 100644 modules/packaging.nix create mode 100644 modules/plasma.nix create mode 100644 modules/programs/bat.nix rename home/programs/browser.nix => modules/programs/chromium.nix (87%) create mode 100644 modules/programs/core-cli.nix create mode 100644 modules/programs/desktop-apps.nix rename {home => modules}/programs/desktop-cli.nix (65%) create mode 100644 modules/programs/direnv.nix rename {home/modules => modules/programs}/espanso.nix (60%) rename {home => modules}/programs/fish.nix (97%) create mode 100644 modules/programs/fzf.nix create mode 100644 modules/programs/git.nix rename {home => modules}/programs/kitty.nix (88%) create mode 100644 modules/programs/micro.nix create mode 100644 modules/programs/pager.nix create mode 100644 modules/programs/ssh.nix create mode 100644 modules/programs/syncthing.nix create mode 100644 modules/programs/tldr.nix create mode 100644 modules/programs/vscode.nix create mode 100644 modules/programs/zellij.nix create mode 100644 modules/programs/zoxide.nix create mode 100644 modules/sysctl.nix create mode 100644 modules/systemd.nix create mode 100644 modules/tray.nix create mode 100644 modules/virtualisation.nix create mode 100644 modules/xdg.nix create mode 100644 modules/zsa.nix delete mode 100644 nixos/wallsocket/bluetooth.nix delete mode 100644 nixos/wallsocket/configuration.nix delete mode 100644 nixos/wallsocket/graphics.nix delete mode 100644 nixos/wallsocket/hardware-configuration.nix delete mode 100644 nixos/wallsocket/niri.nix diff --git a/flake.lock b/flake.lock index f21e8ea..14be3d6 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,46 @@ { "nodes": { + "denix": { + "inputs": { + "home-manager": [ + "home-manager" + ], + "nix-darwin": "nix-darwin", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks" + }, + "locked": { + "lastModified": 1749374482, + "narHash": "sha256-IAyAgmxZ+8YUPkyxn6gvCUZiV93dX6oLmcOOCSU9We4=", + "owner": "yunfachi", + "repo": "denix", + "rev": "5a27d210ee6ff79375731a515810a02c6bb8b0d4", + "type": "github" + }, + "original": { + "owner": "yunfachi", + "repo": "denix", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -69,6 +110,28 @@ "type": "github" } }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "denix", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -76,11 +139,11 @@ ] }, "locked": { - "lastModified": 1747439237, - "narHash": "sha256-5rCGrnkglKKj4cav1U3HC+SIUNJh08pqOK4spQv9RjA=", + "lastModified": 1749526396, + "narHash": "sha256-UL9F76abAk87llXOrcQRjhd5OaOclUd6MIltsqcUZmo=", "owner": "nix-community", "repo": "home-manager", - "rev": "ae755329092c87369b9e9a1510a8cf1ce2b1c708", + "rev": "427c96044f11a5da50faf6adaf38c9fa47e6d044", "type": "github" }, "original": { @@ -157,11 +220,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1747435695, - "narHash": "sha256-CTr69qXW9/gph8Brvs0TY1fXIJeqmJCt99yC7Mrh1u0=", + "lastModified": 1749533158, + "narHash": "sha256-wIw3Q/Ls1nsLjBN4VsAiTMHZiyf5RGRVy2MWfyYPgMI=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "e572b437025128d71ab262d7b0508136e385d352", + "rev": "e5c4564ec3704f5e358f50d883b5200c4e8dfd7e", "type": "github" }, "original": { @@ -190,11 +253,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1747425277, - "narHash": "sha256-3Guwq7v52mJ+koHUrMbzr8CA9ZD9Yf6/zudyk3NpUec=", + "lastModified": 1749474820, + "narHash": "sha256-hf5eCZ0bbqwOKPvPKn8Rutwj+xs3GhAfB0AjGa8tIEM=", "owner": "YaLTeR", "repo": "niri", - "rev": "bb8eb377c71337890889483e43c361b2bda4a414", + "rev": "a18d24fc24d8b17242e336ccf39fcbe91e8161fd", "type": "github" }, "original": { @@ -204,17 +267,38 @@ } }, "nix-darwin": { + "inputs": { + "nixpkgs": [ + "denix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1746254942, + "narHash": "sha256-Y062AuRx6l+TJNX8wxZcT59SSLsqD9EedAY0mqgTtQE=", + "owner": "nix-darwin", + "repo": "nix-darwin", + "rev": "760a11c87009155afa0140d55c40e7c336d62d7a", + "type": "github" + }, + "original": { + "owner": "nix-darwin", + "repo": "nix-darwin", + "type": "github" + } + }, + "nix-darwin_2": { "inputs": { "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1747365160, - "narHash": "sha256-4ZVr0x+ry6ybym/VhVYACj0HlJo44YxAaPGOxiS88Hg=", + "lastModified": 1749194393, + "narHash": "sha256-vt6hM9DNywnXXuW1qPDLzECmbDcmxhh58wpb0EEQjAo=", "owner": "LnL7", "repo": "nix-darwin", - "rev": "8817b00b0011750381d0d44bb94d61087349b6ba", + "rev": "19346808c445f23b08652971be198b9df6c33edc", "type": "github" }, "original": { @@ -230,11 +314,11 @@ ] }, "locked": { - "lastModified": 1746934494, - "narHash": "sha256-3n6i+F0sDASjkhbvgFDpPDZGp7z19IrRtjfF9TwJpCA=", + "lastModified": 1749355504, + "narHash": "sha256-L17CdJMD+/FCBOHjREQLXbe2VUnc3rjffenBbu2Kwpc=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "e9b21b01e4307176b9718a29ac514838e7f6f4ff", + "rev": "40a6e15e44b11fbf8f2b1df9d64dbfc117625e94", "type": "github" }, "original": { @@ -249,11 +333,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1747383427, - "narHash": "sha256-l7NPb4CiGfBS5VEwIsqThLlGrTRysxb+BMOgBJkizTk=", + "lastModified": 1749521131, + "narHash": "sha256-ezZ15tLA2L+rmtn39dKLFW/UM2xlksC61V12blulpjE=", "owner": "nix-community", "repo": "nix-vscode-extensions", - "rev": "84fa86a820a365b12d7bbae3556ad737f7091af3", + "rev": "299b2aa650d32310153746135b6a84a6c4de9c21", "type": "github" }, "original": { @@ -280,27 +364,27 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1747209494, - "narHash": "sha256-fLise+ys+bpyjuUUkbwqo5W/UyIELvRz9lPBPoB0fbM=", + "lastModified": 1749237914, + "narHash": "sha256-N5waoqWt8aMr/MykZjSErOokYH6rOsMMXu3UOVH5kiw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5d736263df906c5da72ab0f372427814de2f52f8", + "rev": "70c74b02eac46f4e4aa071e45a6189ce0f6d9265", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-24.11", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_2": { "locked": { - "lastModified": 1747179050, - "narHash": "sha256-qhFMmDkeJX9KJwr5H32f1r7Prs7XbQWtO0h3V0a0rFY=", + "lastModified": 1749285348, + "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "adaa24fbf46737f3f1b5497bf64bae750f82942e", + "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", "type": "github" }, "original": { @@ -310,13 +394,37 @@ "type": "github" } }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "denix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1746537231, + "narHash": "sha256-Wb2xeSyOsCoTCTj7LOoD6cdKLEROyFAArnYoS+noCWo=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "fa466640195d38ec97cf0493d6d6882bc4d14969", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { + "denix": "denix", "home-manager": "home-manager", "iosevka-solai": "iosevka-solai", "lix-module": "lix-module", "niri-flake": "niri-flake", - "nix-darwin": "nix-darwin", + "nix-darwin": "nix-darwin_2", "nix-index-database": "nix-index-database", "nix-vscode-extensions": "nix-vscode-extensions", "nixpkgs": "nixpkgs_2" @@ -387,11 +495,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1747111562, - "narHash": "sha256-GAqhWoxaBIk0tgoecZPa8gTHDHxNc0JtlwWHZN2iOOo=", + "lastModified": 1749315541, + "narHash": "sha256-bEik1BfVOFnWvtOrcOHluos/edJ8f+G2y1QySbt/0Ak=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "ec9ff64c1e0cbec42710b580b7c0f759b1694e72", + "rev": "da2ecb5be816de35e2efe23a408a1c49fe8b11ba", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index caf6ae2..fff827f 100644 --- a/flake.nix +++ b/flake.nix @@ -34,6 +34,12 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + denix = { + url = "github:yunfachi/denix"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; + # ags = { # url = "github:Aylur/ags"; # inputs.nixpkgs.follows = "nixpkgs"; @@ -42,6 +48,7 @@ outputs = { # ags, + denix, home-manager, lix-module, niri-flake, @@ -54,6 +61,15 @@ system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; # agsPkgs = ags.packages.${system}; + mkConfigurations = moduleSystem: + denix.lib.configurations (let + homeManagerUser = "ovy"; + in { + inherit moduleSystem homeManagerUser; + + paths = [./denix/hosts ./denix/modules]; #./denix/rices]; + specialArgs = {inherit inputs moduleSystem homeManagerUser;}; + }); in { packages.${system} = { iconifydl = pkgs.callPackage ./pkgs/iconifydl.nix {}; @@ -70,56 +86,19 @@ # buildInputs = [agsPkgs.agsFull agsPkgs.io agsPkgs.apps agsPkgs.tray self.packages.${system}.iconifydl]; # }; - nixosConfigurations.wallsocket = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - specialArgs = {inherit inputs;}; - modules = [ - ./nixos/wallsocket/configuration.nix - niri-flake.nixosModules.niri - nix-index-database.nixosModules.nix-index - lix-module.nixosModules.default - home-manager.nixosModules.home-manager - { - programs.command-not-found.enable = false; - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - backupFileExtension = "backup"; - users.ovy = import ./home/wallsocket.nix; - extraSpecialArgs = {inherit inputs;}; - }; - } - ]; - }; + nixosConfigurations = mkConfigurations "nixos"; - darwinConfigurations.shimmer = nix-darwin.lib.darwinSystem { - specialArgs = {inherit inputs;}; - modules = [ - ./darwin/shimmer/configuration.nix - home-manager.darwinModules.home-manager - { - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - backupFileExtension = "backup"; - users.ovy = import ./home/shimmer.nix; - extraSpecialArgs = {inherit inputs;}; - }; - } - ]; - }; - - nixosModules.serverHomeManager = {...}: { - imports = [home-manager.nixosModules.home-manager]; + # nixosModules.serverHomeManager = {...}: { + # imports = [home-manager.nixosModules.home-manager]; - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - backupFileExtension = "backup"; - users.ovy = import ./home/server.nix; - extraSpecialArgs = {inherit inputs;}; - }; - }; + # home-manager = { + # useGlobalPkgs = true; + # useUserPackages = true; + # backupFileExtension = "backup"; + # users.ovy = import ./home/server.nix; + # extraSpecialArgs = {inherit inputs;}; + # }; + # }; formatter = { aarch64-linux = nixpkgs.legacyPackages.aarch64-linux.alejandra; diff --git a/home/darwin/configs.nix b/home/darwin/configs.nix deleted file mode 100644 index 88b6ed0..0000000 --- a/home/darwin/configs.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - xdg.configFile = { - # TODO: replace with the full karabiner config instead of needing to manually set complex mods - "karabiner/assets/complex_modifications/keybind-helpers.json".source = ../../files/karabiner/keybind-helpers.json; - }; -} diff --git a/home/desktop/apps.nix b/home/desktop/apps.nix deleted file mode 100644 index 52407a1..0000000 --- a/home/desktop/apps.nix +++ /dev/null @@ -1,78 +0,0 @@ -{ - config, - pkgs, - ... -}: { - home.packages = with pkgs; [ - alejandra - audacity - blender - btop - # bottles - bruno - # davinci-resolve - distrobox - # feishin - gajim - glaxnimate - # godot_4 - handbrake - heynote - klog-time-tracker - libreoffice - losslesscut-bin - lunacy - lutris - # mixxx - obs-studio - obsidian - oversteer - p7zip - picard - pinta - piper - podman-tui - # plasticity - prismlauncher - qbittorrent - qimgv - slack - syncthingtray - vesktop - vlc - vorta - winetricks - # wineWowPackages.full - # (wineWowPackages.full.overrideAttrs (finalAttrs: previousAttrs: { - # src = pkgs.fetchFromGitLab { - # owner = "ElementalWarrior"; - # repo = "wine"; - # rev = "d0fe9b9ab64d7e310b2b7afd135369e49758b24b"; - # domain = "gitlab.winehq.org"; - # hash = "sha256-xa5xZQxlY5MH2jcdKIOs7zd3y/1UoxQhe/L4NoMyCqw="; - # }; - # })) - yt-dlp - yubioath-flutter - ]; - - services.owncloud-client.enable = true; - - programs.mangohud = { - enable = true; - settings = { - cpu_temp = true; - cpu_mhz = true; - cpu_power = true; - core_load = true; - gpu_core_clock = true; - gpu_temp = true; - gpu_power = true; - gpu_fan = true; - gpu_voltage = true; - vram = true; - ram = true; - }; - }; - home.sessionVariables.MANGOHUD_CONFIGFILE = "${config.xdg.configHome}/MangoHud/MangoHud.conf"; -} diff --git a/home/modules/niri.nix b/home/modules/niri.nix deleted file mode 100644 index 09d60b2..0000000 --- a/home/modules/niri.nix +++ /dev/null @@ -1,238 +0,0 @@ -{ - config, - pkgs, - ... -}: { - # programs.niri.enable = true; - programs.niri.package = pkgs.niri; - - programs.niri.settings = { - # input.keyboard.xkb = { - # layout = "us"; - # variant = "colemak"; - # }; - - # TODO: maybe explicitly define outputs - - input.mouse = { - natural-scroll = false; - accel-profile = "flat"; - }; - - input.touchpad = { - enable = true; - tap = true; - natural-scroll = true; - scroll-factor = 0.3; - accel-profile = "adaptive"; - tap-button-map = "left-right-middle"; - scroll-method = "two-finger"; - }; - - input.focus-follows-mouse = { - enable = true; - max-scroll-amount = "0%"; - }; - - cursor.size = 32; - - prefer-no-csd = true; - - spawn-at-startup = [ - {command = ["xwayland-satellite"];} - # {command = ["hyprpaper"];} - {command = ["kitty"];} - ]; - - environment = { - DISPLAY = ":0"; - GDK_BACKEND = "wayland"; - }; - - layout = { - struts = let - x = 16; - y = 16; - in { - top = y; - bottom = y; - left = x; - right = x; - }; - - focus-ring = { - enable = true; - width = 2; - active.gradient = { - angle = 45; - from = "rgb(255 0 255)"; - to = "rgb(0 255 255)"; - relative-to = "workspace-view"; - }; - }; - - shadow.enable = true; - }; - - window-rules = [ - { - geometry-corner-radius = let - r = 8.0; - in { - top-left = r; - top-right = r; - bottom-left = r; - bottom-right = r; - }; - clip-to-geometry = true; - draw-border-with-background = false; - } - { - matches = [{app-id = "^1Password$";}]; - open-floating = true; - } - ]; - - # TODO: create custom keybinds on layer 1 so I don't need to use a fuckton of fingers - binds = with config.lib.niri.actions; { - # Misc/meta - "Mod+Shift+Slash".action = show-hotkey-overlay; - "Mod+Shift+E".action = quit; - "Mod+Q".action = close-window; - - # Quick access - "Mod+Grave".action = spawn "kitty"; - "Mod+B".action = spawn "vivaldi"; # TODO: spawn on startup instead - "Mod+R".action = spawn "fuzzel"; - - "Print".action = screenshot; - # "Ctrl+Print".action = screenshot-screen; - "Alt+Print".action = screenshot-window; - - # Resizing - "Mod+F".action = maximize-column; - "Mod+Shift+F".action = fullscreen-window; - "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+R".action = switch-preset-column-width; - "Mod+Shift+R".action = reset-window-height; - "Mod+C".action = center-column; - - # Focus windows - "Mod+Left".action = focus-column-left; - "Mod+Right".action = focus-column-right; - "Mod+Up".action = focus-window-or-workspace-up; - "Mod+Down".action = focus-window-or-workspace-down; - "Mod+Home".action = focus-column-first; - "Mod+End".action = focus-column-last; - - # Move windows - "Mod+Shift+Left".action = move-column-left; - "Mod+Shift+Right".action = move-column-right; - "Mod+Shift+Up".action = move-window-up-or-to-workspace-up; - "Mod+Shift+Down".action = move-window-down-or-to-workspace-down; - "Mod+Shift+Home".action = move-column-to-first; - "Mod+Shift+End".action = move-column-to-last; - - "Mod+Comma".action = consume-window-into-column; - "Mod+Period".action = expel-window-from-column; - - # Workspaces - "Mod+Page_Down".action = focus-workspace-down; - "Mod+Page_Up".action = focus-workspace-up; - "Mod+Ctrl+Page_Down".action = move-column-to-workspace-down; - "Mod+Ctrl+Page_Up".action = move-column-to-workspace-up; - "Mod+Shift+Page_Down".action = move-workspace-down; - "Mod+Shift+Page_Up".action = move-workspace-up; - "Mod+Tab".action = focus-workspace-previous; - - # TODO: Screens - # "Mod+Shift+Left".action = focus-monitor-left; - # "Mod+Shift+Down".action = focus-monitor-down; - # "Mod+Shift+Up".action = focus-monitor-up; - # "Mod+Shift+Right".action = focus-monitor-right; - # "Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left; - # "Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down; - # "Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up; - # "Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right; - - # Scrolling through workspaces - # `cooldown-ms` used to not go through workspaces really fast - "Mod+WheelScrollDown" = { - cooldown-ms = 150; - action = focus-workspace-down; - }; - "Mod+WheelScrollUp" = { - cooldown-ms = 150; - action = focus-workspace-up; - }; - "Mod+Ctrl+WheelScrollDown" = { - cooldown-ms = 150; - action = move-column-to-workspace-down; - }; - "Mod+Ctrl+WheelScrollUp" = { - cooldown-ms = 150; - action = move-column-to-workspace-up; - }; - - # Scrolling through windows - "Mod+WheelScrollRight".action = focus-column-right; - "Mod+WheelScrollLeft".action = focus-column-left; - "Mod+Ctrl+WheelScrollRight".action = move-column-right; - "Mod+Ctrl+WheelScrollLeft".action = move-column-left; - # Holding shift while scrolling usually does horizontal, so do the same here. - "Mod+Shift+WheelScrollDown".action = focus-column-right; - "Mod+Shift+WheelScrollUp".action = focus-column-left; - "Mod+Ctrl+Shift+WheelScrollDown".action = move-column-right; - "Mod+Ctrl+Shift+WheelScrollUp".action = move-column-left; - }; - }; - - programs.wlogout = { - enable = true; - layout = [ - { - "label" = "lock"; - "action" = "loginctl lock-session"; - "text" = "Lock"; - "keybind" = "l"; - } - { - "label" = "hibernate"; - "action" = "systemctl hibernate"; - "text" = "Hibernate"; - "keybind" = "h"; - } - { - "label" = "logout"; - "action" = "loginctl terminate-user $USER"; - "text" = "Logout"; - "keybind" = "e"; - } - { - "label" = "shutdown"; - "action" = "systemctl poweroff"; - "text" = "Shutdown"; - "keybind" = "s"; - } - { - "label" = "suspend"; - "action" = "systemctl suspend"; - "text" = "Suspend"; - "keybind" = "u"; - } - { - "label" = "reboot"; - "action" = "systemctl reboot"; - "text" = "Reboot"; - "keybind" = "r"; - } - ]; - # https://github.com/ArtsyMacaw/wlogout/blob/master/style.css - # style = '''' - }; - - programs.fuzzel = {}; -} diff --git a/home/modules/ssh.nix b/home/modules/ssh.nix deleted file mode 100644 index 12fa39d..0000000 --- a/home/modules/ssh.nix +++ /dev/null @@ -1,22 +0,0 @@ -{lib, ...}: let - _1passwordAgent = options: - lib.hm.dag.entryBefore ["*"] ({ - extraOptions.IdentityAgent = "~/.1password/agent.sock"; - extraOptions.IdentitiesOnly = "no"; - } - // options); -in { - programs.ssh = { - enable = true; - matchBlocks = { - "*" = { - identitiesOnly = true; - identityFile = "~/.ssh/id_ed25519_sk_rk"; - user = "ovy"; - }; - # OpenWrt - "192.168.1.1" = _1passwordAgent {user = "root";}; - "*.repo.borgbase.com" = _1passwordAgent {}; - }; - }; -} diff --git a/home/modules/xdg.nix b/home/modules/xdg.nix deleted file mode 100644 index d2c8685..0000000 --- a/home/modules/xdg.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - pkgs, - ... -}: let - vivalarc = pkgs.fetchFromGitHub { - owner = "tovifun"; - repo = "VivalArc"; - rev = "7ee09e9efb46c1524a43f0cb6763b9750db6e81c"; - hash = "sha256-xYSxB8KjcbeUDEdbA2AJ9FeQC1TkqyXdB9rTMMSm+FA="; - }; -in { - xdg.desktopEntries.davinci-resolve = { - name = "Davinci Resolve"; - exec = "davinci-resolve"; - categories = ["AudioVideo" "AudioVideoEditing" "Video" "Graphics"]; - comment = "Professional video editing, color, effects and audio post-processing"; - genericName = "Video Editor"; - type = "Application"; - settings.Version = "1.4"; - }; - - xdg.dataFile."vivalarc".source = vivalarc; -} diff --git a/home/programs/common-cli.nix b/home/programs/common-cli.nix deleted file mode 100644 index 56a95a9..0000000 --- a/home/programs/common-cli.nix +++ /dev/null @@ -1,113 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: { - # Core CLI tools - home.packages = with pkgs; [ - curlie - du-dust - duf - fd - jq - moar - nix-your-shell - ripgrep - ]; - - programs.aria2.enable = true; - - programs.bat = { - enable = true; - config = { - theme = "DarkNeon"; - italic-text = "always"; - }; - }; - - # Pager & manpages options - home.sessionVariables = { - PAGER = "moar"; - MOAR = "--no-linenumbers"; - MANPAGER = "sh -c 'col -bx | bat -l man -p'"; - MANROFFOPT = "-c"; - }; - - programs.direnv = { - enable = true; - nix-direnv.enable = true; - config.whitelist.prefix = [ - "${config.home.homeDirectory}/Projects/bots-gg" - "${config.home.homeDirectory}/Projects/dijit" - "${config.home.homeDirectory}/Projects/personal" - "${config.home.homeDirectory}/Projects/work" - ]; - }; - - # TODO: decide on this vs lsd? - programs.eza.enable = true; - - # TODO - # Investigate preview stuff as default command - # https://github.com/kidonng/preview.fish - # Explore fzf search modes - programs.fzf = { - enable = true; - enableFishIntegration = false; - defaultOptions = [ - "--ansi" - "--cycle" - "--layout=reverse" - "--border" - "--height=90%" - "--marker=\"*\"" - "--preview 'bat --color=always --style=header,numbers --line-range :300 {}'" - # I usually use a vertical term so this is more practical. - # TODO: possible to dynamically change based on terminal dimensinns? - "--preview-window='bottom:50%:wrap'" - ]; - defaultCommand = "fd --color=always --type file --follow --hidden --exclude .git --exclude node_modules"; - }; - home.sessionVariables.FZF_CTRL_T_COMMAND = "fd --color=always --follow"; - - programs.micro = { - enable = true; - settings = { - clipboard = "external"; - hlsearch = true; - parsecursor = true; - scrollbar = true; - tabmovement = true; - tabsize = 2; - tabstospaces = true; - }; - }; - - programs.nix-index.enable = true; - - programs.tealdeer = { - enable = true; - settings = { - updates = { - auto_update = true; - }; - }; - }; - - programs.zellij = { - enable = true; - enableFishIntegration = false; - settings = { - mouse_mode = true; - theme = "catppuccin-mocha"; - ui.pane_frames.rounded_corners = true; - ui.pane_frames.hide_session_name = true; - }; - }; - - programs.zoxide = { - enable = true; - enableFishIntegration = true; - }; -} diff --git a/home/programs/git.nix b/home/programs/git.nix deleted file mode 100644 index 748e25f..0000000 --- a/home/programs/git.nix +++ /dev/null @@ -1,70 +0,0 @@ -{ - pkgs, - lib, - ... -}: { - xdg.configFile."git/allowed_signers".source = ../../files/git/allowed_signers; - - programs.git = { - enable = true; - userName = "Ashlynne Mitchell"; - userEmail = "ovy@ovyerus.com"; - delta.enable = true; - - signing = { - signByDefault = true; - format = "ssh"; - key = "~/.ssh/id_ed25519_sk_rk"; - }; - - extraConfig = { - # TODO: custom pretty stuff? - blame.showEmail = true; - init.defaultBranch = "main"; - pull.rebase = true; - - log = { - abbrevCommit = true; - # TODO: `git log --oneline` looks silly with this. Need custom format. - showSignature = true; - # TODO: trial for a while and see if I like this. - date = "human"; - }; - - merge = { - # Try to avoid merge commits - ff = "only"; - # Really only useful on a well-managed team. Maybe eventually. - # verifySignatures = true; - }; - - push = { - autoSetupRemote = true; - followTags = true; - }; - - # Require explicit `drop` in interactive rebase - rebase.missingCommitsCheck = "error"; - rerere.enabled = true; - - status = { - relativePaths = false; - showStash = true; - }; - - gpg.ssh.allowedSignersFile = "~/.config/git/allowed_signers"; - # "gpg.ssh.program = "gfh-keygen"; - # "gpg.ssh.defaultKeyCommand = "gfh"; - }; - }; - - programs.gh = { - enable = true; - settings = { - git_protocol = "ssh"; - aliases = { - clone = "repo clone"; - }; - }; - }; -} diff --git a/home/programs/syncthing.nix b/home/programs/syncthing.nix deleted file mode 100644 index 12358c7..0000000 --- a/home/programs/syncthing.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: { - services.syncthing = { - enable = true; - tray.enable = true; - tray.package = pkgs.syncthingtray; - }; - - # Fix syncthingtray complaining about the tray not existing, because of the custom tray service above. - systemd.user.services.syncthingtray.Service.ExecStart = lib.mkForce "${config.services.syncthing.tray.package}/bin/${config.services.syncthing.tray.command} --wait"; -} diff --git a/home/programs/vscode.nix b/home/programs/vscode.nix deleted file mode 100644 index e5b8da3..0000000 --- a/home/programs/vscode.nix +++ /dev/null @@ -1,234 +0,0 @@ -{ - inputs, - pkgs, - ... -}: { - home.sessionVariables.EDITOR = "codium --wait"; - - programs.vscode = { - enable = true; - mutableExtensionsDir = false; - package = pkgs.vscodium; - - profiles.default = { - enableUpdateCheck = false; - enableExtensionUpdateCheck = false; - - extensions = let - vscode-extensions = inputs.nix-vscode-extensions.extensions.${pkgs.system}; - inherit (vscode-extensions) open-vsx vscode-marketplace; - in - with open-vsx; [ - kamadorueda.alejandra - astro-build.astro-vscode - matthewpi.caddyfile-support - raidou.calc - artlaman.chalice-icon-theme # TODO: i should fork this to add support for some newer files (tbd) - adpyke.codesnap - clinyong.vscode-css-modules - mkhl.direnv - leonardssh.vscord - ms-azuretools.vscode-docker - editorconfig.editorconfig - irongeek.vscode-env - pgourlain.erlang - usernamehw.errorlens - dbaeumer.vscode-eslint - tamasfe.even-better-toml - sleistner.vscode-fileutils - bmalehorn.vscode-fish - github.vscode-github-actions - eamodio.gitlens - # TODO: terraform (use opentofu instead) - ms-vscode.hexeditor - lokalise.i18n-ally - kisstkondoros.vscode-gutter-preview - ms-python.isort - bierner.markdown-preview-github-styles - unifiedjs.vscode-mdx - jnoortheen.nix-ide - nuxtr.nuxtr-vscode - vunguyentuan.vscode-postcss - esbenp.prettier-vscode - prisma.prisma - # TODO: use jedi instead of pylance - ms-python.python - ms-python.debugpy - mechatroner.rainbow-csv - medo64.render-crlf - stkb.rewrap - rust-lang.rust-analyzer - mrmlnc.vscode-scss - svelte.svelte-vscode - jock.svg - coolbear.systemd-unit-file - bradlc.vscode-tailwindcss - myriad-dreamin.tinymist - gruntfuggly.todo-tree - tomoki1207.pdf - zxh404.vscode-proto3 - styled-components.vscode-styled-components # TODO: don't really need this - vue.volar - wakatime.vscode-wakatime - redhat.vscode-yaml - arcanis.vscode-zipfs - vscode-marketplace.wraith13.background-phi-colors - vscode-marketplace.be5invis.theme-dolch - vscode-marketplace.fabiospampinato.vscode-diff - vscode-marketplace.jakebecker.elixir-ls - vscode-marketplace.zh9528.file-size - vscode-marketplace.vladdesv.vscode-klog - vscode-marketplace.dt.ghlink - vscode-marketplace.tyriar.lorem-ipsum - vscode-marketplace.phoenixframework.phoenix - vscode-marketplace.frigus02.vscode-sql-tagged-template-literals-syntax-only # TODO: alternative? - ]; - - userSettings = { - # Formatters - "editor.defaultFormatter" = "esbenp.prettier-vscode"; - "[elixir]"."editor.defaultFormatter" = "JakeBecker.elixir-ls"; - "[nix]"."editor.defaultFormatter" = "kamadorueda.alejandra"; - "[prisma]"."editor.defaultFormatter" = "Prisma.prisma"; - "[python]"."editor.defaultFormatter" = "ms-python.python"; - "[rust]"."editor.defaultFormatter" = "rust-lang.rust-analyzer"; - - # Sane defaults - "editor.tabSize" = 2; - "editor.insertSpaces" = true; - "breadcrumbs.enabled" = true; - "editor.wordWrap" = "off"; - "security.workspace.trust.enabled" = false; - "security.workspace.trust.untrustedFiles" = "open"; - "files.eol" = "\n"; - "workbench.editor.empty.hint" = "hidden"; - "comments.openView" = "never"; - "editor.minimap.enabled" = false; - "editor.stickyScroll.enabled" = true; - "workbench.layoutControl.enabled" = false; - "diffEditor.ignoreTrimWhitespace" = true; - "editor.acceptSuggestionOnEnter" = "off"; - "editor.formatOnSave" = true; - "editor.inlineSuggest.enabled" = true; - "editor.renderWhitespace" = "none"; - "editor.suggestSelection" = "first"; - "editor.tabCompletion" = "on"; - "emmet.triggerExpansionOnTab" = true; - "explorer.confirmDelete" = false; - "explorer.confirmDragAndDrop" = false; - "redhat.telemetry.enabled" = false; - "workbench.tips.enabled" = false; - "workbench.tree.indent" = 16; - "workbench.tree.renderIndentGuides" = "always"; - "editor.unicodeHighlight.ambiguousCharacters" = true; - "errorLens.enabledDiagnosticLevels" = ["error" "warning"]; - "editor.acceptSuggestionOnCommitCharacter" = false; - "files.watcherExclude" = { - "**/.git/**" = true; - "**/node_modules/*/**" = true; - }; - "search.exclude" = { - "**/node_modules" = true; - "**/bower_components" = true; - "**/*.code-search" = true; - "**/.yarn" = true; - }; - "terminal.integrated.commandsToSkipShell" = [ - "-workbench.action.quickOpenView" - "-workbench.action.quickOpen" - "-editor.action.clipboardCutAction" - ]; - # "prettier.prettierPath" = "prettierd"; - "prettier.proseWrap" = "always"; - - # Pretties - "workbench.colorTheme" = "Dolch"; - "workbench.iconTheme" = "chalice-icon-theme"; - "editor.fontFamily" = "'Iosevka Solai', Menlo, Monaco, 'Courier New', monospace"; - "editor.fontSize" = 16; - "terminal.integrated.fontFamily" = "'Iosevka Solai Term', Consolas, 'Courier New', monospace"; - "terminal.integrated.fontSize" = 14; - "terminal.integrated.scrollback" = 9999999999; - "editor.fontLigatures" = true; - "editor.cursorSmoothCaretAnimation" = "on"; - "editor.smoothScrolling" = true; - "zenMode.fullScreen" = false; - "zenMode.centerLayout" = false; - "zenMode.hideLineNumbers" = true; - - # No barfing rainbows over my UI pls - "backgroundPhiColors.baseColor" = "#FFFFFF"; - "backgroundPhiColors.bodySpacesEnabled" = false; - "backgroundPhiColors.indentErrorEnabled" = false; - "backgroundPhiColors.lineEnabled" = false; - "backgroundPhiColors.spacesAlpha" = 10; - "backgroundPhiColors.tokenActiveAlpha" = 30; - "editor.bracketPairColorization.enabled" = false; - - # Codesnap - "codesnap.containerPadding" = "2em"; - "codesnap.target" = "window"; - "codesnap.transparentBackground" = true; - "codesnap.boxShadow" = "none"; - "codesnap.showLineNumbers" = false; - "codesnap.showWindowControls" = false; - "codesnap.shutterAction" = "copy"; - "codesnap.roundedCorners" = true; - - # Git - "git.autorefresh" = true; - "git.autofetch" = false; - "git.autoStash" = true; - "git.mergeEditor" = false; - "git.confirmSync" = false; - "git.enableSmartCommit" = true; - "gitlens.advanced.messages" = { - "suppressLineUncommittedWarning" = true; - }; - "gitlens.hovers.currentLine.over" = "annotation"; - - # Nix - "nix.enableLanguageServer" = true; - "nix.serverPath" = "nil"; - "alejandra.program" = "alejandra"; - - # Elixir/erlang - "elixirLS.suggestSpecs" = false; - "elixirLS.fetchDeps" = false; - "elixirLS.mixEnv" = "dev"; - "elixir.credo.ignoreWarningMessages" = true; - - # Python - "python.analysis.typeCheckingMode" = "basic"; - - # JS - "debug.javascript.autoAttachFilter" = "onlyWithFlag"; - - # CSS - "files.associations"."*.css" = "tailwindcss"; - - # Misc - "yaml.format.proseWrap" = "always"; - "workbench.startupEditor" = "none"; - "remote.SSH.connectTimeout" = 30; - "remote.SSH.useLocalServer" = true; - "remote.SSH.path" = "/run/current-system/sw/bin/ssh"; - "extensions.ignoreRecommendations" = true; - "svg.preview.mode" = "svg"; - "vscord.status.problems.enabled" = false; - "vscord.status.state.text.editing" = "Working on {file_name}{file_extension}"; - "vscord.ignore.workspaces" = ["~/Work"]; - "typescript.updateImportsOnFileMove.enabled" = "never"; - "git.openRepositoryInParentFolders" = "never"; - "diffEditor.useInlineViewWhenSpaceIsLimited" = false; - "svelte.enable-ts-plugin" = true; - "gitlens.launchpad.indicator.enabled" = false; - "window.titleBarStyle" = "custom"; - "files.simpleDialog.enable" = true; - "window.dialogStyle" = "custom"; - - # Fuck off - }; - }; - }; -} diff --git a/home/server.nix b/home/server.nix deleted file mode 100644 index a30f3ea..0000000 --- a/home/server.nix +++ /dev/null @@ -1,10 +0,0 @@ -{...}: { - imports = [./programs/common-cli.nix ./programs/fish.nix]; - home.sessionVariables.EDITOR = "micro"; - - news.display = "silent"; - programs.home-manager.enable = true; - home.homeDirectory = "/home/ovy"; - home.username = "ovy"; - home.stateVersion = "23.05"; -} diff --git a/home/shimmer.nix b/home/shimmer.nix deleted file mode 100644 index 1063409..0000000 --- a/home/shimmer.nix +++ /dev/null @@ -1,18 +0,0 @@ -{lib, ...}: { - imports = [ - ./darwin/configs.nix - ./modules/ssh.nix - ./programs/common-cli.nix - ./programs/desktop-cli.nix - ./programs/fish.nix - ./programs/git.nix - ]; - - programs.ssh.includes = ["~/.orbstack/ssh/config"]; - - news.display = "silent"; - programs.home-manager.enable = true; - home.homeDirectory = lib.mkForce "/Users/ovy"; - home.username = "ovy"; - home.stateVersion = "23.05"; -} diff --git a/home/wallsocket.nix b/home/wallsocket.nix deleted file mode 100644 index 0aeaa50..0000000 --- a/home/wallsocket.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - pkgs, - inputs, - ... -}: { - imports = [ - ./desktop/apps.nix - ./modules/espanso.nix - ./modules/niri.nix - ./modules/ssh.nix - ./modules/xdg.nix - ./programs/browser.nix - ./programs/common-cli.nix - ./programs/desktop-cli.nix - ./programs/fish.nix - ./programs/git.nix - ./programs/kitty.nix - ./programs/syncthing.nix - ./programs/vscode.nix - ]; - - systemd.user.targets.tray = { - Unit = { - Description = "Home Manager System Tray"; - Requires = ["graphical-session-pre.target"]; - }; - }; - - # Temporary location for these - # home.packages = [pkgs.inotify-tools inputs.ags.packages.${pkgs.system}.default]; - - home.sessionVariables.DOCKER_HOST = "unix:///run/user/1000/podman/podman.sock"; - - news.display = "silent"; - programs.home-manager.enable = false; - home.homeDirectory = "/home/ovy"; - home.username = "ovy"; - home.stateVersion = "24.05"; -} diff --git a/hosts/wallsocket/default.nix b/hosts/wallsocket/default.nix new file mode 100644 index 0000000..3753f53 --- /dev/null +++ b/hosts/wallsocket/default.nix @@ -0,0 +1,4 @@ +{delib, ...}: +delib.host { + name = "wallsocket"; +} diff --git a/hosts/wallsocket/hardware.nix b/hosts/wallsocket/hardware.nix new file mode 100644 index 0000000..2ef71e3 --- /dev/null +++ b/hosts/wallsocket/hardware.nix @@ -0,0 +1,68 @@ +{ + delib, + lib, + ... +}: let + platform = "x86_64-linux"; + stateVersion = "24.05"; +in + delib.host { + name = "wallsocket"; + + homeManagerSystem = platform; + home.home.stateVersion = stateVersion; + + nixos = { + nixpkgs.hostPlatform = platform; + system.stateVersion = stateVersion; + + hardware.enableRedistributableFirmware = true; + hardware.cpu.amd.updateMicrocode = true; + + # Kernel + boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-amd"]; + boot.extraModulePackages = []; + + # Bootloader + boot.loader.systemd-boot.enable = true; + boot.loader.systemd-boot.configurationLimit = 10; + boot.loader.efi.canTouchEfiVariables = true; + + # Disks + fileSystems."/" = { + device = "/dev/disk/by-uuid/1b08f109-17e9-40f4-a7fd-6e5943ce7d5e"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/CF5D-B9DB"; + fsType = "vfat"; + options = ["fmask=0022" "dmask=0022"]; + }; + + fileSystems."/home" = { + device = "/dev/disk/by-uuid/31974b72-eca5-4758-bd66-63ae57c1b4b0"; + fsType = "ext4"; + }; + + fileSystems."/mnt/misc" = { + device = "/dev/disk/by-uuid/bbc7adf8-475a-4bec-843f-77d4b904c42e"; + fsType = "ext4"; + }; + + fileSystems."/mnt/games" = { + device = "/dev/disk/by-uuid/e61763de-753c-42f0-ba9b-5ac6b6ffdf08"; + fsType = "ext4"; + }; + + swapDevices = []; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + }; + } diff --git a/modules/1password.nix b/modules/1password.nix new file mode 100644 index 0000000..dd10d1c --- /dev/null +++ b/modules/1password.nix @@ -0,0 +1,37 @@ +{ + delib, + homeConfig, + ... +}: +delib.module { + name = "_1password"; + + options = delib.singleEnableOption true; + + nixos.ifEnabled = { + services.systembus-notify.enable = true; + programs._1password.enable = true; + programs._1password-gui = { + enable = true; + polkitPolicyOwners = ["ovy"]; # TODO: replace + }; + + environment.etc."1password/custom_allowed_browsers" = { + text = "vivaldi-bin"; + mode = "0755"; + }; + }; + + home.ifEnabled.programs.ssh.matchBlocks = let + _1passwordAgent = options: + homeConfig.lib.dag.entryBefore ["*"] ({ + extraOptions.IdentityAgent = "~/.1password/agent.sock"; + extraOptions.IdentitiesOnly = "no"; + } + // options); + in { + # OpenWrt + "192.168.1.1" = _1passwordAgent {user = "root";}; + "*.repo.borgbase.com" = _1passwordAgent {}; + }; +} diff --git a/modules/audio.nix b/modules/audio.nix new file mode 100644 index 0000000..0e9350a --- /dev/null +++ b/modules/audio.nix @@ -0,0 +1,20 @@ +{delib, ...}: +delib.module { + name = "audio"; + + options = delib.singleEnableOption true; + + nixos.ifEnabled = { + services.pulseaudio.enable = false; + security.rtkit.enable = true; + + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + #jack.enable = true; + }; + }; +} diff --git a/modules/bluetooth.nix b/modules/bluetooth.nix new file mode 100644 index 0000000..b12c734 --- /dev/null +++ b/modules/bluetooth.nix @@ -0,0 +1,26 @@ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "bluetooth"; + + options = delib.singleEnableOption true; + + nixos.ifEnabled = { + hardware.bluetooth.enable = true; + # TODO: determine if this actually affected me. Maybe should yeet. + hardware.bluetooth.settings = { + # Try and reduce latency from Xbox Series controllers + # https://atar-axis.github.io/xpadneo#high-latency-or-lost-button-events-with-bluetooth-le + LE = { + MinConnectionInterval = 7; + MaxConnectionInterval = 9; + ConnectionLatency = 0; + }; + }; + hardware.xpadneo.enable = true; + environment.systemPackages = [pkgs.kdePackages.bluedevil]; + }; +} diff --git a/modules/config/args.nix b/modules/config/args.nix new file mode 100644 index 0000000..db8663b --- /dev/null +++ b/modules/config/args.nix @@ -0,0 +1,30 @@ +{delib, ...}: +delib.module { + name = "args"; + + options.args = with delib; { + shared = attrsLegacyOption {}; + nixos = attrsLegacyOption {}; + home = attrsLegacyOption {}; + darwin = attrsLegacyOption {}; + }; + + nixos.always = {cfg, ...}: { + imports = [ + {_module.args = cfg.shared;} + {_module.args = cfg.nixos;} + ]; + }; + home.always = {cfg, ...}: { + imports = [ + {_module.args = cfg.shared;} + {_module.args = cfg.home;} + ]; + }; + darwin.always = {cfg, ...}: { + imports = [ + {_module.args = cfg.shared;} + {_module.args = cfg.darwin;} + ]; + }; +} diff --git a/modules/config/constants.nix b/modules/config/constants.nix new file mode 100644 index 0000000..06a1df8 --- /dev/null +++ b/modules/config/constants.nix @@ -0,0 +1,10 @@ +{delib, ...}: +delib.module { + name = "constants"; + + options.constants = with delib; { + username = readOnly (strOption "ovy"); + userfullname = readOnly (strOption "Ashlynne Mitchell"); + useremail = readOnly (strOption "ovy@ovyerus.com"); + }; +} diff --git a/modules/config/home.nix b/modules/config/home.nix new file mode 100644 index 0000000..1a1a892 --- /dev/null +++ b/modules/config/home.nix @@ -0,0 +1,26 @@ +{ + delib, + moduleSystem, + homeManagerUser, + config, + ... +}: +delib.module { + name = "home"; + + myconfig.always.args.shared.homeConfig = + if moduleSystem == "home" + then config + else config.home-manager.users.${homeManagerUser}; + + home.always = {myconfig, ...}: let + inherit (myconfig.constants) username; + in { + home = { + inherit username; + homeDirectory = "/home/${username}"; + }; + news.display = "silent"; + programs.home-manager.enable = false; + }; +} diff --git a/modules/config/hosts.nix b/modules/config/hosts.nix new file mode 100644 index 0000000..d689713 --- /dev/null +++ b/modules/config/hosts.nix @@ -0,0 +1,21 @@ +{delib, ...}: +delib.module { + name = "hosts"; + + options = with delib; let + host = { + options = hostSubmoduleOptions; + }; + in { + host = hostOption host; + hosts = hostsOption host; + }; + + myconfig.always = {myconfig, ...}: { + args.shared = {inherit (myconfig) host hosts;}; + }; + + home.always = {myconfig, ...}: { + assertions = delib.hostNamesAssertions myconfig.hosts; + }; +} diff --git a/modules/config/user.nix b/modules/config/user.nix new file mode 100644 index 0000000..8b320c5 --- /dev/null +++ b/modules/config/user.nix @@ -0,0 +1,21 @@ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "user"; + + nixos.always = {myconfig, ...}: let + inherit (myconfig.constants) username userfullname; + in { + users = { + users.${username} = { + isNormalUser = true; + description = userfullname; + extraGroups = ["wheel" "cdrom" "adbusers"]; + shell = pkgs.fish; + }; + }; + }; +} diff --git a/modules/devices.nix b/modules/devices.nix new file mode 100644 index 0000000..bbf4777 --- /dev/null +++ b/modules/devices.nix @@ -0,0 +1,20 @@ +{delib, ...}: +delib.module { + name = "devices"; + + nixos.always = { + programs.adb.enable = true; + + services = { + avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + fwupd.enable = true; + usbmuxd.enable = true; + pcscd.enable = true; + printing.enable = true; + }; + }; +} diff --git a/modules/fonts.nix b/modules/fonts.nix new file mode 100644 index 0000000..7046360 --- /dev/null +++ b/modules/fonts.nix @@ -0,0 +1,50 @@ +{ + delib, + inputs, + pkgs, + ... +}: +delib.module { + name = "fonts"; + + nixos.always = { + fonts = { + packages = [ + pkgs.ubuntu_font_family + pkgs.inter + inputs.iosevka-solai.packages.x86_64-linux.bin + ]; + + # TODO: i get a lot of weird error logs. See why + fontDir.enable = true; + enableDefaultPackages = true; + + fontconfig = { + defaultFonts = { + serif = ["Noto Serif"]; + sansSerif = ["Inter"]; + monospace = ["Iosevka Solai"]; + emoji = ["Noto Color Emoji"]; + }; + }; + }; + + environment.sessionVariables = { + FONTCONFIG_PATH = "${pkgs.fontconfig}/etc/fonts"; + FONTCONFIG_FILE = "${pkgs.fontconfig}/etc/fonts/fonts.conf"; + }; + + # Wait for Aetf/kmscon#75 to merge, and then look into manually updating the package to test. + # Potentially open a nixpkgs PR to do so? + + # services.kmscon = { + # enable = true; + # fonts = [ + # { + # name = "Iosevka Solai Term"; + # package = inputs.iosevka-solai.packages.x86_64-linux.bin-term; + # } + # ]; + # }; + }; +} diff --git a/modules/gaming.nix b/modules/gaming.nix new file mode 100644 index 0000000..e842bba --- /dev/null +++ b/modules/gaming.nix @@ -0,0 +1,41 @@ +{ + delib, + pkgs, + homeConfig, + ... +}: +delib.module { + name = "gaming"; + + nixos.always = { + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + localNetworkGameTransfers.openFirewall = true; + extraCompatPackages = [pkgs.proton-ge-bin]; + }; + + programs.gamescope.enable = true; + programs.gamemode.enable = true; + }; + + home.always = { + programs.mangohud = { + enable = true; + settings = { + cpu_temp = true; + cpu_mhz = true; + cpu_power = true; + core_load = true; + gpu_core_clock = true; + gpu_temp = true; + gpu_power = true; + gpu_fan = true; + gpu_voltage = true; + vram = true; + ram = true; + }; + }; + home.sessionVariables.MANGOHUD_CONFIGFILE = "${homeConfig.xdg.configHome}/MangoHud/MangoHud.conf"; + }; +} diff --git a/modules/graphics.nix b/modules/graphics.nix new file mode 100644 index 0000000..27ee38f --- /dev/null +++ b/modules/graphics.nix @@ -0,0 +1,28 @@ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "graphics"; + + options.graphics = with delib; { + enable = boolOption true; + }; + + nixos.ifEnabled = {cfg, ...}: { + hardware.graphics = { + enable = true; + enable32Bit = true; + }; + + environment.systemPackages = with pkgs; [amdgpu_top lact nvtopPackages.full]; + + systemd.services.lactd = { + description = "AMDGPU Control Daemon"; + enable = true; + serviceConfig.ExecStart = "${pkgs.lact}/bin/lact daemon"; + wantedBy = ["multi-user.target"]; + }; + }; +} diff --git a/modules/i18n.nix b/modules/i18n.nix new file mode 100644 index 0000000..bda2de7 --- /dev/null +++ b/modules/i18n.nix @@ -0,0 +1,21 @@ +{delib, ...}: +delib.module { + name = "i18n"; + + nixos.always = { + time.timeZone = "Australia/Melbourne"; + i18n.defaultLocale = "en_GB.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_AU.UTF-8"; + LC_IDENTIFICATION = "en_AU.UTF-8"; + LC_MEASUREMENT = "en_AU.UTF-8"; + LC_MONETARY = "en_AU.UTF-8"; + LC_NAME = "en_AU.UTF-8"; + LC_NUMERIC = "en_AU.UTF-8"; + LC_PAPER = "en_AU.UTF-8"; + LC_TELEPHONE = "en_AU.UTF-8"; + LC_TIME = "en_AU.UTF-8"; + }; + }; +} diff --git a/modules/logitech.nix b/modules/logitech.nix new file mode 100644 index 0000000..e17aded --- /dev/null +++ b/modules/logitech.nix @@ -0,0 +1,11 @@ +{delib, ...}: +delib.module { + name = "logitech"; + + options = delib.singleEnableOption true; + + nixos.ifEnabled = { + hardware.logitech.wireless.enable = true; + hardware.new-lg4ff.enable = true; + }; +} diff --git a/modules/memory.nix b/modules/memory.nix new file mode 100644 index 0000000..57cbc77 --- /dev/null +++ b/modules/memory.nix @@ -0,0 +1,11 @@ +{delib, ...}: +delib.module { + name = "memory"; + + nixos.always = { + services.earlyoom.enable = true; + services.earlyoom.enableNotifications = true; + zramSwap.enable = true; + zramSwap.algorithm = "zstd"; + }; +} diff --git a/modules/networking.nix b/modules/networking.nix new file mode 100644 index 0000000..e844045 --- /dev/null +++ b/modules/networking.nix @@ -0,0 +1,53 @@ +{ + delib, + host, + ... +}: +delib.module { + name = "networking"; + + options.networking = with delib; { + nameservers = listOfOption str ["1.1.1.1" "1.0.0.1"]; + hosts = attrsOfOption (listOf str) {}; + }; + + nixos.always = { + myconfig, + cfg, + ... + }: let + inherit (myconfig.constants) username; + in { + networking = { + hostName = host.name; + + firewall.enable = true; + networkmanager.enable = true; + + # dhcpcd.extraConfig = "nohook resolv.conf"; + # networkmanager.dns = "none"; + + inherit (cfg) hosts nameservers; + }; + + # TODO: necessary? + services.resolved = { + enable = true; + # dnssec = "true"; + domains = ["~."]; + fallbackDns = cfg.nameservers; + # dnsovertls = "trues"; + }; + + services.tailscale = { + enable = true; + openFirewall = true; + useRoutingFeatures = "client"; + }; + + # services.mullvad-vpn.enable = true; + # services.mullvad-vpn.package = pkgs.mullvad-vpn; + + users.users.${username}.extraGroups = ["networkmanager"]; + }; +} diff --git a/modules/nix.nix b/modules/nix.nix new file mode 100644 index 0000000..9bda91e --- /dev/null +++ b/modules/nix.nix @@ -0,0 +1,39 @@ +{ + delib, + inputs, + ... +}: let + shared.nix.settings = { + auto-optimise-store = true; + experimental-features = ["nix-command" "flakes"]; + trusted-users = ["root" "@wheel"]; + }; +in + delib.module { + name = "nix"; + + # TODO: double check home-manager options + home.always = shared; + nixos.always = + shared + // { + nix = { + gc = { + automatic = true; + options = "--delete-older-than 10d"; + dates = "weekly"; + }; + + nixPath = ["nixpkgs=${inputs.nixpkgs}"]; + + registry.nixpkgs.to = { + type = "path"; + path = inputs.nixpkgs; + narHash = inputs.nixpkgs.narHash; + }; + }; + + nixpkgs.config.allowUnfree = true; + system.tools.nixos-option.enable = false; + }; + } diff --git a/modules/nixpkgs.nix b/modules/nixpkgs.nix deleted file mode 100644 index 28f19a9..0000000 --- a/modules/nixpkgs.nix +++ /dev/null @@ -1,13 +0,0 @@ -{inputs, ...}: { - # Make sure that the `nixpkgs` reference on the CLI refers to the system - # nixpkgs so that it does not keep re-downloading the latest version every - # time I want to run a single package - nix.registry.nixpkgs.to = { - type = "path"; - path = inputs.nixpkgs; - narHash = inputs.nixpkgs.narHash; - }; - - nixpkgs.config.allowUnfree = true; - nix.nixPath = ["nixpkgs=${inputs.nixpkgs}"]; -} diff --git a/modules/ollama.nix b/modules/ollama.nix new file mode 100644 index 0000000..c31da76 --- /dev/null +++ b/modules/ollama.nix @@ -0,0 +1,10 @@ +{delib, ...}: +delib.module { + name = "ollama"; + + nixos.always.services.ollama = { + enable = true; + acceleration = "rocm"; + rocmOverrideGfx = "11.0.0"; + }; +} diff --git a/modules/packaging.nix b/modules/packaging.nix new file mode 100644 index 0000000..c4e151c --- /dev/null +++ b/modules/packaging.nix @@ -0,0 +1,13 @@ +{delib, ...}: +delib.module { + name = "packaging"; + + nixos.always = { + services.flatpak.enable = true; + + programs.appimage = { + enable = true; + binfmt = true; + }; + }; +} diff --git a/modules/plasma.nix b/modules/plasma.nix new file mode 100644 index 0000000..3c53055 --- /dev/null +++ b/modules/plasma.nix @@ -0,0 +1,43 @@ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "plasma"; + + options = delib.singleEnableOption true; + + nixos.ifEnabled = { + services.displayManager = { + enable = true; + defaultSession = "plasma"; + + sddm.enable = true; + sddm.wayland.enable = true; + + autoLogin = { + enable = true; + user = "ovy"; + }; + }; + + services.desktopManager.plasma6.enable = true; + + environment.plasma6.excludePackages = with pkgs.kdePackages; [ + elisa + gwenview + konsole + ]; + + qt = { + enable = true; + style = "kvantum"; + platformTheme = "kde"; + }; + + # environment.sessionVariables."NIXOS_OZONE_WL" = 1; + environment.sessionVariables."MOZ_ENABLE_WAYLAND" = 0; + environment.systemPackages = with pkgs; [adwaita-icon-theme kdePackages.kcalc kdePackages.partitionmanager kdePackages.kcolorchooser]; + }; +} diff --git a/modules/programs/bat.nix b/modules/programs/bat.nix new file mode 100644 index 0000000..65405db --- /dev/null +++ b/modules/programs/bat.nix @@ -0,0 +1,12 @@ +{delib, ...}: +delib.module { + name = "programs.bat"; + + home.always.programs.bat = { + enable = true; + config = { + theme = "DarkNeon"; + italic-text = "always"; + }; + }; +} diff --git a/home/programs/browser.nix b/modules/programs/chromium.nix similarity index 87% rename from home/programs/browser.nix rename to modules/programs/chromium.nix index 8b23a63..8ba6114 100644 --- a/home/programs/browser.nix +++ b/modules/programs/chromium.nix @@ -1,5 +1,14 @@ -{pkgs, ...}: { - programs.chromium = { +{ + delib, + pkgs, + ... +}: +delib.module { + name = "programs.chromium"; + + options = delib.singleEnableOption true; + + home.ifEnabled.programs.chromium = { enable = true; package = pkgs.vivaldi.overrideAttrs (finalAttrs: previousAttrs: { dontWrapQtApps = false; diff --git a/modules/programs/core-cli.nix b/modules/programs/core-cli.nix new file mode 100644 index 0000000..57577fe --- /dev/null +++ b/modules/programs/core-cli.nix @@ -0,0 +1,45 @@ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "programs.core-cli"; + + nixos.always = { + environment.systemPackages = with pkgs; [ + ffmpeg-full + fuzzel + git + nil + niri + openssh + p7zip + pciutils + solaar + sysstat + unar + wcurl + wget + wineWowPackages.full + ]; + + programs.fish.enable = true; + }; + + home.always = { + home.packages = with pkgs; [ + curlie + du-dust + duf + fd + jq + nix-your-shell + ripgrep + ]; + + programs.aria2.enable = true; + programs.eza.enable = true; + programs.nix-index.enable = true; + }; +} diff --git a/modules/programs/desktop-apps.nix b/modules/programs/desktop-apps.nix new file mode 100644 index 0000000..da49f5f --- /dev/null +++ b/modules/programs/desktop-apps.nix @@ -0,0 +1,52 @@ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "programs.desktop-apps"; + + home.always = { + home.packages = with pkgs; [ + alejandra + audacity + blender + btop # TODO: module & options + bruno + # davinci-resolve + # distrobox + gajim + glaxnimate + # godot_4 + handbrake + heynote + klog-time-tracker + libreoffice + losslesscut-bin + lunacy + lutris + # mixxx + obs-studio + obsidian + oversteer + p7zip + picard + pinta + piper + podman-tui + # plasticity + prismlauncher + qbittorrent + qimgv + slack + vesktop + vlc + vorta + winetricks + yt-dlp + yubioath-flutter + ]; + + services.owncloud-client.enable = true; + }; +} diff --git a/home/programs/desktop-cli.nix b/modules/programs/desktop-cli.nix similarity index 65% rename from home/programs/desktop-cli.nix rename to modules/programs/desktop-cli.nix index 609e7e0..aae4781 100644 --- a/home/programs/desktop-cli.nix +++ b/modules/programs/desktop-cli.nix @@ -1,6 +1,12 @@ -{pkgs, ...}: { - # Misc packages - home.packages = with pkgs; [ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "programs.desktop-cli"; + + home.always.home.packages = with pkgs; [ age-plugin-yubikey alejandra cachix diff --git a/modules/programs/direnv.nix b/modules/programs/direnv.nix new file mode 100644 index 0000000..6598662 --- /dev/null +++ b/modules/programs/direnv.nix @@ -0,0 +1,19 @@ +{ + delib, + homeConfig, + ... +}: +delib.module { + name = "programs.bat"; + + home.always.programs.direnv = { + enable = true; + nix-direnv.enable = true; + config.whitelist.prefix = [ + "${homeConfig.home.homeDirectory}/Projects/bots-gg" + "${homeConfig.home.homeDirectory}/Projects/dijit" + "${homeConfig.home.homeDirectory}/Projects/personal" + "${homeConfig.home.homeDirectory}/Projects/work" + ]; + }; +} diff --git a/home/modules/espanso.nix b/modules/programs/espanso.nix similarity index 60% rename from home/modules/espanso.nix rename to modules/programs/espanso.nix index 1964cdb..cc11489 100644 --- a/home/modules/espanso.nix +++ b/modules/programs/espanso.nix @@ -1,5 +1,12 @@ -{pkgs, ...}: { - services.espanso = { +{ + delib, + pkgs, + ... +}: +delib.module { + name = "programs.espanso"; + + home.always.services.espanso = { enable = true; package = pkgs.espanso-wayland; matches.base.matches = [ diff --git a/home/programs/fish.nix b/modules/programs/fish.nix similarity index 97% rename from home/programs/fish.nix rename to modules/programs/fish.nix index 7140ad8..3a2f90e 100644 --- a/home/programs/fish.nix +++ b/modules/programs/fish.nix @@ -1,7 +1,14 @@ -{pkgs, ...}: { +{ + delib, + pkgs, + ... +}: +delib.module { + name = "programs.fish"; + # TODO: custom fifc rules (nix shell, nix run, ...) # TODO: how to customise fifc pane - programs.fish = { + home.always.programs.fish = { enable = true; interactiveShellInit = '' set fish_greeting diff --git a/modules/programs/fzf.nix b/modules/programs/fzf.nix new file mode 100644 index 0000000..7f9a98d --- /dev/null +++ b/modules/programs/fzf.nix @@ -0,0 +1,31 @@ +{delib, ...}: +delib.module { + name = "programs.fzf"; + + home.always = { + # TODO + # Investigate preview stuff as default command + # https://github.com/kidonng/preview.fish + # Explore fzf search modes + programs.fzf = { + enable = true; + enableFishIntegration = false; + defaultOptions = [ + "--ansi" + "--cycle" + "--layout=reverse" + "--border" + "--height=90%" + "--marker=\"*\"" + "--preview 'bat --color=always --style=header,numbers --line-range :300 {}'" + # I usually use a vertical term so this is more practical. + # TODO: possible to dynamically change based on terminal dimensinns? + "--preview-window='bottom:50%:wrap'" + ]; + # TODO: only if fd config is enabled + defaultCommand = "fd --color=always --type file --follow --hidden --exclude .git --exclude node_modules"; + }; + + home.sessionVariables.FZF_CTRL_T_COMMAND = "fd --color=always --follow"; + }; +} diff --git a/modules/programs/git.nix b/modules/programs/git.nix new file mode 100644 index 0000000..278a5b3 --- /dev/null +++ b/modules/programs/git.nix @@ -0,0 +1,73 @@ +{delib, ...}: +delib.module { + name = "programs.git"; + + home.always = {myconfig, ...}: let + inherit (myconfig.constants) userfullname useremail; + in { + xdg.configFile."git/allowed_signers".source = ../../../files/git/allowed_signers; + + programs.git = { + enable = true; + userName = userfullname; + userEmail = useremail; + delta.enable = true; + + signing = { + signByDefault = true; + format = "ssh"; + key = "~/.ssh/id_ed25519_sk_rk"; + }; + + extraConfig = { + # TODO: custom pretty stuff? + blame.showEmail = true; + init.defaultBranch = "main"; + pull.rebase = true; + + log = { + abbrevCommit = true; + # TODO: `git log --oneline` looks silly with this. Need custom format. + showSignature = true; + # TODO: trial for a while and see if I like this. + date = "human"; + }; + + merge = { + # Try to avoid merge commits + ff = "only"; + # Really only useful on a well-managed team. Maybe eventually. + # verifySignatures = true; + }; + + push = { + autoSetupRemote = true; + followTags = true; + }; + + # Require explicit `drop` in interactive rebase + rebase.missingCommitsCheck = "error"; + rerere.enabled = true; + + status = { + relativePaths = false; + showStash = true; + }; + + gpg.ssh.allowedSignersFile = "~/.config/git/allowed_signers"; + # "gpg.ssh.program = "gfh-keygen"; + # "gpg.ssh.defaultKeyCommand = "gfh"; + }; + }; + + programs.gh = { + enable = true; + settings = { + git_protocol = "ssh"; + aliases = { + clone = "repo clone"; + }; + }; + }; + }; +} diff --git a/home/programs/kitty.nix b/modules/programs/kitty.nix similarity index 88% rename from home/programs/kitty.nix rename to modules/programs/kitty.nix index cde9f04..4c3ac65 100644 --- a/home/programs/kitty.nix +++ b/modules/programs/kitty.nix @@ -1,5 +1,10 @@ -{ - programs.kitty = { +{delib, ...}: +delib.module { + name = "programs.kitty"; + + options = delib.singleEnableOption true; + + home.ifEnabled.programs.kitty = { enable = true; font.name = "Iosevka Solai"; font.size = 12; diff --git a/modules/programs/micro.nix b/modules/programs/micro.nix new file mode 100644 index 0000000..ddb306d --- /dev/null +++ b/modules/programs/micro.nix @@ -0,0 +1,17 @@ +{delib, ...}: +delib.module { + name = "programs.micro"; + + home.always.programs.micro = { + enable = true; + settings = { + clipboard = "external"; + hlsearch = true; + parsecursor = true; + scrollbar = true; + tabmovement = true; + tabsize = 2; + tabstospaces = true; + }; + }; +} diff --git a/modules/programs/pager.nix b/modules/programs/pager.nix new file mode 100644 index 0000000..653803f --- /dev/null +++ b/modules/programs/pager.nix @@ -0,0 +1,19 @@ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "programs.pager"; + + # TODO: read docs and experiment + home.always = { + home.packages = [pkgs.moar]; + home.sessionVariables = { + PAGER = "moar"; + MOAR = "--no-linenumbers"; + MANPAGER = "sh -c 'col -bx | bat -l man -p'"; + MANROFFOPT = "-c"; + }; + }; +} diff --git a/modules/programs/ssh.nix b/modules/programs/ssh.nix new file mode 100644 index 0000000..2856f6d --- /dev/null +++ b/modules/programs/ssh.nix @@ -0,0 +1,18 @@ +{delib, ...}: +delib.module { + name = "programs.ssh"; + + home.always.programs.ssh = { + enable = true; + matchBlocks = { + "*" = { + identitiesOnly = true; + identityFile = "~/.ssh/id_ed25519_sk_rk"; + user = "ovy"; + }; + }; + + # TODO: if darwin + # programs.ssh.includes = ["~/.orbstack/ssh/config"]; + }; +} diff --git a/modules/programs/syncthing.nix b/modules/programs/syncthing.nix new file mode 100644 index 0000000..fedeae6 --- /dev/null +++ b/modules/programs/syncthing.nix @@ -0,0 +1,24 @@ +{ + delib, + lib, + homeConfig, + pkgs, + ... +}: +delib.module { + name = "programs.syncthing"; + + options = delib.singleEnableOption true; + + home.ifEnabled = { + services.syncthing = { + enable = true; + tray.enable = true; + tray.package = pkgs.syncthingtray; + }; + + # Fix syncthingtray complaining about the tray not existing, because of the custom tray service above. + systemd.user.services.syncthingtray.Service.ExecStart = + lib.mkForce "${homeConfig.services.syncthing.tray.package}/bin/${homeConfig.services.syncthing.tray.command} --wait"; + }; +} diff --git a/modules/programs/tldr.nix b/modules/programs/tldr.nix new file mode 100644 index 0000000..c20e042 --- /dev/null +++ b/modules/programs/tldr.nix @@ -0,0 +1,13 @@ +{delib, ...}: +delib.module { + name = "programs.tldr"; + + home.always.programs.tealdeer = { + enable = true; + settings = { + updates = { + auto_update = true; + }; + }; + }; +} diff --git a/modules/programs/vscode.nix b/modules/programs/vscode.nix new file mode 100644 index 0000000..509ec70 --- /dev/null +++ b/modules/programs/vscode.nix @@ -0,0 +1,240 @@ +{ + delib, + inputs, + pkgs, + ... +}: +delib.module { + name = "programs.vscode"; + + options = delib.singleEnableOption true; + + home.ifEnabled = { + home.sessionVariables.EDITOR = "codium --wait"; + + programs.vscode = { + enable = true; + mutableExtensionsDir = false; + package = pkgs.vscodium; + + profiles.default = { + enableUpdateCheck = false; + enableExtensionUpdateCheck = false; + + extensions = let + vscode-extensions = inputs.nix-vscode-extensions.extensions.${pkgs.system}; + inherit (vscode-extensions) open-vsx vscode-marketplace; + in + with open-vsx; [ + kamadorueda.alejandra + astro-build.astro-vscode + matthewpi.caddyfile-support + raidou.calc + artlaman.chalice-icon-theme # TODO: i should fork this to add support for some newer files (tbd) + adpyke.codesnap + clinyong.vscode-css-modules + mkhl.direnv + leonardssh.vscord + ms-azuretools.vscode-docker + editorconfig.editorconfig + irongeek.vscode-env + pgourlain.erlang + usernamehw.errorlens + dbaeumer.vscode-eslint + tamasfe.even-better-toml + sleistner.vscode-fileutils + bmalehorn.vscode-fish + github.vscode-github-actions + eamodio.gitlens + # TODO: terraform (use opentofu instead) + ms-vscode.hexeditor + lokalise.i18n-ally + kisstkondoros.vscode-gutter-preview + ms-python.isort + bierner.markdown-preview-github-styles + unifiedjs.vscode-mdx + jnoortheen.nix-ide + nuxtr.nuxtr-vscode + vunguyentuan.vscode-postcss + esbenp.prettier-vscode + prisma.prisma + # TODO: use jedi instead of pylance + ms-python.python + ms-python.debugpy + mechatroner.rainbow-csv + medo64.render-crlf + stkb.rewrap + rust-lang.rust-analyzer + mrmlnc.vscode-scss + svelte.svelte-vscode + jock.svg + coolbear.systemd-unit-file + bradlc.vscode-tailwindcss + myriad-dreamin.tinymist + gruntfuggly.todo-tree + tomoki1207.pdf + zxh404.vscode-proto3 + styled-components.vscode-styled-components # TODO: don't really need this + vue.volar + wakatime.vscode-wakatime + redhat.vscode-yaml + arcanis.vscode-zipfs + vscode-marketplace.wraith13.background-phi-colors + vscode-marketplace.be5invis.theme-dolch + vscode-marketplace.fabiospampinato.vscode-diff + vscode-marketplace.jakebecker.elixir-ls + vscode-marketplace.zh9528.file-size + vscode-marketplace.vladdesv.vscode-klog + vscode-marketplace.dt.ghlink + vscode-marketplace.tyriar.lorem-ipsum + vscode-marketplace.phoenixframework.phoenix + vscode-marketplace.frigus02.vscode-sql-tagged-template-literals-syntax-only # TODO: alternative? + ]; + + userSettings = { + # Formatters + "editor.defaultFormatter" = "esbenp.prettier-vscode"; + "[elixir]"."editor.defaultFormatter" = "JakeBecker.elixir-ls"; + "[nix]"."editor.defaultFormatter" = "kamadorueda.alejandra"; + "[prisma]"."editor.defaultFormatter" = "Prisma.prisma"; + "[python]"."editor.defaultFormatter" = "ms-python.python"; + "[rust]"."editor.defaultFormatter" = "rust-lang.rust-analyzer"; + + # Sane defaults + "editor.tabSize" = 2; + "editor.insertSpaces" = true; + "breadcrumbs.enabled" = true; + "editor.wordWrap" = "off"; + "security.workspace.trust.enabled" = false; + "security.workspace.trust.untrustedFiles" = "open"; + "files.eol" = "\n"; + "workbench.editor.empty.hint" = "hidden"; + "comments.openView" = "never"; + "editor.minimap.enabled" = false; + "editor.stickyScroll.enabled" = true; + "workbench.layoutControl.enabled" = false; + "diffEditor.ignoreTrimWhitespace" = true; + "editor.acceptSuggestionOnEnter" = "off"; + "editor.formatOnSave" = true; + "editor.inlineSuggest.enabled" = true; + "editor.renderWhitespace" = "none"; + "editor.suggestSelection" = "first"; + "editor.tabCompletion" = "on"; + "emmet.triggerExpansionOnTab" = true; + "explorer.confirmDelete" = false; + "explorer.confirmDragAndDrop" = false; + "redhat.telemetry.enabled" = false; + "workbench.tips.enabled" = false; + "workbench.tree.indent" = 16; + "workbench.tree.renderIndentGuides" = "always"; + "editor.unicodeHighlight.ambiguousCharacters" = true; + "errorLens.enabledDiagnosticLevels" = ["error" "warning"]; + "editor.acceptSuggestionOnCommitCharacter" = false; + "files.watcherExclude" = { + "**/.git/**" = true; + "**/node_modules/*/**" = true; + }; + "search.exclude" = { + "**/node_modules" = true; + "**/bower_components" = true; + "**/*.code-search" = true; + "**/.yarn" = true; + }; + "terminal.integrated.commandsToSkipShell" = [ + "-workbench.action.quickOpenView" + "-workbench.action.quickOpen" + "-editor.action.clipboardCutAction" + ]; + # "prettier.prettierPath" = "prettierd"; + "prettier.proseWrap" = "always"; + + # Pretties + "workbench.colorTheme" = "Dolch"; + "workbench.iconTheme" = "chalice-icon-theme"; + "editor.fontFamily" = "'Iosevka Solai', Menlo, Monaco, 'Courier New', monospace"; + "editor.fontSize" = 16; + "terminal.integrated.fontFamily" = "'Iosevka Solai Term', Consolas, 'Courier New', monospace"; + "terminal.integrated.fontSize" = 14; + "terminal.integrated.scrollback" = 9999999999; + "editor.fontLigatures" = true; + "editor.cursorSmoothCaretAnimation" = "on"; + "editor.smoothScrolling" = true; + "zenMode.fullScreen" = false; + "zenMode.centerLayout" = false; + "zenMode.hideLineNumbers" = true; + + # No barfing rainbows over my UI pls + "backgroundPhiColors.baseColor" = "#FFFFFF"; + "backgroundPhiColors.bodySpacesEnabled" = false; + "backgroundPhiColors.indentErrorEnabled" = false; + "backgroundPhiColors.lineEnabled" = false; + "backgroundPhiColors.spacesAlpha" = 10; + "backgroundPhiColors.tokenActiveAlpha" = 30; + "editor.bracketPairColorization.enabled" = false; + + # Codesnap + "codesnap.containerPadding" = "2em"; + "codesnap.target" = "window"; + "codesnap.transparentBackground" = true; + "codesnap.boxShadow" = "none"; + "codesnap.showLineNumbers" = false; + "codesnap.showWindowControls" = false; + "codesnap.shutterAction" = "copy"; + "codesnap.roundedCorners" = true; + + # Git + "git.autorefresh" = true; + "git.autofetch" = false; + "git.autoStash" = true; + "git.mergeEditor" = false; + "git.confirmSync" = false; + "git.enableSmartCommit" = true; + "gitlens.advanced.messages" = { + "suppressLineUncommittedWarning" = true; + }; + "gitlens.hovers.currentLine.over" = "annotation"; + + # Nix + "nix.enableLanguageServer" = true; + "nix.serverPath" = "nil"; + "alejandra.program" = "alejandra"; + + # Elixir/erlang + "elixirLS.suggestSpecs" = false; + "elixirLS.fetchDeps" = false; + "elixirLS.mixEnv" = "dev"; + "elixir.credo.ignoreWarningMessages" = true; + + # Python + "python.analysis.typeCheckingMode" = "basic"; + + # JS + "debug.javascript.autoAttachFilter" = "onlyWithFlag"; + + # CSS + "files.associations"."*.css" = "tailwindcss"; + + # Misc + "yaml.format.proseWrap" = "always"; + "workbench.startupEditor" = "none"; + "remote.SSH.connectTimeout" = 30; + "remote.SSH.useLocalServer" = true; + "remote.SSH.path" = "/run/current-system/sw/bin/ssh"; + "extensions.ignoreRecommendations" = true; + "svg.preview.mode" = "svg"; + "vscord.status.problems.enabled" = false; + "vscord.status.state.text.editing" = "Working on {file_name}{file_extension}"; + "vscord.ignore.workspaces" = ["~/Work"]; + "typescript.updateImportsOnFileMove.enabled" = "never"; + "git.openRepositoryInParentFolders" = "never"; + "diffEditor.useInlineViewWhenSpaceIsLimited" = false; + "svelte.enable-ts-plugin" = true; + "gitlens.launchpad.indicator.enabled" = false; + "window.titleBarStyle" = "custom"; + "files.simpleDialog.enable" = true; + "window.dialogStyle" = "custom"; + }; + }; + }; + }; +} diff --git a/modules/programs/zellij.nix b/modules/programs/zellij.nix new file mode 100644 index 0000000..09c9892 --- /dev/null +++ b/modules/programs/zellij.nix @@ -0,0 +1,15 @@ +{delib, ...}: +delib.module { + name = "programs.zellij"; + + home.always.programs.zellij = { + enable = true; + enableFishIntegration = false; + settings = { + mouse_mode = true; + theme = "catppuccin-mocha"; + ui.pane_frames.rounded_corners = true; + ui.pane_frames.hide_session_name = true; + }; + }; +} diff --git a/modules/programs/zoxide.nix b/modules/programs/zoxide.nix new file mode 100644 index 0000000..5464a69 --- /dev/null +++ b/modules/programs/zoxide.nix @@ -0,0 +1,9 @@ +{delib, ...}: +delib.module { + name = "programs.zoxide"; + + home.always.programs.zoxide = { + enable = true; + enableFishIntegration = true; + }; +} diff --git a/modules/sysctl.nix b/modules/sysctl.nix new file mode 100644 index 0000000..1dca313 --- /dev/null +++ b/modules/sysctl.nix @@ -0,0 +1,11 @@ +{delib, ...}: +delib.module { + name = "sysctl"; + + nixos.always = { + boot.kernel.sysctl = { + "vm.max_map_count" = 2147483642; + "fs.file-max" = 2147483642; + }; + }; +} diff --git a/modules/systemd.nix b/modules/systemd.nix new file mode 100644 index 0000000..f8e8b78 --- /dev/null +++ b/modules/systemd.nix @@ -0,0 +1,15 @@ +{delib, ...}: +delib.module { + name = "systemd"; + + nixos.always = { + systemd = { + extraConfig = '' + DefaultTimeoutStopSec=30s + ''; + user.extraConfig = '' + DefaultTimeoutStopSec=30s + ''; + }; + }; +} diff --git a/modules/tray.nix b/modules/tray.nix new file mode 100644 index 0000000..9f984fb --- /dev/null +++ b/modules/tray.nix @@ -0,0 +1,16 @@ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "tray"; + + # TODO: i don't think this is needed anymore??? + home.always.systemd.user.targets.tray = { + Unit = { + Description = "Home Manager System Tray"; + Requires = ["graphical-session-pre.target"]; + }; + }; +} diff --git a/modules/virtualisation.nix b/modules/virtualisation.nix new file mode 100644 index 0000000..eddc0bb --- /dev/null +++ b/modules/virtualisation.nix @@ -0,0 +1,26 @@ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "virtualisation"; + + nixos.always = {myconfig, ...}: let + inherit (myconfig.constants) username; + in { + environment.systemPackages = [pkgs.docker-compose]; + # programs.virt-manager.enable = true; + # virtualisation.libvirtd.enable = true; + # virtualisation.oci-containers.backend = "podman"; + + virtualisation.podman = { + enable = true; + defaultNetwork.settings.dns_enabled = true; + }; + + users.users.${username}.extraGroups = ["libvirtd"]; + }; + + home.always.home.sessionVariables.DOCKER_HOST = "unix:///run/user/1000/podman/podman.sock"; +} diff --git a/modules/xdg.nix b/modules/xdg.nix new file mode 100644 index 0000000..b23a628 --- /dev/null +++ b/modules/xdg.nix @@ -0,0 +1,34 @@ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "programs.espanso"; + + home.always = let + vivalarc = pkgs.fetchFromGitHub { + owner = "tovifun"; + repo = "VivalArc"; + rev = "7ee09e9efb46c1524a43f0cb6763b9750db6e81c"; + hash = "sha256-xYSxB8KjcbeUDEdbA2AJ9FeQC1TkqyXdB9rTMMSm+FA="; + }; + in { + xdg.desktopEntries.davinci-resolve = { + name = "Davinci Resolve"; + exec = "davinci-resolve"; + categories = ["AudioVideo" "AudioVideoEditing" "Video" "Graphics"]; + comment = "Professional video editing, color, effects and audio post-processing"; + genericName = "Video Editor"; + type = "Application"; + settings.Version = "1.4"; + }; + + xdg.dataFile."vivalarc".source = vivalarc; + }; + + # if darwin: xdg.configFile = { + # TODO: replace with the full karabiner config instead of needing to manually set complex mods + # "karabiner/assets/complex_modifications/keybind-helpers.json".source = ../../../files/karabiner/keybind-helpers.json; + # }; +} diff --git a/modules/zsa.nix b/modules/zsa.nix new file mode 100644 index 0000000..9220858 --- /dev/null +++ b/modules/zsa.nix @@ -0,0 +1,15 @@ +{ + delib, + pkgs, + ... +}: +delib.module { + name = "zsa"; + + options = delib.singleEnableOption true; + + nixos.ifEnabled = { + environment.systemPackages = [pkgs.keymapp]; + hardware.keyboard.zsa.enable = true; + }; +} diff --git a/nixos/wallsocket/bluetooth.nix b/nixos/wallsocket/bluetooth.nix deleted file mode 100644 index 4188694..0000000 --- a/nixos/wallsocket/bluetooth.nix +++ /dev/null @@ -1,14 +0,0 @@ -{pkgs, ...}: { - hardware.bluetooth.enable = true; - hardware.bluetooth.settings = { - # Try and reduce latency from Xbox Series controllers - # https://atar-axis.github.io/xpadneo#high-latency-or-lost-button-events-with-bluetooth-le - LE = { - MinConnectionInterval = 7; - MaxConnectionInterval = 9; - ConnectionLatency = 0; - }; - }; - hardware.xpadneo.enable = true; - environment.systemPackages = [pkgs.kdePackages.bluedevil]; -} diff --git a/nixos/wallsocket/configuration.nix b/nixos/wallsocket/configuration.nix deleted file mode 100644 index 8876578..0000000 --- a/nixos/wallsocket/configuration.nix +++ /dev/null @@ -1,316 +0,0 @@ -{ - lib, - inputs, - pkgs, - ... -}: { - imports = [ - ./bluetooth.nix - ./graphics.nix - ./hardware-configuration.nix - ../../modules/nixpkgs.nix - ]; - - specialisation.niri.configuration = { - system.nixos.tags = ["niri"]; - imports = [./niri.nix]; - - services.displayManager.enable = false; - services.displayManager.sddm.enable = false; - services.displayManager.sddm.wayland.enable = false; - # services.displayManager.defaultSession = lib.mkDefault "plasma"; - services.desktopManager.plasma6.enable = false; - }; - - # Bootloader. - boot.loader.systemd-boot.enable = true; - boot.loader.systemd-boot.configurationLimit = 10; - boot.loader.efi.canTouchEfiVariables = true; - boot.kernel.sysctl."vm.max_map_count" = 2147483642; - boot.kernel.sysctl."fs.file-max" = 2147483642; - - networking.hostName = "wallsocket"; - networking.networkmanager.enable = true; - - # i18n & time - time.timeZone = "Australia/Melbourne"; - i18n.defaultLocale = "en_GB.UTF-8"; - - i18n.extraLocaleSettings = { - LC_ADDRESS = "en_AU.UTF-8"; - LC_IDENTIFICATION = "en_AU.UTF-8"; - LC_MEASUREMENT = "en_AU.UTF-8"; - LC_MONETARY = "en_AU.UTF-8"; - LC_NAME = "en_AU.UTF-8"; - LC_NUMERIC = "en_AU.UTF-8"; - LC_PAPER = "en_AU.UTF-8"; - LC_TELEPHONE = "en_AU.UTF-8"; - LC_TIME = "en_AU.UTF-8"; - }; - - # Enable the KDE Plasma Desktop Environment. - services.displayManager.enable = lib.mkDefault true; - services.displayManager.sddm.enable = lib.mkDefault true; - services.displayManager.sddm.wayland.enable = lib.mkDefault true; - services.displayManager.autoLogin = { - enable = true; - user = "ovy"; - }; - services.displayManager.defaultSession = lib.mkDefault "plasma"; # Set to `plasma` for Wayland. - services.desktopManager.plasma6.enable = lib.mkDefault true; - - environment.plasma6.excludePackages = with pkgs.kdePackages; [ - elisa - gwenview - konsole - ]; - - security.pam.services.ovy.kwallet = { - enable = true; - package = pkgs.kdePackages.kwallet-pam; - }; - - # Enable CUPS to print documents. - services.printing.enable = true; - - services.usbmuxd.enable = true; - - # Enable sound with pipewire. - services.pulseaudio.enable = false; - security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - # If you want to use JACK applications, uncomment this - #jack.enable = true; - }; - - users.users.ovy = { - isNormalUser = true; - description = "Ashlynne Mitchell"; - extraGroups = ["networkmanager" "wheel" "libvirtd" "cdrom" "adbusers"]; - shell = pkgs.fish; - }; - - programs.adb.enable = true; - - system.tools.nixos-option.enable = false; - - nix.settings = { - auto-optimise-store = true; - experimental-features = ["nix-command" "flakes"]; - trusted-users = ["root" "@wheel"]; - }; - - nix.gc = { - automatic = true; - options = "--delete-older-than 10d"; - dates = "weekly"; - }; - - # environment.sessionVariables."NIXOS_OZONE_WL" = 1; - environment.sessionVariables."MOZ_ENABLE_WAYLAND" = 0; - environment.systemPackages = with pkgs; [ - adwaita-icon-theme - amdgpu_top - docker-compose - ffmpeg-full - git - keymapp - nil - niri - openssh - solaar - unar - wget - wcurl - sysstat - p7zip - kdePackages.kcalc - kdePackages.partitionmanager - kdePackages.kcolorchooser - pciutils - nvtopPackages.full - wineWowPackages.full - - fuzzel - # tailscale-systray - # wl-clipboard - # kitty - # swaylock - # libsecret - # wayland-utils - ]; - - # Allow `keymapp` to control my ZSA Moonlander - # https://github.com/zsa/wally/wiki/Linux-install#2-create-a-udev-rule-file - services.udev.extraRules = let - # nubia 5g - nubia = { - vendor = "1782"; - product = "4021"; - }; - in '' - # Rules for Oryx web flashing and live training - KERNEL=="hidraw*", ATTRS{idVendor}=="16c0", MODE="0664", GROUP="plugdev" - KERNEL=="hidraw*", ATTRS{idVendor}=="3297", MODE="0664", GROUP="plugdev" - - # Legacy rules for live training over webusb (Not needed for firmware v21+) - # Rule for all ZSA keyboards - SUBSYSTEM=="usb", ATTR{idVendor}=="3297", GROUP="plugdev" - # Rule for the Moonlander - SUBSYSTEM=="usb", ATTR{idVendor}=="3297", ATTR{idProduct}=="1969", GROUP="plugdev" - # Rule for the Ergodox EZ - SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="1307", GROUP="plugdev" - # Rule for the Planck EZ - SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="6060", GROUP="plugdev" - - # Wally Flashing rules for the Ergodox EZ - ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", ENV{ID_MM_DEVICE_IGNORE}="1" - ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789A]?", ENV{MTP_NO_PROBE}="1" - SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789ABCD]?", MODE:="0666" - KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", MODE:="0666" - - # Keymapp / Wally Flashing rules for the Moonlander and Planck EZ - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666", SYMLINK+="stm32_dfu" - # Keymapp Flashing rules for the Voyager - SUBSYSTEMS=="usb", ATTRS{idVendor}=="3297", MODE:="0666", SYMLINK+="ignition_dfu" - - # ADB support for Nubia 5G - SUBSYSTEM=="usb", ATTR{idVendor}=="${nubia.vendor}", MODE="[]", GROUP="adbusers", TAG+="uaccess" - SUBSYSTEM=="usb", ATTR{idVendor}=="${nubia.vendor}", ATTR{idProduct}=="${nubia.product}", SYMLINK+="android_adb" - SUBSYSTEM=="usb", ATTR{idVendor}=="${nubia.vendor}", ATTR{idProduct}=="${nubia.product}", SYMLINK+="android_fastboot" - ''; - - programs.fish.enable = true; - services.mullvad-vpn.enable = true; - services.mullvad-vpn.package = pkgs.mullvad-vpn; - - networking.nameservers = ["1.1.1.1" "1.0.0.1"]; - services.resolved = { - enable = true; - # dnssec = "true"; - domains = ["~."]; - fallbackDns = ["1.1.1.1" "1.0.0.1"]; - # dnsovertls = "trues"; - }; - - fonts = { - packages = [ - pkgs.ubuntu_font_family - pkgs.inter - inputs.iosevka-solai.packages.x86_64-linux.bin - ]; - - fontDir.enable = true; - enableDefaultPackages = true; - - fontconfig = { - defaultFonts = { - serif = ["Noto Serif"]; - sansSerif = ["Inter"]; - monospace = ["Iosevka Solai"]; - emoji = ["Noto Color Emoji"]; - }; - }; - }; - - environment.sessionVariables = { - FONTCONFIG_PATH = "${pkgs.fontconfig}/etc/fonts"; - FONTCONFIG_FILE = "${pkgs.fontconfig}/etc/fonts/fonts.conf"; - }; - - # Wait for Aetf/kmscon#75 to merge, and then look into manually updating the package to test. - # Potentially open a nixpkgs PR to do so? - - # services.kmscon = { - # enable = true; - # fonts = [ - # { - # name = "Iosevka Solai Term"; - # package = inputs.iosevka-solai.packages.x86_64-linux.bin-term; - # } - # ]; - # }; - - services.pcscd.enable = true; - services.fwupd.enable = true; - - services.flatpak.enable = true; - - programs.appimage = { - enable = true; - binfmt = true; - }; - - services.tailscale = { - enable = true; - openFirewall = true; - useRoutingFeatures = "client"; - }; - - programs.steam = { - enable = true; - remotePlay.openFirewall = true; - localNetworkGameTransfers.openFirewall = true; - extraCompatPackages = [pkgs.proton-ge-bin]; - }; - - programs.gamescope.enable = true; - programs.gamemode.enable = true; - - # virtualisation.oci-containers.backend = "podman"; - virtualisation.podman = { - enable = true; - defaultNetwork.settings.dns_enabled = true; - }; - - virtualisation.libvirtd.enable = true; - programs.virt-manager.enable = true; - - qt = { - enable = true; - style = "kvantum"; - platformTheme = "kde"; - }; - - systemd.extraConfig = '' - DefaultTimeoutStopSec=30s - ''; - systemd.user.extraConfig = '' - DefaultTimeoutStopSec=30s - ''; - - services.systembus-notify.enable = true; - programs._1password.enable = true; - programs._1password-gui = { - enable = true; - polkitPolicyOwners = ["ovy"]; - }; - - environment.etc."1password/custom_allowed_browsers" = { - text = "vivaldi-bin"; - mode = "0755"; - }; - - services.avahi = { - enable = true; - nssmdns4 = true; - openFirewall = true; - }; - - services.ollama = { - enable = true; - acceleration = "rocm"; - rocmOverrideGfx = "11.0.0"; - }; - - services.earlyoom.enable = true; - services.earlyoom.enableNotifications = true; - zramSwap.enable = true; - zramSwap.algorithm = "zstd"; - - system.stateVersion = "24.05"; # Did you read the comment? -} diff --git a/nixos/wallsocket/graphics.nix b/nixos/wallsocket/graphics.nix deleted file mode 100644 index 86609aa..0000000 --- a/nixos/wallsocket/graphics.nix +++ /dev/null @@ -1,16 +0,0 @@ -{pkgs, ...}: { - hardware.graphics = { - enable = true; - enable32Bit = true; - # extraPackages = [pkgs.amdvlk]; - }; - - environment.systemPackages = [pkgs.lact]; - - systemd.services.lactd = { - description = "AMDGPU Control Daemon"; - enable = true; - serviceConfig.ExecStart = "${pkgs.lact}/bin/lact daemon"; - wantedBy = ["multi-user.target"]; - }; -} diff --git a/nixos/wallsocket/hardware-configuration.nix b/nixos/wallsocket/hardware-configuration.nix deleted file mode 100644 index dc287ad..0000000 --- a/nixos/wallsocket/hardware-configuration.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ - config, - lib, - pkgs, - modulesPath, - ... -}: { - imports = [ - (modulesPath + "/installer/scan/not-detected.nix") - ]; - - boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-amd"]; - boot.extraModulePackages = []; - # boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_11; - - hardware.logitech.wireless.enable = true; - hardware.new-lg4ff.enable = true; - - # Storage - fileSystems."/" = { - device = "/dev/disk/by-uuid/1b08f109-17e9-40f4-a7fd-6e5943ce7d5e"; - fsType = "ext4"; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/CF5D-B9DB"; - fsType = "vfat"; - options = ["fmask=0022" "dmask=0022"]; - }; - - fileSystems."/home" = { - device = "/dev/disk/by-uuid/31974b72-eca5-4758-bd66-63ae57c1b4b0"; - fsType = "ext4"; - }; - - fileSystems."/mnt/misc" = { - device = "/dev/disk/by-uuid/bbc7adf8-475a-4bec-843f-77d4b904c42e"; - fsType = "ext4"; - }; - - fileSystems."/mnt/games" = { - device = "/dev/disk/by-uuid/e61763de-753c-42f0-ba9b-5ac6b6ffdf08"; - fsType = "ext4"; - }; - - swapDevices = []; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp6s0.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp5s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/nixos/wallsocket/niri.nix b/nixos/wallsocket/niri.nix deleted file mode 100644 index 5b0cc14..0000000 --- a/nixos/wallsocket/niri.nix +++ /dev/null @@ -1,27 +0,0 @@ -{pkgs, ...}: { - programs.niri = { - enable = true; - package = pkgs.niri; - }; - - # TODO: qtgreet? https://gitlab.com/marcusbritanicus/QtGreet - services.greetd = { - enable = true; - settings = { - default_session = { - command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd niri-session -r --window-padding 4"; - user = "greeter"; - }; - }; - }; - - environment.systemPackages = with pkgs; [ - wl-clipboard - wofi - swaylock - # swaynotificationcenter - xwayland-satellite - kdePackages.kwallet - kdePackages.kwalletmanager - ]; -} -- 2.51.2