From 454ad5885d797a3d00857e88e4fc288a9381b935 Mon Sep 17 00:00:00 2001 From: imxyy_soope_ Date: Sat, 20 Dec 2025 12:57:47 +0800 Subject: [PATCH] feat: massive refactor --- README.md | 18 ++- config/base.nix | 42 ------ config/hosts/imxyy-nix-server/net.nix | 3 +- config/hosts/imxyy-nix-server/nixos.nix | 18 --- config/hosts/imxyy-nix-x16/net.nix | 1 + config/hosts/imxyy-nix-x16/nixos.nix | 34 ----- config/hosts/imxyy-nix/home.nix | 3 + config/hosts/imxyy-nix/nixos.nix | 33 +--- flake.nix | 28 +++- flake/hosts.nix | 142 ++++++++++++++++++ lib/default.nix | 1 - lib/my.nix | 102 ------------- lib/umport.nix | 16 +- modules/audio.nix | 15 +- modules/bluetooth.nix | 15 +- modules/cli/all.nix | 17 ++- modules/cli/media/all.nix | 18 +-- modules/cli/media/ffmpeg.nix | 20 +-- modules/cli/media/go-musicfox.nix | 18 +-- modules/cli/misc.nix | 22 +-- modules/cli/monitor/all.nix | 18 +-- modules/cli/monitor/btop/default.nix | 20 +-- modules/cli/shell/all.nix | 18 +-- modules/cli/shell/fish.nix | 23 +-- modules/cli/shell/starship.nix | 18 +-- modules/cli/shell/zsh.nix | 23 +-- modules/cli/vcs/all.nix | 18 +-- modules/cli/vcs/git.nix | 19 +-- modules/cli/vcs/jj.nix | 19 +-- modules/coding/all.nix | 17 ++- modules/coding/editor/all.nix | 18 +-- modules/coding/editor/neovim/default.nix | 18 +-- modules/coding/editor/vscode.nix | 19 +-- modules/coding/editor/zed/default.nix | 19 +-- modules/coding/langs/all.nix | 18 +-- modules/coding/langs/c.nix | 18 +-- modules/coding/langs/go.nix | 20 +-- modules/coding/langs/java.nix | 18 +-- modules/coding/langs/js.nix | 18 +-- modules/coding/langs/lua.nix | 18 +-- modules/coding/langs/python.nix | 20 +-- modules/coding/langs/qml.nix | 18 +-- modules/coding/langs/rust.nix | 18 +-- modules/coding/langs/typst.nix | 18 +-- modules/coding/misc.nix | 17 ++- modules/{ => core}/nix.nix | 44 +++--- modules/{ => core}/persist.nix | 1 + modules/{ => core}/time.nix | 17 ++- modules/{ => core}/user.nix | 17 ++- modules/{ => core}/xdg.nix | 1 + modules/desktop/all.nix | 17 ++- modules/desktop/browser/all.nix | 18 +-- modules/desktop/browser/chromium.nix | 19 +-- modules/desktop/browser/firefox.nix | 19 +-- modules/desktop/browser/zen.nix | 18 +-- modules/desktop/gaming/all.nix | 18 +-- modules/desktop/gaming/minecraft.nix | 18 +-- modules/desktop/gaming/steam.nix | 18 +-- modules/desktop/media/all.nix | 18 +-- modules/desktop/media/mpv.nix | 20 +-- modules/desktop/media/shotwell.nix | 20 +-- modules/desktop/media/spotify.nix | 20 +-- modules/desktop/media/spotube.nix | 20 +-- modules/desktop/media/thunderbird.nix | 20 +-- modules/desktop/media/vlc.nix | 20 +-- modules/desktop/screencast/all.nix | 18 +-- modules/desktop/screencast/obs-studio.nix | 18 +-- modules/desktop/style/default.nix | 17 ++- .../desktop/terminal/alacritty/default.nix | 19 +-- modules/desktop/terminal/all.nix | 18 +-- modules/desktop/terminal/foot/default.nix | 19 +-- modules/desktop/terminal/ghostty/default.nix | 19 +-- modules/desktop/terminal/kitty/default.nix | 19 +-- modules/desktop/wine.nix | 17 ++- modules/desktop/wm/all.nix | 18 +-- modules/desktop/wm/cage.nix | 20 +-- modules/fonts.nix | 17 ++- modules/gpg.nix | 18 ++- modules/i18n/fcitx5.nix | 56 +++---- modules/i18n/locale.nix | 20 +-- modules/sops.nix | 4 +- modules/virt/{types => _types}/app.nix | 0 modules/virt/{types => _types}/audio.nix | 0 modules/virt/{types => _types}/default.nix | 0 modules/virt/{types => _types}/egl.nix | 0 modules/virt/{types => _types}/input.nix | 0 modules/virt/{types => _types}/keys.nix | 0 modules/virt/{types => _types}/opengl.nix | 0 modules/virt/{types => _types}/spice.nix | 0 modules/virt/{types => _types}/wayland.nix | 0 modules/virt/{types => _types}/win.nix | 0 modules/virt/default.nix | 28 ++-- nixos.nix | 95 ------------ profiles/base.nix | 49 ++++++ profiles/desktop.nix | 47 ++++++ profiles/server.nix | 26 ++++ profiles/wsl.nix | 24 +++ 97 files changed, 1023 insertions(+), 960 deletions(-) delete mode 100644 config/base.nix create mode 100644 flake/hosts.nix delete mode 100644 lib/my.nix rename modules/{ => core}/nix.nix (77%) rename modules/{ => core}/persist.nix (98%) rename modules/{ => core}/time.nix (53%) rename modules/{ => core}/user.nix (93%) rename modules/{ => core}/xdg.nix (99%) rename modules/virt/{types => _types}/app.nix (100%) rename modules/virt/{types => _types}/audio.nix (100%) rename modules/virt/{types => _types}/default.nix (100%) rename modules/virt/{types => _types}/egl.nix (100%) rename modules/virt/{types => _types}/input.nix (100%) rename modules/virt/{types => _types}/keys.nix (100%) rename modules/virt/{types => _types}/opengl.nix (100%) rename modules/virt/{types => _types}/spice.nix (100%) rename modules/virt/{types => _types}/wayland.nix (100%) rename modules/virt/{types => _types}/win.nix (100%) delete mode 100644 nixos.nix create mode 100644 profiles/base.nix create mode 100644 profiles/desktop.nix create mode 100644 profiles/server.nix create mode 100644 profiles/wsl.nix diff --git a/README.md b/README.md index 849bc3d..f4e10ae 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,9 @@ forever. If someone else shares their configuration, anyone else can just use it As for Flakes, refer to [Introduction to Flakes - NixOS & Nix Flakes Book](https://nixos-and-flakes.thiscute.world/nixos-with-flakes/introduction-to-flakes) +This configuration uses [flake-parts](https://flake.parts/) for better flake organization and modularity, +enabling declarative host definitions and cleaner separation of concerns. + ## Components | | NixOS(Wayland) | @@ -42,8 +45,19 @@ And more... ## Folder Structure - `modules/` - custom NixOS modules -- `config/base.nix` - generic configs -- `config/hosts//` - hosts-specific configs + - `modules/core/` - core system modules (nix, persistence, time, user, xdg) + - `modules/cli/` - command-line tools and utilities + - `modules/coding/` - development environments and editors + - `modules/desktop/` - desktop applications and window managers + - `modules/virt/` - virtualization configurations +- `profiles/` - system configuration profiles + - `profiles/base.nix` - base configuration for all hosts + - `profiles/desktop.nix` - desktop environment configuration + - `profiles/server.nix` - server-specific configuration + - `profiles/wsl.nix` - WSL-specific configuration +- `config/hosts//` - host-specific configs +- `flake/` - flake-parts modules + - `flake/hosts.nix` - declarative host definitions - `lib/` - custom nix library - `pkgs/` - custom packages - `overlays/` - nixpkgs overlays diff --git a/config/base.nix b/config/base.nix deleted file mode 100644 index 6e54a50..0000000 --- a/config/base.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - config, - hostname, - ... -}: -{ - # I prefer this to the default issue text - # ported from ArchLinux IIRC - environment.etc.issue.text = "\\e{lightcyan}\\S\\e{reset} Login (\\l)\n\n"; - networking.hostName = hostname; - # don't change this unless you know what you are doing! - # for further information, see wiki.nixos.org - system.stateVersion = "24.11"; - # disable this since we already have machine-id persisted - systemd.services."systemd-machine-id-commit".enable = !config.my.persist.enable; - - my = { - hm = { - # nicely reload system units when changing configs - systemd.user.startServices = "sd-switch"; - home.stateVersion = "24.11"; - }; - - xdg.enable = true; - persist = { - nixosDirs = [ - "/root" - "/var" - "/etc/ssh" - ]; - nixosFiles = [ - "/etc/machine-id" - ]; - homeDirs = [ - { - directory = ".ssh"; - mode = "0700"; - } - ]; - }; - }; -} diff --git a/config/hosts/imxyy-nix-server/net.nix b/config/hosts/imxyy-nix-server/net.nix index 67635d6..1119c3d 100644 --- a/config/hosts/imxyy-nix-server/net.nix +++ b/config/hosts/imxyy-nix-server/net.nix @@ -175,8 +175,8 @@ config.sops.secrets.frp-env.path ]; services.frp = { - enable = true; instances."" = { + enable = true; role = "client"; settings = { serverAddr = "{{ .Envs.FRP_SERVER_ADDR }}"; @@ -384,7 +384,6 @@ customDomains = [ "memo.imxyy.top" ]; } - { name = "efl-matrix-http"; type = "http"; diff --git a/config/hosts/imxyy-nix-server/nixos.nix b/config/hosts/imxyy-nix-server/nixos.nix index 035c801..32a793a 100644 --- a/config/hosts/imxyy-nix-server/nixos.nix +++ b/config/hosts/imxyy-nix-server/nixos.nix @@ -6,24 +6,6 @@ ... }: { - boot.loader = { - efi.canTouchEfiVariables = true; - systemd-boot = { - enable = true; - configurationLimit = 10; - }; - grub.enable = false; - timeout = 0; - }; - - systemd.services.nix-daemon = { - environment.TMPDIR = "/var/cache/nix"; - serviceConfig.CacheDirectory = "nix"; - }; - environment.variables.NIX_REMOTE = "daemon"; - - my.audio.enable = false; - sops.secrets.imxyy-nix-server-hashed-password = { sopsFile = secrets.imxyy-nix-server-hashed-password; format = "binary"; diff --git a/config/hosts/imxyy-nix-x16/net.nix b/config/hosts/imxyy-nix-x16/net.nix index 3608942..1db583f 100644 --- a/config/hosts/imxyy-nix-x16/net.nix +++ b/config/hosts/imxyy-nix-x16/net.nix @@ -9,6 +9,7 @@ "biosdevname=0" "net.ifnames=0" ]; + my.persist.nixosDirs = [ "/etc/NetworkManager/system-connections" ]; networking = { networkmanager.enable = true; firewall.enable = false; diff --git a/config/hosts/imxyy-nix-x16/nixos.nix b/config/hosts/imxyy-nix-x16/nixos.nix index 1e33cf2..bf6b33b 100644 --- a/config/hosts/imxyy-nix-x16/nixos.nix +++ b/config/hosts/imxyy-nix-x16/nixos.nix @@ -6,40 +6,10 @@ ... }: { - security.pam.loginLimits = [ - { - domain = "*"; - type = "soft"; - item = "nofile"; - value = "524288"; - } - ]; - boot.kernelParams = [ "usbcore.autosuspend=-1" # Avoid usb autosuspend (for usb bluetooth adapter) ]; - boot.loader = { - efi.canTouchEfiVariables = true; - systemd-boot = { - enable = true; - configurationLimit = 10; - }; - grub.enable = false; - timeout = 0; - }; - - hardware.graphics.enable = true; - hardware.graphics.enable32Bit = true; - - systemd.services.nix-daemon = { - environment.TMPDIR = "/var/cache/nix"; - serviceConfig.CacheDirectory = "nix"; - }; - environment.variables.NIX_REMOTE = "daemon"; - - services.printing.enable = true; - services.upower.enable = true; services.power-profiles-daemon.enable = true; @@ -59,8 +29,6 @@ }; }; - services.gvfs.enable = true; - services.openssh = { enable = true; settings = { @@ -96,6 +64,4 @@ ]; }; }; - - my.persist.nixosDirs = [ "/etc/NetworkManager/system-connections" ]; } diff --git a/config/hosts/imxyy-nix/home.nix b/config/hosts/imxyy-nix/home.nix index 0a5a571..4269bfd 100644 --- a/config/hosts/imxyy-nix/home.nix +++ b/config/hosts/imxyy-nix/home.nix @@ -160,6 +160,9 @@ ".claude" ".claude-code-router" ]; + homeFiles = [ + ".claude.json" + ]; }; }; } diff --git a/config/hosts/imxyy-nix/nixos.nix b/config/hosts/imxyy-nix/nixos.nix index b32ca44..9c630c5 100644 --- a/config/hosts/imxyy-nix/nixos.nix +++ b/config/hosts/imxyy-nix/nixos.nix @@ -25,46 +25,17 @@ let ''; in { - security.pam.loginLimits = [ - { - domain = "*"; - type = "soft"; - item = "nofile"; - value = "524288"; - } - ]; - systemd.services.btreset = { script = lib.getExe btreset; wantedBy = [ "multi-user.target" ]; serviceConfig.Type = "oneshot"; }; + boot.kernelParams = [ "usbcore.autosuspend=-1" # Avoid usb autosuspend (for usb bluetooth adapter) "fsck.mode=skip" ]; - boot.loader = { - efi.canTouchEfiVariables = true; - systemd-boot = { - enable = true; - configurationLimit = 10; - }; - grub.enable = false; - timeout = 0; - }; - - hardware.graphics.enable = true; - hardware.graphics.enable32Bit = true; - - systemd.services.nix-daemon = { - environment.TMPDIR = "/var/cache/nix"; - serviceConfig.CacheDirectory = "nix"; - }; - environment.variables.NIX_REMOTE = "daemon"; - - services.printing.enable = true; - services.keyd = { enable = true; keyboards = { @@ -87,8 +58,6 @@ in }; }; - services.gvfs.enable = true; - programs.wireshark.enable = true; programs.wireshark.package = pkgs.wireshark; users.users.${username}.extraGroups = [ "wireshark" ]; diff --git a/flake.nix b/flake.nix index 50310d4..bbdb121 100644 --- a/flake.nix +++ b/flake.nix @@ -107,14 +107,34 @@ }; } { - systems = [ - "x86_64-linux" - ]; + systems = [ "x86_64-linux" ]; + imports = [ - ./nixos.nix + ./flake/hosts.nix ./treefmt.nix ./pkgs ./overlays ]; + + nixosHosts = { + imxyy-nix = { + profiles = [ "desktop" ]; + }; + + imxyy-nix-server = { + profiles = [ "server" ]; + }; + + imxyy-nix-wsl = { + profiles = [ "wsl" ]; + modules = [ + inputs.nixos-wsl.nixosModules.default + ]; + }; + + imxyy-nix-x16 = { + profiles = [ "desktop" ]; + }; + }; }; } diff --git a/flake/hosts.nix b/flake/hosts.nix new file mode 100644 index 0000000..f0738eb --- /dev/null +++ b/flake/hosts.nix @@ -0,0 +1,142 @@ +{ + self, + lib, + inputs, + withSystem, + config, + pkgsParams, + ... +}: +let + vars = import ../vars.nix; + pkgsModule = { + nixpkgs = pkgsParams // { + inherit (config.nixpkgs.hostPlatform) system; + }; + }; + hmModule = { + home-manager = { + sharedModules = [ + inputs.sops-nix.homeManagerModules.sops + inputs.impermanence.nixosModules.home-manager.impermanence + inputs.stylix.homeModules.stylix + inputs.noctalia.homeModules.default + inputs.zen.homeModules.beta + { + nixpkgs = lib.mkForce { }; + } + ]; + useGlobalPkgs = true; + }; + }; +in +{ + options.nixosHosts = lib.mkOption { + type = lib.types.attrsOf ( + lib.types.submodule ( + { name, ... }: + { + options = { + system = lib.mkOption { + type = lib.types.str; + default = "x86_64-linux"; + description = "System architecture"; + }; + + profiles = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + description = "List of profile names (e.g., 'desktop', 'server', 'wsl')"; + }; + + modules = lib.mkOption { + type = lib.types.listOf lib.types.deferredModule; + default = ( + lib.umport { + paths = [ ../config/hosts/${name} ]; + extraExcludePredicate = path: lib.hasInfix "/_" (toString path); + recursive = true; + } + ); + description = "Additional NixOS modules specific to this host"; + }; + + extraSpecialArgs = lib.mkOption { + type = lib.types.attrs; + default = { }; + description = "Extra special arguments to pass to modules"; + }; + }; + } + ) + ); + default = { }; + description = "Declarative host definitions"; + }; + + config = { + # Generate nixosConfigurations from declarative host definitions + flake.nixosConfigurations = lib.mapAttrs ( + hostname: hostConfig: + withSystem hostConfig.system ( + { ... }: + lib.nixosSystem { + inherit (hostConfig) system; + + specialArgs = { + inherit + inputs + self + hostname + ; + assets = + with lib.haumea; + load { + src = ../assets; + loader = [ (matchers.always loaders.path) ]; + }; + secrets = + with lib.haumea; + load { + src = ../secrets; + loader = [ (matchers.always loaders.path) ]; + }; + } + // vars + // hostConfig.extraSpecialArgs; + + modules = + # Automatically import all feature modules + (lib.umport { + paths = [ ../modules ]; + extraExcludePredicate = path: lib.hasInfix "/_" (toString path); + recursive = true; + }) + ++ [ + # Base profile (always included) + ../profiles/base.nix + ] + # Add requested profiles + ++ (map (profile: ../profiles/${profile}.nix) hostConfig.profiles) + # Add host-specific modules + ++ hostConfig.modules + ++ [ + (lib.mkAliasOptionModule [ "my" "hm" ] [ "home-manager" "users" vars.username ]) + + # Upstream modules + inputs.sops-nix.nixosModules.sops + inputs.impermanence.nixosModules.impermanence + inputs.home-manager.nixosModules.default + inputs.niri.nixosModules.niri + inputs.catppuccin.nixosModules.catppuccin + inputs.angrr.nixosModules.angrr + + # pkgs and home-manager configuration + pkgsModule + hmModule + ]; + } + ) + ) config.nixosHosts; + }; +} diff --git a/lib/default.nix b/lib/default.nix index 94ffbfb..7ee789c 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -1,7 +1,6 @@ { lib, inputs }: lib.extend ( self: super: { - my = import ./my.nix { lib = self; }; umport = import ./umport.nix { lib = self; }; inherit (inputs.home-manager.lib) hm; haumea = inputs.haumea.lib; diff --git a/lib/my.nix b/lib/my.nix deleted file mode 100644 index 1034a39..0000000 --- a/lib/my.nix +++ /dev/null @@ -1,102 +0,0 @@ -{ lib }: - -{ - makeSwitch = - { - default ? false, - config, - optionPath, - optionName, - config', - }: - let - cfg = lib.getAttrFromPath optionPath config.my; - in - { - options.my = lib.setAttrByPath optionPath { - enable = (lib.mkEnableOption optionName) // { - inherit default; - }; - }; - - config = lib.mkIf cfg.enable config'; - }; - - makeHomePackageConfig = - { - config, - pkgs, - packageName, - packagePath, - optionPath, - extraConfig ? { }, - }: - lib.my.makeSwitch { - inherit config optionPath; - optionName = packageName; - config' = lib.mkMerge [ - { - my.hm.home.packages = [ (lib.getAttrFromPath packagePath pkgs) ]; - } - extraConfig - ]; - }; - - makeHomeProgramConfig = - { - config, - programName, - optionPath, - extraConfig ? { }, - }: - lib.my.makeSwitch { - inherit config optionPath; - optionName = programName; - - config' = lib.mkMerge [ - { - my.hm.programs = lib.setAttrByPath [ programName "enable" ] true; - } - extraConfig - ]; - }; - - makeNixosPackageConfig = - { - config, - pkgs, - packageName, - packagePath, - optionPath, - extraConfig ? { }, - }: - lib.my.makeSwitch { - inherit config optionPath; - optionName = packageName; - config' = lib.mkMerge [ - { - environment.systemPackages = [ (lib.getAttrFromPath packagePath pkgs) ]; - } - extraConfig - ]; - }; - - makeNixosProgramConfig = - { - config, - programName, - optionPath, - extraConfig ? { }, - }: - lib.my.makeSwitch { - inherit config optionPath; - optionName = programName; - - config' = lib.mkMerge [ - { - programs = lib.setAttrByPath [ programName "enable" ] true; - } - extraConfig - ]; - }; -} diff --git a/lib/umport.nix b/lib/umport.nix index ca0c9af..2f4f58f 100644 --- a/lib/umport.nix +++ b/lib/umport.nix @@ -13,6 +13,7 @@ let paths ? [ ], include ? [ ], exclude ? [ ], + extraExcludePredicate ? _: true, recursive ? true, }: with lib; @@ -22,23 +23,22 @@ let excludedDirs = filter (path: pathIsDirectory path) exclude; isExcluded = path: - if elem path excludedFiles then - true - else - (filter (excludedDir: lib.path.hasPrefix excludedDir path) excludedDirs) != [ ]; + (elem path excludedFiles) + || ((filter (excludedDir: lib.path.hasPrefix excludedDir path) excludedDirs) != [ ]) + || extraExcludePredicate path; in unique ( (filter (file: pathIsRegularFile file && hasSuffix ".nix" (builtins.toString file) && !isExcluded file) ( concatMap ( - _path: + path: if recursive then - toList _path + toList path else mapAttrsToList ( - name: type: _path + (if type == "directory" then "/${name}/default.nix" else "/${name}") - ) (builtins.readDir _path) + name: type: path + (if type == "directory" then "/${name}/default.nix" else "/${name}") + ) (builtins.readDir path) ) (unique (if path == null then paths else [ path ] ++ paths)) ) ) diff --git a/modules/audio.nix b/modules/audio.nix index f4ca8db..e43df4d 100644 --- a/modules/audio.nix +++ b/modules/audio.nix @@ -5,12 +5,15 @@ username, ... }: -lib.my.makeSwitch { - inherit config; - default = true; - optionName = "default audio settings"; - optionPath = [ "audio" ]; - config' = { +let + cfg = config.my.audio; +in +{ + options.my.audio = { + enable = lib.mkEnableOption "default audio settings"; + }; + + config = lib.mkIf cfg.enable { security.rtkit.enable = true; services.pipewire = { enable = true; diff --git a/modules/bluetooth.nix b/modules/bluetooth.nix index 517c664..b6cbe45 100644 --- a/modules/bluetooth.nix +++ b/modules/bluetooth.nix @@ -1,10 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - default = true; - optionName = "default bluetooth settings"; - optionPath = [ "bluetooth" ]; - config' = { +let + cfg = config.my.bluetooth; +in +{ + options.my.bluetooth = { + enable = lib.mkEnableOption "default bluetooth settings"; + }; + + config = lib.mkIf cfg.enable { hardware.bluetooth = { enable = true; powerOnBoot = true; diff --git a/modules/cli/all.nix b/modules/cli/all.nix index 063fb37..41ebfc0 100644 --- a/modules/cli/all.nix +++ b/modules/cli/all.nix @@ -1,12 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all command line tools"; - optionPath = [ - "cli" - "all" - ]; - config' = { +let + cfg = config.my.cli.all; +in +{ + options.my.cli.all = { + enable = lib.mkEnableOption "all command line tools"; + }; + + config = lib.mkIf cfg.enable { my.cli = { media.all.enable = true; misc.enable = true; diff --git a/modules/cli/media/all.nix b/modules/cli/media/all.nix index faf78b3..4f97f08 100644 --- a/modules/cli/media/all.nix +++ b/modules/cli/media/all.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all command line media tools"; - optionPath = [ - "cli" - "media" - "all" - ]; - config' = { +let + cfg = config.my.cli.media.all; +in +{ + options.my.cli.media.all = { + enable = lib.mkEnableOption "all command line media tools"; + }; + + config = lib.mkIf cfg.enable { my.cli.media = { go-musicfox.enable = true; ffmpeg.enable = true; diff --git a/modules/cli/media/ffmpeg.nix b/modules/cli/media/ffmpeg.nix index da8ae0d..5ba0f77 100644 --- a/modules/cli/media/ffmpeg.nix +++ b/modules/cli/media/ffmpeg.nix @@ -4,13 +4,15 @@ pkgs, ... }: -lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "ffmpeg"; - packagePath = [ "ffmpeg" ]; - optionPath = [ - "cli" - "media" - "ffmpeg" - ]; +let + cfg = config.my.cli.media.ffmpeg; +in +{ + options.my.cli.media.ffmpeg = { + enable = lib.mkEnableOption "ffmpeg"; + }; + + config = lib.mkIf cfg.enable { + my.hm.home.packages = [ pkgs.ffmpeg ]; + }; } diff --git a/modules/cli/media/go-musicfox.nix b/modules/cli/media/go-musicfox.nix index eecd669..b892300 100644 --- a/modules/cli/media/go-musicfox.nix +++ b/modules/cli/media/go-musicfox.nix @@ -5,15 +5,15 @@ secrets, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "go-musicfox"; - optionPath = [ - "cli" - "media" - "go-musicfox" - ]; - config' = { +let + cfg = config.my.cli.media.go-musicfox; +in +{ + options.my.cli.media.go-musicfox = { + enable = lib.mkEnableOption "go-musicfox"; + }; + + config = lib.mkIf cfg.enable { my = { hm = { home.packages = with pkgs; [ diff --git a/modules/cli/misc.nix b/modules/cli/misc.nix index 9c3d594..c74af04 100644 --- a/modules/cli/misc.nix +++ b/modules/cli/misc.nix @@ -4,15 +4,19 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - default = true; - optionName = "misc command line tools"; - optionPath = [ - "cli" - "misc" - ]; - config' = { +let + cfg = config.my.cli.misc; +in +{ + options.my.cli.misc = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Enable misc command line tools"; + }; + }; + + config = lib.mkIf cfg.enable { environment.systemPackages = with pkgs; [ vim wget diff --git a/modules/cli/monitor/all.nix b/modules/cli/monitor/all.nix index 1b3eccd..8336452 100644 --- a/modules/cli/monitor/all.nix +++ b/modules/cli/monitor/all.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all command line monitor tools"; - optionPath = [ - "cli" - "monitor" - "all" - ]; - config' = { +let + cfg = config.my.cli.monitor.all; +in +{ + options.my.cli.monitor.all = { + enable = lib.mkEnableOption "all command line monitor tools"; + }; + + config = lib.mkIf cfg.enable { my.cli.monitor = { btop.enable = true; }; diff --git a/modules/cli/monitor/btop/default.nix b/modules/cli/monitor/btop/default.nix index 2c817e8..7f4239d 100644 --- a/modules/cli/monitor/btop/default.nix +++ b/modules/cli/monitor/btop/default.nix @@ -4,16 +4,16 @@ pkgs, ... }: -lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "btop"; - packagePath = [ "btop" ]; - optionPath = [ - "cli" - "monitor" - "btop" - ]; - extraConfig = { +let + cfg = config.my.cli.monitor.btop; +in +{ + options.my.cli.monitor.btop = { + enable = lib.mkEnableOption "btop"; + }; + + config = lib.mkIf cfg.enable { + my.hm.home.packages = [ pkgs.btop ]; my.hm.xdg.configFile."btop" = { source = ./config; recursive = true; diff --git a/modules/cli/shell/all.nix b/modules/cli/shell/all.nix index a4f4562..53f29c0 100644 --- a/modules/cli/shell/all.nix +++ b/modules/cli/shell/all.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all shells"; - optionPath = [ - "cli" - "shell" - "all" - ]; - config' = { +let + cfg = config.my.cli.shell.all; +in +{ + options.my.cli.shell.all = { + enable = lib.mkEnableOption "all shells"; + }; + + config = lib.mkIf cfg.enable { my.cli.shell = { zsh.enable = true; fish.enable = true; diff --git a/modules/cli/shell/fish.nix b/modules/cli/shell/fish.nix index 7a05b0c..767f731 100644 --- a/modules/cli/shell/fish.nix +++ b/modules/cli/shell/fish.nix @@ -4,16 +4,19 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - default = true; - optionName = "default fish settings"; - optionPath = [ - "cli" - "shell" - "fish" - ]; - config' = { +let + cfg = config.my.cli.shell.fish; +in +{ + options.my.cli.shell.fish = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Enable default fish settings"; + }; + }; + + config = lib.mkIf cfg.enable { my.persist.homeDirs = [ ".local/share/fish" ]; diff --git a/modules/cli/shell/starship.nix b/modules/cli/shell/starship.nix index e517f58..5b97c97 100644 --- a/modules/cli/shell/starship.nix +++ b/modules/cli/shell/starship.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "starship prompt"; - optionPath = [ - "cli" - "shell" - "starship" - ]; - config' = { +let + cfg = config.my.cli.shell.starship; +in +{ + options.my.cli.shell.starship = { + enable = lib.mkEnableOption "starship prompt"; + }; + + config = lib.mkIf cfg.enable { my.hm = { programs.starship = { enable = true; diff --git a/modules/cli/shell/zsh.nix b/modules/cli/shell/zsh.nix index 870f4d6..5793a7a 100644 --- a/modules/cli/shell/zsh.nix +++ b/modules/cli/shell/zsh.nix @@ -4,16 +4,19 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - default = true; - optionName = "default zsh settings"; - optionPath = [ - "cli" - "shell" - "zsh" - ]; - config' = { +let + cfg = config.my.cli.shell.zsh; +in +{ + options.my.cli.shell.zsh = { + enable = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Enable default zsh settings"; + }; + }; + + config = lib.mkIf cfg.enable { my.hm = { home.packages = with pkgs; [ fzf diff --git a/modules/cli/vcs/all.nix b/modules/cli/vcs/all.nix index b84261e..c870a2d 100644 --- a/modules/cli/vcs/all.nix +++ b/modules/cli/vcs/all.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all command line tools"; - optionPath = [ - "cli" - "vcs" - "all" - ]; - config' = { +let + cfg = config.my.cli.vcs.all; +in +{ + options.my.cli.vcs.all = { + enable = lib.mkEnableOption "all command line tools"; + }; + + config = lib.mkIf cfg.enable { my.cli.vcs = { git.enable = true; jj.enable = true; diff --git a/modules/cli/vcs/git.nix b/modules/cli/vcs/git.nix index 6064038..814ecdf 100644 --- a/modules/cli/vcs/git.nix +++ b/modules/cli/vcs/git.nix @@ -7,15 +7,16 @@ useremail, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "git"; - optionPath = [ - "cli" - "vcs" - "git" - ]; - extraConfig = { +let + cfg = config.my.cli.vcs.git; +in +{ + options.my.cli.vcs.git = { + enable = lib.mkEnableOption "git"; + }; + + config = lib.mkIf cfg.enable { + my.hm.programs.git.enable = true; my.hm = { programs.git = { settings = { diff --git a/modules/cli/vcs/jj.nix b/modules/cli/vcs/jj.nix index be325e3..2deaaa6 100644 --- a/modules/cli/vcs/jj.nix +++ b/modules/cli/vcs/jj.nix @@ -7,15 +7,16 @@ useremail, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "jujutsu"; - optionPath = [ - "cli" - "vcs" - "jj" - ]; - extraConfig = { +let + cfg = config.my.cli.vcs.jj; +in +{ + options.my.cli.vcs.jj = { + enable = lib.mkEnableOption "jujutsu"; + }; + + config = lib.mkIf cfg.enable { + my.hm.programs.jujutsu.enable = true; my.hm = { programs.jujutsu = { settings = { diff --git a/modules/coding/all.nix b/modules/coding/all.nix index 7b86eb4..c6faa80 100644 --- a/modules/coding/all.nix +++ b/modules/coding/all.nix @@ -1,12 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all coding tools"; - optionPath = [ - "coding" - "all" - ]; - config' = { +let + cfg = config.my.coding.all; +in +{ + options.my.coding.all = { + enable = lib.mkEnableOption "all coding tools"; + }; + + config = lib.mkIf cfg.enable { my.coding = { editor.all.enable = true; langs.all.enable = true; diff --git a/modules/coding/editor/all.nix b/modules/coding/editor/all.nix index f5c5d36..f4bec27 100644 --- a/modules/coding/editor/all.nix +++ b/modules/coding/editor/all.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all coding editors"; - optionPath = [ - "coding" - "editor" - "all" - ]; - config' = { +let + cfg = config.my.coding.editor.all; +in +{ + options.my.coding.editor.all = { + enable = lib.mkEnableOption "all coding editors"; + }; + + config = lib.mkIf cfg.enable { my.coding.editor = { neovim.enable = true; vscode.enable = true; diff --git a/modules/coding/editor/neovim/default.nix b/modules/coding/editor/neovim/default.nix index 0279154..ffb3e12 100644 --- a/modules/coding/editor/neovim/default.nix +++ b/modules/coding/editor/neovim/default.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "neovim"; - optionPath = [ - "coding" - "editor" - "neovim" - ]; - extraConfig = { +let + cfg = config.my.coding.editor.neovim; +in +{ + options.my.coding.editor.neovim = { + enable = lib.mkEnableOption "neovim"; + }; + + config = lib.mkIf cfg.enable { my.hm = { xdg.configFile."nvim/init.lua".source = ./nvim/init.lua; xdg.configFile."nvim/lua" = { diff --git a/modules/coding/editor/vscode.nix b/modules/coding/editor/vscode.nix index b500bd2..ab9ee05 100644 --- a/modules/coding/editor/vscode.nix +++ b/modules/coding/editor/vscode.nix @@ -4,15 +4,16 @@ pkgs, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "vscode"; - optionPath = [ - "coding" - "editor" - "vscode" - ]; - extraConfig = { +let + cfg = config.my.coding.editor.vscode; +in +{ + options.my.coding.editor.vscode = { + enable = lib.mkEnableOption "vscode"; + }; + + config = lib.mkIf cfg.enable { + my.hm.programs.vscode.enable = true; my.hm = { programs.vscode = { package = pkgs.vscodium; diff --git a/modules/coding/editor/zed/default.nix b/modules/coding/editor/zed/default.nix index 2ee23b5..ab1b10b 100644 --- a/modules/coding/editor/zed/default.nix +++ b/modules/coding/editor/zed/default.nix @@ -3,15 +3,16 @@ lib, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "zed-editor"; - optionPath = [ - "coding" - "editor" - "zed" - ]; - extraConfig = { +let + cfg = config.my.coding.editor.zed; +in +{ + options.my.coding.editor.zed = { + enable = lib.mkEnableOption "zed-editor"; + }; + + config = lib.mkIf cfg.enable { + my.hm.programs.zed-editor.enable = true; my.persist.homeDirs = [ ".config/zed" ".local/share/zed" diff --git a/modules/coding/langs/all.nix b/modules/coding/langs/all.nix index 717097e..1b00e8d 100644 --- a/modules/coding/langs/all.nix +++ b/modules/coding/langs/all.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all coding langs"; - optionPath = [ - "coding" - "langs" - "all" - ]; - config' = { +let + cfg = config.my.coding.langs.all; +in +{ + options.my.coding.langs.all = { + enable = lib.mkEnableOption "all coding langs"; + }; + + config = lib.mkIf cfg.enable { my.coding.langs = { c.enable = true; go.enable = true; diff --git a/modules/coding/langs/c.nix b/modules/coding/langs/c.nix index c16af97..af8a03b 100644 --- a/modules/coding/langs/c.nix +++ b/modules/coding/langs/c.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "c"; - optionPath = [ - "coding" - "langs" - "c" - ]; - config' = { +let + cfg = config.my.coding.langs.c; +in +{ + options.my.coding.langs.c = { + enable = lib.mkEnableOption "c"; + }; + + config = lib.mkIf cfg.enable { my.hm.home.packages = with pkgs; [ gcc (lib.hiPrio clang) diff --git a/modules/coding/langs/go.nix b/modules/coding/langs/go.nix index fc47951..3a065ad 100644 --- a/modules/coding/langs/go.nix +++ b/modules/coding/langs/go.nix @@ -4,17 +4,17 @@ pkgs, ... }: -lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "go"; - packagePath = [ "go" ]; - optionPath = [ - "coding" - "langs" - "go" - ]; - extraConfig = { +let + cfg = config.my.coding.langs.go; +in +{ + options.my.coding.langs.go = { + enable = lib.mkEnableOption "go"; + }; + + config = lib.mkIf cfg.enable { my.hm.home.packages = with pkgs; [ + go gotools gopls ]; diff --git a/modules/coding/langs/java.nix b/modules/coding/langs/java.nix index 7326a54..3a5dbac 100644 --- a/modules/coding/langs/java.nix +++ b/modules/coding/langs/java.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "java"; - optionPath = [ - "coding" - "langs" - "java" - ]; - config' = { +let + cfg = config.my.coding.langs.java; +in +{ + options.my.coding.langs.java = { + enable = lib.mkEnableOption "java"; + }; + + config = lib.mkIf cfg.enable { my.hm.home.packages = with pkgs; [ openjdk25 java-language-server diff --git a/modules/coding/langs/js.nix b/modules/coding/langs/js.nix index 5ce27c3..6f58db7 100644 --- a/modules/coding/langs/js.nix +++ b/modules/coding/langs/js.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "js"; - optionPath = [ - "coding" - "langs" - "js" - ]; - config' = { +let + cfg = config.my.coding.langs.js; +in +{ + options.my.coding.langs.js = { + enable = lib.mkEnableOption "js"; + }; + + config = lib.mkIf cfg.enable { my.hm = { home.packages = with pkgs; [ nodejs diff --git a/modules/coding/langs/lua.nix b/modules/coding/langs/lua.nix index c8a6db5..437cd93 100644 --- a/modules/coding/langs/lua.nix +++ b/modules/coding/langs/lua.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "lua"; - optionPath = [ - "coding" - "langs" - "lua" - ]; - config' = { +let + cfg = config.my.coding.langs.lua; +in +{ + options.my.coding.langs.lua = { + enable = lib.mkEnableOption "lua"; + }; + + config = lib.mkIf cfg.enable { my.hm.home.packages = with pkgs; [ luajit stylua diff --git a/modules/coding/langs/python.nix b/modules/coding/langs/python.nix index 32beb3b..96f16e1 100644 --- a/modules/coding/langs/python.nix +++ b/modules/coding/langs/python.nix @@ -4,17 +4,17 @@ pkgs, ... }: -lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "python3"; - packagePath = [ "python3" ]; - optionPath = [ - "coding" - "langs" - "python" - ]; - extraConfig = { +let + cfg = config.my.coding.langs.python; +in +{ + options.my.coding.langs.python = { + enable = lib.mkEnableOption "python3"; + }; + + config = lib.mkIf cfg.enable { my.hm.home.packages = with pkgs; [ + python3 uv pyright ]; diff --git a/modules/coding/langs/qml.nix b/modules/coding/langs/qml.nix index b44e3e0..4296c2e 100644 --- a/modules/coding/langs/qml.nix +++ b/modules/coding/langs/qml.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "QML"; - optionPath = [ - "coding" - "langs" - "qml" - ]; - config' = { +let + cfg = config.my.coding.langs.qml; +in +{ + options.my.coding.langs.qml = { + enable = lib.mkEnableOption "QML"; + }; + + config = lib.mkIf cfg.enable { my.hm.home.packages = with pkgs; [ kdePackages.qtdeclarative ]; diff --git a/modules/coding/langs/rust.nix b/modules/coding/langs/rust.nix index 4d14abc..ee89d87 100644 --- a/modules/coding/langs/rust.nix +++ b/modules/coding/langs/rust.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "rust"; - optionPath = [ - "coding" - "langs" - "rust" - ]; - config' = { +let + cfg = config.my.coding.langs.rust; +in +{ + options.my.coding.langs.rust = { + enable = lib.mkEnableOption "rust"; + }; + + config = lib.mkIf cfg.enable { my.hm = { home.packages = with pkgs; [ (fenix.stable.withComponents [ diff --git a/modules/coding/langs/typst.nix b/modules/coding/langs/typst.nix index 97c3d0d..4a45fd2 100644 --- a/modules/coding/langs/typst.nix +++ b/modules/coding/langs/typst.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "Typst"; - optionPath = [ - "coding" - "langs" - "typst" - ]; - config' = { +let + cfg = config.my.coding.langs.typst; +in +{ + options.my.coding.langs.typst = { + enable = lib.mkEnableOption "Typst"; + }; + + config = lib.mkIf cfg.enable { my.hm.home.packages = with pkgs; [ typst tinymist diff --git a/modules/coding/misc.nix b/modules/coding/misc.nix index 97321f9..89ea1bf 100644 --- a/modules/coding/misc.nix +++ b/modules/coding/misc.nix @@ -4,14 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "misc"; - optionPath = [ - "coding" - "misc" - ]; - config' = { +let + cfg = config.my.coding.misc; +in +{ + options.my.coding.misc = { + enable = lib.mkEnableOption "misc"; + }; + + config = lib.mkIf cfg.enable { my.hm = { home.packages = with pkgs; [ gnumake diff --git a/modules/nix.nix b/modules/core/nix.nix similarity index 77% rename from modules/nix.nix rename to modules/core/nix.nix index 658525f..66fd0bd 100644 --- a/modules/nix.nix +++ b/modules/core/nix.nix @@ -8,12 +8,15 @@ username, ... }: -lib.my.makeSwitch { - inherit config; - default = true; - optionName = "default nix settings"; - optionPath = [ "nix" ]; - config' = { +let + cfg = config.my.nix; +in +{ + options.my.nix = { + enable = lib.mkEnableOption "default nix settings"; + }; + + config = lib.mkIf cfg.enable { # This will add each flake input as a registry # To make nix3 commands consistent with your flake nix.registry = (lib.mapAttrs (_: flake: { inherit flake; })) ( @@ -58,14 +61,24 @@ lib.my.makeSwitch { group = "users"; mode = "0400"; }; - my.hm.nix.extraOptions = '' - !include ${config.sops.secrets.nix-github-token.path} - ''; - my.hm.home.packages = with pkgs; [ - nixd - nixfmt - ]; + my.hm = { + nix.extraOptions = '' + !include ${config.sops.secrets.nix-github-token.path} + ''; + + home.packages = with pkgs; [ + nixd + nixfmt + ]; + + xdg.configFile."direnv/lib/angrr.sh".source = + "${config.services.angrr.package}/share/direnv/lib/angrr.sh"; + + programs.direnv.stdlib = '' + use angrr + ''; + }; # uncomment to enable auto gc /* @@ -82,10 +95,5 @@ lib.my.makeSwitch { period = "1month"; }; }; - my.hm.xdg.configFile."direnv/lib/angrr.sh".source = - "${config.services.angrr.package}/share/direnv/lib/angrr.sh"; - my.hm.programs.direnv.stdlib = '' - use angrr - ''; }; } diff --git a/modules/persist.nix b/modules/core/persist.nix similarity index 98% rename from modules/persist.nix rename to modules/core/persist.nix index a71b216..3e65410 100644 --- a/modules/persist.nix +++ b/modules/core/persist.nix @@ -12,6 +12,7 @@ in enable = lib.mkEnableOption "persist"; location = lib.mkOption { type = lib.types.str; + default = "/nix/persist"; example = lib.literalExpression '' "/persistent" ''; diff --git a/modules/time.nix b/modules/core/time.nix similarity index 53% rename from modules/time.nix rename to modules/core/time.nix index b8ef40d..4ca05bf 100644 --- a/modules/time.nix +++ b/modules/core/time.nix @@ -1,10 +1,15 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - default = true; - optionName = "default time settings"; - optionPath = [ "time" ]; - config' = { +let + cfg = config.my.time; +in +{ + options.my.time = { + enable = lib.mkEnableOption "default time settings" // { + default = true; + }; + }; + + config = lib.mkIf cfg.enable { time.timeZone = "Asia/Shanghai"; networking.timeServers = [ "0.cn.pool.ntp.org" diff --git a/modules/user.nix b/modules/core/user.nix similarity index 93% rename from modules/user.nix rename to modules/core/user.nix index d3a552e..ccf23e6 100644 --- a/modules/user.nix +++ b/modules/core/user.nix @@ -7,12 +7,17 @@ secrets, ... }: -lib.my.makeSwitch { - inherit config; - default = true; - optionName = "default user settings"; - optionPath = [ "user" ]; - config' = { +let + cfg = config.my.user; +in +{ + options.my.user = { + enable = lib.mkEnableOption "default user settings" // { + default = true; + }; + }; + + config = lib.mkIf cfg.enable { programs.zsh.enable = true; sops.secrets.imxyy-nix-hashed-password = { diff --git a/modules/xdg.nix b/modules/core/xdg.nix similarity index 99% rename from modules/xdg.nix rename to modules/core/xdg.nix index 493c5ec..7fc9ec4 100644 --- a/modules/xdg.nix +++ b/modules/core/xdg.nix @@ -2,6 +2,7 @@ lib, config, pkgs, + username, ... }: let diff --git a/modules/desktop/all.nix b/modules/desktop/all.nix index 55af293..56473b0 100644 --- a/modules/desktop/all.nix +++ b/modules/desktop/all.nix @@ -1,12 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all desktop things"; - optionPath = [ - "desktop" - "all" - ]; - config' = { +let + cfg = config.my.desktop.all; +in +{ + options.my.desktop.all = { + enable = lib.mkEnableOption "all desktop things"; + }; + + config = lib.mkIf cfg.enable { my.desktop = { browser.all.enable = true; gaming.all.enable = true; diff --git a/modules/desktop/browser/all.nix b/modules/desktop/browser/all.nix index e2c857e..798201e 100644 --- a/modules/desktop/browser/all.nix +++ b/modules/desktop/browser/all.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all desktop browsers"; - optionPath = [ - "desktop" - "browser" - "all" - ]; - config' = { +let + cfg = config.my.desktop.browser.all; +in +{ + options.my.desktop.browser.all = { + enable = lib.mkEnableOption "all desktop browsers"; + }; + + config = lib.mkIf cfg.enable { my.desktop.browser = { firefox.enable = true; chromium.enable = true; diff --git a/modules/desktop/browser/chromium.nix b/modules/desktop/browser/chromium.nix index b314720..65fdf60 100644 --- a/modules/desktop/browser/chromium.nix +++ b/modules/desktop/browser/chromium.nix @@ -4,15 +4,16 @@ pkgs, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "chromium"; - optionPath = [ - "desktop" - "browser" - "chromium" - ]; - extraConfig = { +let + cfg = config.my.desktop.browser.chromium; +in +{ + options.my.desktop.browser.chromium = { + enable = lib.mkEnableOption "chromium"; + }; + + config = lib.mkIf cfg.enable { + my.hm.programs.chromium.enable = true; my.hm.programs.chromium = { package = pkgs.ungoogled-chromium; extensions = [ diff --git a/modules/desktop/browser/firefox.nix b/modules/desktop/browser/firefox.nix index 776f043..08b80b8 100644 --- a/modules/desktop/browser/firefox.nix +++ b/modules/desktop/browser/firefox.nix @@ -1,13 +1,14 @@ { config, lib, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "firefox"; - optionPath = [ - "desktop" - "browser" - "firefox" - ]; - extraConfig = { +let + cfg = config.my.desktop.browser.firefox; +in +{ + options.my.desktop.browser.firefox = { + enable = lib.mkEnableOption "firefox"; + }; + + config = lib.mkIf cfg.enable { + my.hm.programs.firefox.enable = true; my.persist.homeDirs = [ ".mozilla" ]; diff --git a/modules/desktop/browser/zen.nix b/modules/desktop/browser/zen.nix index 043b902..65221fb 100644 --- a/modules/desktop/browser/zen.nix +++ b/modules/desktop/browser/zen.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "zen-browser"; - optionPath = [ - "desktop" - "browser" - "zen" - ]; - extraConfig = { +let + cfg = config.my.desktop.browser.zen; +in +{ + options.my.desktop.browser.zen = { + enable = lib.mkEnableOption "zen-browser"; + }; + + config = lib.mkIf cfg.enable { my.hm.programs.zen-browser = { enable = true; nativeMessagingHosts = [ pkgs.firefoxpwa ]; diff --git a/modules/desktop/gaming/all.nix b/modules/desktop/gaming/all.nix index 59497e0..b16fc74 100644 --- a/modules/desktop/gaming/all.nix +++ b/modules/desktop/gaming/all.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all desktop gaming things"; - optionPath = [ - "desktop" - "gaming" - "all" - ]; - config' = { +let + cfg = config.my.desktop.gaming.all; +in +{ + options.my.desktop.gaming.all = { + enable = lib.mkEnableOption "all desktop gaming things"; + }; + + config = lib.mkIf cfg.enable { my.desktop.gaming = { minecraft.enable = true; steam.enable = true; diff --git a/modules/desktop/gaming/minecraft.nix b/modules/desktop/gaming/minecraft.nix index bcef97d..2628a9c 100644 --- a/modules/desktop/gaming/minecraft.nix +++ b/modules/desktop/gaming/minecraft.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "minecraft"; - optionPath = [ - "desktop" - "gaming" - "minecraft" - ]; - config' = { +let + cfg = config.my.desktop.gaming.minecraft; +in +{ + options.my.desktop.gaming.minecraft = { + enable = lib.mkEnableOption "minecraft"; + }; + + config = lib.mkIf cfg.enable { my.hm.home.packages = [ (pkgs.hmcl.overrideAttrs { postFixup = '' diff --git a/modules/desktop/gaming/steam.nix b/modules/desktop/gaming/steam.nix index 7b5f5c8..d0da875 100644 --- a/modules/desktop/gaming/steam.nix +++ b/modules/desktop/gaming/steam.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "steam"; - optionPath = [ - "desktop" - "gaming" - "steam" - ]; - config' = { +let + cfg = config.my.desktop.gaming.steam; +in +{ + options.my.desktop.gaming.steam = { + enable = lib.mkEnableOption "steam"; + }; + + config = lib.mkIf cfg.enable { programs.steam = { enable = true; package = pkgs.steam; diff --git a/modules/desktop/media/all.nix b/modules/desktop/media/all.nix index be3d811..2544402 100644 --- a/modules/desktop/media/all.nix +++ b/modules/desktop/media/all.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all desktop media things"; - optionPath = [ - "desktop" - "media" - "all" - ]; - config' = { +let + cfg = config.my.desktop.media.all; +in +{ + options.my.desktop.media.all = { + enable = lib.mkEnableOption "all desktop media things"; + }; + + config = lib.mkIf cfg.enable { my.desktop.media = { mpv.enable = true; shotwell.enable = true; diff --git a/modules/desktop/media/mpv.nix b/modules/desktop/media/mpv.nix index fca479c..9e97747 100644 --- a/modules/desktop/media/mpv.nix +++ b/modules/desktop/media/mpv.nix @@ -4,13 +4,15 @@ pkgs, ... }: -lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "mpv"; - packagePath = [ "mpv" ]; - optionPath = [ - "desktop" - "media" - "mpv" - ]; +let + cfg = config.my.desktop.media.mpv; +in +{ + options.my.desktop.media.mpv = { + enable = lib.mkEnableOption "mpv"; + }; + + config = lib.mkIf cfg.enable { + my.hm.home.packages = [ pkgs.mpv ]; + }; } diff --git a/modules/desktop/media/shotwell.nix b/modules/desktop/media/shotwell.nix index 5eac01b..dadb046 100644 --- a/modules/desktop/media/shotwell.nix +++ b/modules/desktop/media/shotwell.nix @@ -4,13 +4,15 @@ pkgs, ... }: -lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "shotwell"; - packagePath = [ "shotwell" ]; - optionPath = [ - "desktop" - "media" - "shotwell" - ]; +let + cfg = config.my.desktop.media.shotwell; +in +{ + options.my.desktop.media.shotwell = { + enable = lib.mkEnableOption "shotwell"; + }; + + config = lib.mkIf cfg.enable { + my.hm.home.packages = [ pkgs.shotwell ]; + }; } diff --git a/modules/desktop/media/spotify.nix b/modules/desktop/media/spotify.nix index d6b57d5..9ff9ce4 100644 --- a/modules/desktop/media/spotify.nix +++ b/modules/desktop/media/spotify.nix @@ -4,13 +4,15 @@ pkgs, ... }: -lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "spotify"; - packagePath = [ "spotify" ]; - optionPath = [ - "desktop" - "media" - "spotify" - ]; +let + cfg = config.my.desktop.media.spotify; +in +{ + options.my.desktop.media.spotify = { + enable = lib.mkEnableOption "spotify"; + }; + + config = lib.mkIf cfg.enable { + my.hm.home.packages = [ pkgs.spotify ]; + }; } diff --git a/modules/desktop/media/spotube.nix b/modules/desktop/media/spotube.nix index fa6a5b2..5af5b0f 100644 --- a/modules/desktop/media/spotube.nix +++ b/modules/desktop/media/spotube.nix @@ -4,16 +4,16 @@ pkgs, ... }: -lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "spotube"; - packagePath = [ "spotube" ]; - optionPath = [ - "desktop" - "media" - "spotube" - ]; - extraConfig = { +let + cfg = config.my.desktop.media.spotube; +in +{ + options.my.desktop.media.spotube = { + enable = lib.mkEnableOption "spotube"; + }; + + config = lib.mkIf cfg.enable { + my.hm.home.packages = [ pkgs.spotube ]; my.persist.homeDirs = [ ".local/share/oss.krtirtho.spotube" ]; diff --git a/modules/desktop/media/thunderbird.nix b/modules/desktop/media/thunderbird.nix index 4d0c496..2530170 100644 --- a/modules/desktop/media/thunderbird.nix +++ b/modules/desktop/media/thunderbird.nix @@ -4,16 +4,16 @@ pkgs, ... }: -lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "thunderbird"; - packagePath = [ "thunderbird" ]; - optionPath = [ - "desktop" - "media" - "thunderbird" - ]; - extraConfig = { +let + cfg = config.my.desktop.media.thunderbird; +in +{ + options.my.desktop.media.thunderbird = { + enable = lib.mkEnableOption "thunderbird"; + }; + + config = lib.mkIf cfg.enable { + my.hm.home.packages = [ pkgs.thunderbird ]; my.persist.homeDirs = [ ".thunderbird" ]; diff --git a/modules/desktop/media/vlc.nix b/modules/desktop/media/vlc.nix index 958a2b4..d4a49ba 100644 --- a/modules/desktop/media/vlc.nix +++ b/modules/desktop/media/vlc.nix @@ -4,13 +4,15 @@ pkgs, ... }: -lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "vlc"; - packagePath = [ "vlc" ]; - optionPath = [ - "desktop" - "media" - "vlc" - ]; +let + cfg = config.my.desktop.media.vlc; +in +{ + options.my.desktop.media.vlc = { + enable = lib.mkEnableOption "vlc"; + }; + + config = lib.mkIf cfg.enable { + my.hm.home.packages = [ pkgs.vlc ]; + }; } diff --git a/modules/desktop/screencast/all.nix b/modules/desktop/screencast/all.nix index 7746a38..f2853e6 100644 --- a/modules/desktop/screencast/all.nix +++ b/modules/desktop/screencast/all.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all screencast tools"; - optionPath = [ - "desktop" - "screencast" - "all" - ]; - config' = { +let + cfg = config.my.desktop.screencast.all; +in +{ + options.my.desktop.screencast.all = { + enable = lib.mkEnableOption "all screencast tools"; + }; + + config = lib.mkIf cfg.enable { my.desktop.screencast = { obs-studio.enable = true; }; diff --git a/modules/desktop/screencast/obs-studio.nix b/modules/desktop/screencast/obs-studio.nix index b16d2e7..844d353 100644 --- a/modules/desktop/screencast/obs-studio.nix +++ b/modules/desktop/screencast/obs-studio.nix @@ -4,15 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "obs-studio"; - optionPath = [ - "desktop" - "screencast" - "obs-studio" - ]; - config' = { +let + cfg = config.my.desktop.screencast.obs-studio; +in +{ + options.my.desktop.screencast.obs-studio = { + enable = lib.mkEnableOption "obs-studio"; + }; + + config = lib.mkIf cfg.enable { my.hm.home.packages = with pkgs; [ (pkgs.wrapOBS { plugins = with pkgs.obs-studio-plugins; [ diff --git a/modules/desktop/style/default.nix b/modules/desktop/style/default.nix index e113aaf..3277bf4 100644 --- a/modules/desktop/style/default.nix +++ b/modules/desktop/style/default.nix @@ -4,14 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "style"; - optionPath = [ - "desktop" - "style" - ]; - config' = { +let + cfg = config.my.desktop.style; +in +{ + options.my.desktop.style = { + enable = lib.mkEnableOption "style"; + }; + + config = lib.mkIf cfg.enable { catppuccin.sddm = { enable = true; font = "Jetbrains Mono"; diff --git a/modules/desktop/terminal/alacritty/default.nix b/modules/desktop/terminal/alacritty/default.nix index 050d8b5..c4da9ce 100644 --- a/modules/desktop/terminal/alacritty/default.nix +++ b/modules/desktop/terminal/alacritty/default.nix @@ -1,13 +1,14 @@ { config, lib, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "alacritty"; - optionPath = [ - "desktop" - "terminal" - "alacritty" - ]; - extraConfig = { +let + cfg = config.my.desktop.terminal.alacritty; +in +{ + options.my.desktop.terminal.alacritty = { + enable = lib.mkEnableOption "alacritty"; + }; + + config = lib.mkIf cfg.enable { + my.hm.programs.alacritty.enable = true; my.hm.programs.alacritty.settings = { general.import = [ ./tokyonight-storm.toml ]; cursor.style = { diff --git a/modules/desktop/terminal/all.nix b/modules/desktop/terminal/all.nix index bdc1313..492aece 100644 --- a/modules/desktop/terminal/all.nix +++ b/modules/desktop/terminal/all.nix @@ -1,13 +1,13 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all terminals"; - optionPath = [ - "desktop" - "terminal" - "all" - ]; - config' = { +let + cfg = config.my.desktop.terminal.all; +in +{ + options.my.desktop.terminal.all = { + enable = lib.mkEnableOption "all terminals"; + }; + + config = lib.mkIf cfg.enable { my.desktop.terminal = { alacritty.enable = true; foot.enable = true; diff --git a/modules/desktop/terminal/foot/default.nix b/modules/desktop/terminal/foot/default.nix index 0dc7a1d..2baca33 100644 --- a/modules/desktop/terminal/foot/default.nix +++ b/modules/desktop/terminal/foot/default.nix @@ -1,13 +1,14 @@ { config, lib, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "foot"; - optionPath = [ - "desktop" - "terminal" - "foot" - ]; - extraConfig = { +let + cfg = config.my.desktop.terminal.foot; +in +{ + options.my.desktop.terminal.foot = { + enable = lib.mkEnableOption "foot"; + }; + + config = lib.mkIf cfg.enable { + my.hm.programs.foot.enable = true; my.hm.programs.foot = { server.enable = true; settings = { diff --git a/modules/desktop/terminal/ghostty/default.nix b/modules/desktop/terminal/ghostty/default.nix index 3a07712..b4aa4bb 100644 --- a/modules/desktop/terminal/ghostty/default.nix +++ b/modules/desktop/terminal/ghostty/default.nix @@ -1,13 +1,14 @@ { config, lib, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "ghostty"; - optionPath = [ - "desktop" - "terminal" - "ghostty" - ]; - extraConfig = { +let + cfg = config.my.desktop.terminal.ghostty; +in +{ + options.my.desktop.terminal.ghostty = { + enable = lib.mkEnableOption "ghostty"; + }; + + config = lib.mkIf cfg.enable { + my.hm.programs.ghostty.enable = true; my.hm.programs.ghostty = { enableBashIntegration = true; enableZshIntegration = true; diff --git a/modules/desktop/terminal/kitty/default.nix b/modules/desktop/terminal/kitty/default.nix index be2cd13..468579f 100644 --- a/modules/desktop/terminal/kitty/default.nix +++ b/modules/desktop/terminal/kitty/default.nix @@ -1,13 +1,14 @@ { config, lib, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "kitty"; - optionPath = [ - "desktop" - "terminal" - "kitty" - ]; - extraConfig = { +let + cfg = config.my.desktop.terminal.kitty; +in +{ + options.my.desktop.terminal.kitty = { + enable = lib.mkEnableOption "kitty"; + }; + + config = lib.mkIf cfg.enable { + my.hm.programs.kitty.enable = true; my.hm.programs.kitty = { settings = { cursor_blink_interval = 0; diff --git a/modules/desktop/wine.nix b/modules/desktop/wine.nix index d16c025..333b76b 100644 --- a/modules/desktop/wine.nix +++ b/modules/desktop/wine.nix @@ -4,14 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "wine"; - optionPath = [ - "desktop" - "wine" - ]; - config' = { +let + cfg = config.my.desktop.wine; +in +{ + options.my.desktop.wine = { + enable = lib.mkEnableOption "wine"; + }; + + config = lib.mkIf cfg.enable { my.hm.home.packages = with pkgs; [ wine-wayland bottles diff --git a/modules/desktop/wm/all.nix b/modules/desktop/wm/all.nix index d94c778..abe49c1 100644 --- a/modules/desktop/wm/all.nix +++ b/modules/desktop/wm/all.nix @@ -3,15 +3,15 @@ lib, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "all window managers"; - optionPath = [ - "desktop" - "wm" - "all" - ]; - config' = { +let + cfg = config.my.desktop.wm.all; +in +{ + options.my.desktop.wm.all = { + enable = lib.mkEnableOption "all window managers"; + }; + + config = lib.mkIf cfg.enable { my.desktop.wm = { cage.enable = true; niri.enable = true; diff --git a/modules/desktop/wm/cage.nix b/modules/desktop/wm/cage.nix index 7c050d3..369e614 100644 --- a/modules/desktop/wm/cage.nix +++ b/modules/desktop/wm/cage.nix @@ -4,13 +4,15 @@ pkgs, ... }: -lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "cage"; - packagePath = [ "cage" ]; - optionPath = [ - "desktop" - "wm" - "cage" - ]; +let + cfg = config.my.desktop.wm.cage; +in +{ + options.my.desktop.wm.cage = { + enable = lib.mkEnableOption "cage"; + }; + + config = lib.mkIf cfg.enable { + my.hm.home.packages = [ pkgs.cage ]; + }; } diff --git a/modules/fonts.nix b/modules/fonts.nix index b0068b3..84b1f4d 100644 --- a/modules/fonts.nix +++ b/modules/fonts.nix @@ -4,12 +4,17 @@ lib, ... }: -lib.my.makeSwitch { - inherit config; - default = true; - optionName = "default font settings"; - optionPath = [ "fonts" ]; - config' = { +let + cfg = config.my.fonts; +in +{ + options.my.fonts = { + enable = lib.mkEnableOption "default font settings" // { + default = true; + }; + }; + + config = lib.mkIf cfg.enable { fonts = { enableDefaultPackages = false; fontDir.enable = true; diff --git a/modules/gpg.nix b/modules/gpg.nix index 412d556..b0f4473 100644 --- a/modules/gpg.nix +++ b/modules/gpg.nix @@ -2,18 +2,26 @@ config, lib, pkgs, + username, ... }: -lib.my.makeHomeProgramConfig { - inherit config; - programName = "gpg"; - optionPath = [ "gpg" ]; - extraConfig = { +let + cfg = config.my.gpg; +in +{ + options.my.gpg = { + enable = lib.mkEnableOption "GPG and GPG agent"; + }; + + config = lib.mkIf cfg.enable { programs.gnupg.agent = { enable = true; pinentryPackage = pkgs.pinentry-curses; enableSSHSupport = true; }; + + my.hm.programs.gpg.enable = true; + my.persist.homeDirs = [ { directory = ".gnupg"; diff --git a/modules/i18n/fcitx5.nix b/modules/i18n/fcitx5.nix index aaebb63..8220888 100644 --- a/modules/i18n/fcitx5.nix +++ b/modules/i18n/fcitx5.nix @@ -4,14 +4,15 @@ pkgs, ... }: -lib.my.makeSwitch { - inherit config; - optionName = "default fcitx5 settings"; - optionPath = [ - "i18n" - "fcitx5" - ]; - config' = { +let + cfg = config.my.i18n.fcitx5; +in +{ + options.my.i18n.fcitx5 = { + enable = lib.mkEnableOption "default fcitx5 settings"; + }; + + config = lib.mkIf cfg.enable { i18n.inputMethod = { enable = true; type = "fcitx5"; @@ -114,17 +115,11 @@ lib.my.makeSwitch { desktop, }: { - - ${pkg} = final.stdenvNoCC.mkDerivation { - inherit (prev.${pkg}) pname version; - src = prev.${pkg}; - phases = [ - "unpackPhase" - "installPhase" - ]; + ${pkg} = final.symlinkJoin { + name = prev.${pkg}.name; + paths = [ prev.${pkg} ]; nativeBuildInputs = [ final.makeWrapper ]; - installPhase = '' - cp -r . $out + postBuild = '' substituteInPlace $out/share/applications/${desktop}.desktop --replace-quiet "${prev.${pkg}}" $out wrapProgram $out/bin/${exe} --add-flags "--wayland-text-input-version=3" ''; @@ -157,22 +152,15 @@ lib.my.makeSwitch { ( { pkg, desktops }: { - - ${pkg} = final.stdenvNoCC.mkDerivation { - inherit (prev.${pkg}) pname version; - src = prev.${pkg}; - phases = [ - "unpackPhase" - "installPhase" - ]; - installPhase = - "cp -r . $out \n" - + lib.concatLines ( - map ( - desktop: - "substituteInPlace $out/share/applications/${desktop}.desktop --replace-fail 'Exec=' 'Exec=env QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx '" - ) desktops - ); + ${pkg} = final.symlinkJoin { + name = prev.${pkg}.name; + paths = [ prev.${pkg} ]; + postBuild = lib.concatLines ( + map ( + desktop: + "substituteInPlace $out/share/applications/${desktop}.desktop --replace-fail 'Exec=' 'Exec=env QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx '" + ) desktops + ); }; } ) diff --git a/modules/i18n/locale.nix b/modules/i18n/locale.nix index 5b7e0a4..73e4904 100644 --- a/modules/i18n/locale.nix +++ b/modules/i18n/locale.nix @@ -1,13 +1,15 @@ { config, lib, ... }: -lib.my.makeSwitch { - inherit config; - default = true; - optionName = "default locale settings"; - optionPath = [ - "i18n" - "locale" - ]; - config' = { +let + cfg = config.my.i18n.locale; +in +{ + options.my.i18n.locale = { + enable = lib.mkEnableOption "default locale settings" // { + default = true; + }; + }; + + config = lib.mkIf cfg.enable { i18n = { defaultLocale = "en_US.UTF-8"; extraLocaleSettings = { diff --git a/modules/sops.nix b/modules/sops.nix index d3b11a3..1065c7a 100644 --- a/modules/sops.nix +++ b/modules/sops.nix @@ -16,7 +16,9 @@ in }; sshKeyFile = lib.mkOption { type = lib.types.str; - default = "${config.my.persist.location}/home/${username}/.ssh/id_ed25519"; + default = "${ + if config.my.persist.enable then config.my.persist.location else "" + }/home/${username}/.ssh/id_ed25519"; }; }; diff --git a/modules/virt/types/app.nix b/modules/virt/_types/app.nix similarity index 100% rename from modules/virt/types/app.nix rename to modules/virt/_types/app.nix diff --git a/modules/virt/types/audio.nix b/modules/virt/_types/audio.nix similarity index 100% rename from modules/virt/types/audio.nix rename to modules/virt/_types/audio.nix diff --git a/modules/virt/types/default.nix b/modules/virt/_types/default.nix similarity index 100% rename from modules/virt/types/default.nix rename to modules/virt/_types/default.nix diff --git a/modules/virt/types/egl.nix b/modules/virt/_types/egl.nix similarity index 100% rename from modules/virt/types/egl.nix rename to modules/virt/_types/egl.nix diff --git a/modules/virt/types/input.nix b/modules/virt/_types/input.nix similarity index 100% rename from modules/virt/types/input.nix rename to modules/virt/_types/input.nix diff --git a/modules/virt/types/keys.nix b/modules/virt/_types/keys.nix similarity index 100% rename from modules/virt/types/keys.nix rename to modules/virt/_types/keys.nix diff --git a/modules/virt/types/opengl.nix b/modules/virt/_types/opengl.nix similarity index 100% rename from modules/virt/types/opengl.nix rename to modules/virt/_types/opengl.nix diff --git a/modules/virt/types/spice.nix b/modules/virt/_types/spice.nix similarity index 100% rename from modules/virt/types/spice.nix rename to modules/virt/_types/spice.nix diff --git a/modules/virt/types/wayland.nix b/modules/virt/_types/wayland.nix similarity index 100% rename from modules/virt/types/wayland.nix rename to modules/virt/_types/wayland.nix diff --git a/modules/virt/types/win.nix b/modules/virt/_types/win.nix similarity index 100% rename from modules/virt/types/win.nix rename to modules/virt/_types/win.nix diff --git a/modules/virt/default.nix b/modules/virt/default.nix index 45d6908..22094f2 100644 --- a/modules/virt/default.nix +++ b/modules/virt/default.nix @@ -23,25 +23,11 @@ let } settings; in { - imports = [ - (lib.my.makeHomePackageConfig { - inherit config pkgs; - packageName = "moonlight-qt"; - packagePath = [ "moonlight-qt" ]; - optionPath = [ - "virt" - "moonlight" - ]; - extraConfig = { - my.persist.homeDirs = [ - ".config/Moonlight Game Streaming Project" - ]; - }; - }) - ]; - options.my.virt = { enable = lib.mkEnableOption "virtualization"; + moonlight = { + enable = lib.mkEnableOption "Moonlight"; + }; looking-glass = { enable = lib.mkEnableOption "looking-glass"; package = lib.mkPackageOption pkgs "looking-glass-client" { }; @@ -116,7 +102,7 @@ in settings = lib.mkOption { description = "Looking Glass client configuration"; default = { }; - type = lib.types.submodule ./types; + type = lib.types.submodule ./_types; example = { app.shmFile = "/dev/kvmfr0"; @@ -232,5 +218,11 @@ in users.users.${username}.extraGroups = [ "libvirtd" ]; environment.systemPackages = with pkgs; [ virglrenderer ]; }) + (lib.mkIf cfg.moonlight.enable { + my.hm.home.packages = [ pkgs.moonlight-qt ]; + my.persist.homeDirs = [ + ".config/Moonlight Game Streaming Project" + ]; + }) ]; } diff --git a/nixos.nix b/nixos.nix deleted file mode 100644 index 3b4cede..0000000 --- a/nixos.nix +++ /dev/null @@ -1,95 +0,0 @@ -{ - self, - lib, - inputs, - pkgsParams, - ... -}: -let - forAllHosts = - mkSystem: - lib.mergeAttrsList ( - builtins.map (hostname: { - ${hostname} = mkSystem hostname; - }) (builtins.attrNames (builtins.readDir ./config/hosts)) - ); - pkgsModule = - { config, ... }: - { - nixpkgs = pkgsParams // { - inherit (config.nixpkgs.hostPlatform) system; - }; - }; - hmModule = { - home-manager = { - sharedModules = [ - inputs.sops-nix.homeManagerModules.sops - inputs.impermanence.nixosModules.home-manager.impermanence - inputs.stylix.homeModules.stylix - inputs.noctalia.homeModules.default - inputs.zen.homeModules.beta - - { - nixpkgs = lib.mkForce { }; - } - ]; - useGlobalPkgs = true; - }; - }; - vars = import ./vars.nix; -in -{ - flake.nixosConfigurations = forAllHosts ( - hostname: - lib.nixosSystem { - specialArgs = { - inherit - inputs - self - hostname - ; - assets = - with lib.haumea; - load { - src = ./assets; - loader = [ - (matchers.always loaders.path) - ]; - }; - secrets = - with lib.haumea; - load { - src = ./secrets; - loader = [ - (matchers.always loaders.path) - ]; - }; - } - // vars; - modules = - (lib.umport { - paths = [ ./modules ]; - exclude = [ - ./modules/virt/types - ]; - recursive = true; - }) - ++ (lib.umport { - paths = [ ./config/hosts/${hostname} ]; - recursive = true; - }) - ++ [ - (lib.mkAliasOptionModule [ "my" "hm" ] [ "home-manager" "users" vars.username ]) - ./config/base.nix - inputs.sops-nix.nixosModules.sops - inputs.impermanence.nixosModules.impermanence - inputs.home-manager.nixosModules.default - inputs.niri.nixosModules.niri - inputs.catppuccin.nixosModules.catppuccin - inputs.angrr.nixosModules.angrr - pkgsModule - hmModule - ]; - } - ); -} diff --git a/profiles/base.nix b/profiles/base.nix new file mode 100644 index 0000000..5cb67a6 --- /dev/null +++ b/profiles/base.nix @@ -0,0 +1,49 @@ +{ + config, + hostname, + ... +}: +{ + # I prefer this to the default issue text + # ported from ArchLinux IIRC + environment.etc.issue.text = "\\e{lightcyan}\\S\\e{reset} Login (\\l)\n\n"; + networking.hostName = hostname; + # don't change this unless you know what you are doing! + # for further information, see wiki.nixos.org + system.stateVersion = "24.11"; + # disable this since we already have machine-id persisted + systemd.services."systemd-machine-id-commit".enable = !config.my.persist.enable; + + # Enable core modules (user, nix, xdg, time are enabled by default) + my = { + user.enable = true; + nix.enable = true; + xdg.enable = true; + time.enable = true; + }; + + # Base persistence configuration + my.persist = { + nixosDirs = [ + "/root" + "/var" + "/etc/ssh" + ]; + nixosFiles = [ + "/etc/machine-id" + ]; + homeDirs = [ + { + directory = ".ssh"; + mode = "0700"; + } + ]; + }; + + # Home Manager base configuration + my.hm = { + # nicely reload system units when changing configs + systemd.user.startServices = "sd-switch"; + home.stateVersion = "24.11"; + }; +} diff --git a/profiles/desktop.nix b/profiles/desktop.nix new file mode 100644 index 0000000..cd8eedc --- /dev/null +++ b/profiles/desktop.nix @@ -0,0 +1,47 @@ +{ lib, ... }: +{ + # Boot loader configuration + boot.loader = { + efi.canTouchEfiVariables = true; + systemd-boot = { + enable = true; + configurationLimit = 10; + }; + grub.enable = false; + timeout = 0; + }; + + security.pam.loginLimits = [ + { + domain = "*"; + type = "soft"; + item = "nofile"; + value = "524288"; + } + ]; + + # Graphics support + hardware.graphics = { + enable = true; + enable32Bit = true; + }; + + # Printing service + services.printing.enable = true; + + # GVFS for virtual filesystems + services.gvfs.enable = true; + + # Enable desktop-related modules by default + my = { + audio.enable = true; + bluetooth.enable = true; + fonts.enable = true; + }; + + # Desktop persistence + my.persist = { + enable = lib.mkDefault true; + location = lib.mkDefault "/nix/persist"; + }; +} diff --git a/profiles/server.nix b/profiles/server.nix new file mode 100644 index 0000000..a91ee29 --- /dev/null +++ b/profiles/server.nix @@ -0,0 +1,26 @@ +{ lib, ... }: +{ + # Boot loader configuration + boot.loader = { + efi.canTouchEfiVariables = true; + systemd-boot = { + enable = true; + configurationLimit = 10; + }; + grub.enable = false; + timeout = 0; + }; + + # Disable desktop features on servers + my = { + audio.enable = false; + bluetooth.enable = false; + fonts.enable = false; + }; + + # Server persistence + my.persist = { + enable = lib.mkDefault true; + location = lib.mkDefault "/nix/persist"; + }; +} diff --git a/profiles/wsl.nix b/profiles/wsl.nix new file mode 100644 index 0000000..0bc6beb --- /dev/null +++ b/profiles/wsl.nix @@ -0,0 +1,24 @@ +{ username, lib, ... }: +{ + # WSL-specific configuration + wsl = { + enable = true; + defaultUser = username; + }; + + # Fix VSCode remote + programs.nix-ld.enable = true; + + # Force platform (WSL is always x86_64-linux) + nixpkgs.hostPlatform = lib.mkForce "x86_64-linux"; + + # Disable desktop features + my = { + audio.enable = false; + bluetooth.enable = false; + fonts.enable = false; + }; + + # Disable persistence for WSL + my.persist.enable = false; +}