Personal Nix flake
nixos home-manager nix
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

refactor: Trait system now uses actual Nix modules

+722 -711
+2 -2
.gitignore
··· 1 1 .direnv 2 2 .justfile 3 3 .pre-commit-config.yaml 4 - home.nix 5 - result 4 + /home.nix 5 + /result
-1
devShells/default.nix
··· 34 34 '') 35 35 ]; 36 36 shellHook = '' 37 - export NIX_CONFIG="${builtins.readFile pkgs.nix-conf}" 38 37 export EDITOR=hx 39 38 export NH_FLAKE="$HOME/.config/nixos" 40 39 '';
+1 -13
flake/snowfall/default.nix
··· 32 32 systems.hosts.desktop.channelName = "nixpkgs-cuda"; 33 33 systems.hosts.steamdeck.channelName = "nixpkgs-steamdeck"; 34 34 }; 35 - flake = merge-deep [ 36 - (snowfallLib.mkFlake snowfallConfig) 37 - (inputs.flake-utils.lib.eachDefaultSystem (system: { 38 - legacyPackages.homeConfigurations.minimal = mkHome { 39 - inherit system; 40 - inherit (snowfallConfig.homes) modules; 41 - }; 42 - legacyPackages.nixosConfigurations.minimal = mkSystem { 43 - inherit system; 44 - modules = snowfallConfig.systems.modules.nixos; 45 - }; 46 - })) 47 - ]; 35 + flake = snowfallLib.mkFlake snowfallConfig; 48 36 in {inherit flake;}
+1 -1
homes/aarch64-linux/lpchaim@raspberrypi/default.nix
··· 1 1 { 2 - config.home.stateVersion = "24.05"; 2 + home.stateVersion = "24.05"; 3 3 }
-25
homes/minimal/default.nix
··· 1 - { 2 - lib, 3 - pkgs, 4 - ... 5 - } @ args: let 6 - inherit (lib.lpchaim.home) getTraitModules; 7 - inherit (lib.snowfall) module; 8 - homeModules = lib.pipe ../../modules/home [ 9 - (src: module.create-modules {inherit src;}) 10 - builtins.attrValues 11 - ]; 12 - in { 13 - imports = 14 - homeModules 15 - ++ (getTraitModules [ 16 - "non-nixos" 17 - ]); 18 - 19 - config = { 20 - home = { 21 - inherit (args) homeDirectory stateVersion username; 22 - }; 23 - nix.package = pkgs.nix; 24 - }; 25 - }
+6 -12
homes/x86_64-linux/cheina@pc079/default.nix
··· 1 - {lib, ...}: let 2 - inherit (lib.lpchaim.home) getTraitModules; 3 - in { 4 - imports = getTraitModules [ 5 - "non-nixos" 6 - "work" 7 - ]; 8 - 9 - config.home = rec { 10 - stateVersion = "23.05"; 11 - username = "cheina"; 12 - homeDirectory = "/home/${username}"; 1 + { 2 + my.traits = { 3 + non-nixos.enable = true; 4 + work.enable = true; 13 5 }; 6 + 7 + home.stateVersion = "23.05"; 14 8 }
+9 -11
homes/x86_64-linux/lpchaim@desktop/default.nix
··· 1 - {lib, ...}: let 2 - inherit (lib.lpchaim.home) getTraitModules; 3 - in { 4 - imports = getTraitModules [ 5 - "de/gnome" 6 - "de/hyprland" 7 - "apps/gui" 8 - "apps/media" 9 - "llm/high" 10 - ]; 1 + { 2 + my.traits = { 3 + de.gnome.enable = true; 4 + de.hyprland.enable = true; 5 + apps.gui.enable = true; 6 + apps.media.enable = true; 7 + llm.high.enable = true; 8 + }; 11 9 12 - config.home.stateVersion = "24.11"; 10 + home.stateVersion = "24.11"; 13 11 }
+9 -11
homes/x86_64-linux/lpchaim@laptop/default.nix
··· 1 - {lib, ...}: let 2 - inherit (lib.lpchaim.home) getTraitModules; 3 - in { 4 - imports = getTraitModules [ 5 - "de/gnome" 6 - "de/hyprland" 7 - "apps/gui" 8 - "apps/media" 9 - "llm/low" 10 - ]; 1 + { 2 + my.traits = { 3 + de.gnome.enable = true; 4 + de.hyprland.enable = true; 5 + apps.gui.enable = true; 6 + apps.media.enable = true; 7 + llm.low.enable = true; 8 + }; 11 9 12 - config.home.stateVersion = "23.05"; 10 + home.stateVersion = "23.05"; 13 11 }
+9 -13
homes/x86_64-linux/lpchaim@steamdeck/default.nix
··· 1 - {lib, ...}: let 2 - inherit (lib.lpchaim.home) getTraitModules; 3 - in { 4 - imports = getTraitModules [ 5 - "de/gnome" 6 - "de/hyprland" 7 - "apps/gui" 8 - "apps/media" 9 - ]; 1 + { 2 + my.traits = { 3 + de.gnome.enable = true; 4 + de.hyprland.enable = true; 5 + apps.gui.enable = true; 6 + apps.media.enable = true; 7 + }; 10 8 11 - home.stateVersion = "24.05"; 9 + dconf.settings."org/gnome/shell".favorite-apps = ["steam.desktop"]; 12 10 13 - dconf.settings."org/gnome/shell" = { 14 - favorite-apps = ["steam.desktop"]; 15 - }; 11 + home.stateVersion = "24.05"; 16 12 }
+5 -11
homes/x86_64-linux/lupec@desktop/default.nix
··· 1 - {lib, ...}: let 2 - inherit (lib.lpchaim.home) getTraitModules; 3 - in { 4 - imports = getTraitModules [ 5 - "non-nixos" 6 - ]; 7 - 8 - config.home = rec { 9 - stateVersion = "23.11"; 10 - username = "lupec"; 11 - homeDirectory = "/home/${username}"; 1 + { 2 + my.traits = { 3 + non-nixos.enable = true; 12 4 }; 5 + 6 + home.stateVersion = "23.11"; 13 7 }
+7 -3
lib/default.nix
··· 1 - {inputs, ...}: { 2 - nix = inputs.nixpkgs.lib; 3 - std = inputs.nix-std.lib; 1 + {inputs, ...} @ topArgs: let 2 + args = topArgs // {inherit (inputs.nixpkgs) lib;}; 3 + in { 4 + shared = import ./shared.nix args; 5 + shell = import ./shell.nix; 6 + storage = import ./storage.nix; 7 + strings = import ./strings.nix args; 4 8 }
-32
lib/home/default.nix
··· 1 - {lib, ...}: let 2 - inherit (lib.snowfall) home fs; 3 - inherit (lib.lpchaim.shared) defaults; 4 - in { 5 - home = { 6 - getTraitModules = traits: 7 - map (mod: fs.get-file "modules/home/traits/${mod}.nix") traits; 8 - mkHome = { 9 - system, 10 - modules ? [], 11 - specialArgs ? {}, 12 - channelName ? "nixpkgs", 13 - }: let 14 - homeArgs = { 15 - inherit channelName modules system; 16 - name = "minimal"; 17 - path = ../../homes/minimal; 18 - specialArgs = 19 - rec { 20 - username = defaults.name.user; 21 - homeDirectory = "/home/${username}"; 22 - stateVersion = lib.versions.majorMinor lib.version; 23 - } 24 - // specialArgs; 25 - }; 26 - homeData = home.create-home homeArgs; 27 - in 28 - homeData.builder { 29 - inherit (homeData) modules specialArgs system; 30 - }; 31 - }; 32 - }
-32
lib/nixos/default.nix
··· 1 - {lib, ...}: let 2 - inherit (lib.snowfall) fs; 3 - inherit (lib.snowfall.system) create-system; 4 - in { 5 - nixos = { 6 - getTraitModules = traits: 7 - map (mod: fs.get-file "modules/nixos/traits/${mod}.nix") traits; 8 - mkSystem = { 9 - system, 10 - modules ? [], 11 - specialArgs ? [], 12 - channelName ? "nixpkgs", 13 - }: let 14 - systemArgs = { 15 - inherit channelName modules; 16 - target = system; 17 - path = ./systems/minimal; 18 - name = "minimal"; 19 - specialArgs = { 20 - stateVersion = lib.versions.majorMinor lib.version; 21 - }; 22 - systems = {}; 23 - homes = {}; 24 - }; 25 - systemData = create-system systemArgs; 26 - in 27 - systemData.builder { 28 - inherit system; 29 - inherit (systemArgs) modules specialArgs; 30 - }; 31 - }; 32 - }
+64
lib/shared.nix
··· 1 + {lib, ...}: let 2 + assets = ../assets; 3 + filter = prefix: (name: type: type == "regular" && lib.strings.hasPrefix prefix name); 4 + assetWithPrefix = prefix: 5 + lib.pipe (builtins.readDir assets) [ 6 + (lib.filterAttrs (filter prefix)) 7 + builtins.attrNames 8 + builtins.head 9 + (x: assets + /${x}) 10 + ]; 11 + in { 12 + defaults = { 13 + name.user = "lpchaim"; 14 + name.full = "Lucas Chaim"; 15 + email.main = "lpchaim@proton.me"; 16 + shell = "fish"; 17 + wallpaper = assetWithPrefix "wallpaper"; 18 + profilePicture = assetWithPrefix "profile-picture"; 19 + }; 20 + nix.settings = { 21 + accept-flake-config = true; 22 + builders-use-substitutes = true; 23 + auto-optimise-store = true; 24 + extra-experimental-features = "flakes nix-command"; 25 + extra-substituters = [ 26 + "https://nix-community.cachix.org" 27 + "https://nyx.chaotic.cx" 28 + "https://hyprland.cachix.org" 29 + "https://lpchaim.cachix.org" 30 + "https://nix-gaming.cachix.org" 31 + "https://snowflakeos.cachix.org" 32 + ]; 33 + extra-trusted-public-keys = [ 34 + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" 35 + "lpchaim.cachix.org-1:2xOuvojcUDNhJRzCpvgewQ2DdNZz3QzGVV4Z/7C+Lio=" 36 + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" 37 + "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4=" 38 + "chaotic-nyx.cachix.org-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8" 39 + "snowflakeos.cachix.org-1:gXb32BL86r9bw1kBiw9AJuIkqN49xBvPd1ZW8YlqO70=" 40 + ]; 41 + keep-derivations = true; 42 + keep-outputs = true; 43 + max-jobs = "auto"; 44 + }; 45 + kb = rec { 46 + br = { 47 + inherit (default) options; 48 + layout = "br"; 49 + variant = "nodeadkeys"; 50 + }; 51 + us = { 52 + inherit (default) options; 53 + layout = "us"; 54 + variant = "altgr-intl"; 55 + }; 56 + default = let 57 + mkMerge = builtins.concatStringsSep ","; 58 + in { 59 + layout = mkMerge [br.layout us.layout]; 60 + variant = mkMerge [br.variant us.variant]; 61 + options = "grp:alt_space_toggle"; 62 + }; 63 + }; 64 + }
-66
lib/shared/default.nix
··· 1 - {lib, ...}: let 2 - assets = ../../assets; 3 - filter = prefix: (name: type: type == "regular" && lib.strings.hasPrefix prefix name); 4 - assetWithPrefix = prefix: 5 - lib.pipe (builtins.readDir assets) [ 6 - (lib.filterAttrs (filter prefix)) 7 - builtins.attrNames 8 - builtins.head 9 - (x: assets + /${x}) 10 - ]; 11 - in { 12 - shared = { 13 - defaults = { 14 - name.user = "lpchaim"; 15 - name.full = "Lucas Chaim"; 16 - email.main = "lpchaim@proton.me"; 17 - shell = "fish"; 18 - wallpaper = assetWithPrefix "wallpaper"; 19 - profilePicture = assetWithPrefix "profile-picture"; 20 - }; 21 - nix.settings = { 22 - accept-flake-config = true; 23 - builders-use-substitutes = true; 24 - auto-optimise-store = true; 25 - extra-experimental-features = "flakes nix-command"; 26 - extra-substituters = [ 27 - "https://nix-community.cachix.org" 28 - "https://nyx.chaotic.cx" 29 - "https://hyprland.cachix.org" 30 - "https://lpchaim.cachix.org" 31 - "https://nix-gaming.cachix.org" 32 - "https://snowflakeos.cachix.org" 33 - ]; 34 - extra-trusted-public-keys = [ 35 - "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" 36 - "lpchaim.cachix.org-1:2xOuvojcUDNhJRzCpvgewQ2DdNZz3QzGVV4Z/7C+Lio=" 37 - "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" 38 - "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4=" 39 - "chaotic-nyx.cachix.org-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8" 40 - "snowflakeos.cachix.org-1:gXb32BL86r9bw1kBiw9AJuIkqN49xBvPd1ZW8YlqO70=" 41 - ]; 42 - keep-derivations = true; 43 - keep-outputs = true; 44 - max-jobs = "auto"; 45 - }; 46 - kb = rec { 47 - br = { 48 - inherit (default) options; 49 - layout = "br"; 50 - variant = "nodeadkeys"; 51 - }; 52 - us = { 53 - inherit (default) options; 54 - layout = "us"; 55 - variant = "altgr-intl"; 56 - }; 57 - default = let 58 - mkMerge = builtins.concatStringsSep ","; 59 - in { 60 - layout = mkMerge [br.layout us.layout]; 61 - variant = mkMerge [br.variant us.variant]; 62 - options = "grp:alt_space_toggle"; 63 - }; 64 - }; 65 - }; 66 - }
+34
lib/shell.nix
··· 1 + rec { 2 + makeDevShell = { 3 + pkgs, 4 + mkShell, 5 + packages ? [], 6 + shellHook ? "", 7 + ... 8 + }: 9 + mkShell { 10 + inherit packages shellHook; 11 + }; 12 + makeDevShellWithDefaults = { 13 + pkgs, 14 + mkShell, 15 + packages ? [], 16 + shellHook ? "", 17 + ... 18 + }: 19 + makeDevShell { 20 + inherit pkgs mkShell shellHook; 21 + packages = 22 + packages 23 + ++ (with pkgs; [ 24 + age 25 + alejandra 26 + nil 27 + nixos-generators 28 + nixpkgs-fmt 29 + ssh-to-age 30 + snowfallorg.flake 31 + sops 32 + ]); 33 + }; 34 + }
-36
lib/shell/default.nix
··· 1 - { 2 - shell = rec { 3 - makeDevShell = { 4 - pkgs, 5 - mkShell, 6 - packages ? [], 7 - shellHook ? "", 8 - ... 9 - }: 10 - mkShell { 11 - inherit packages shellHook; 12 - }; 13 - makeDevShellWithDefaults = { 14 - pkgs, 15 - mkShell, 16 - packages ? [], 17 - shellHook ? "", 18 - ... 19 - }: 20 - makeDevShell { 21 - inherit pkgs mkShell shellHook; 22 - packages = 23 - packages 24 - ++ (with pkgs; [ 25 - age 26 - alejandra 27 - nil 28 - nixos-generators 29 - nixpkgs-fmt 30 - ssh-to-age 31 - snowfallorg.flake 32 - sops 33 - ]); 34 - }; 35 - }; 36 - }
+1 -1
lib/storage/default.nix lib/storage.nix
··· 1 1 { 2 - storage.btrfs.mkStorage = { 2 + btrfs.mkStorage = { 3 3 device, 4 4 bootSize ? "512M", 5 5 swapSize,
+14
lib/strings.nix
··· 1 + {lib, ...}: let 2 + inherit 3 + (lib) 4 + attrNames 5 + attrValues 6 + replaceStrings 7 + ; 8 + in { 9 + replaceUsing = replacements: str: 10 + replaceStrings 11 + (attrNames replacements) 12 + (attrValues replacements) 13 + str; 14 + }
-16
lib/strings/default.nix
··· 1 - {lib, ...}: let 2 - inherit 3 - (lib) 4 - attrNames 5 - attrValues 6 - replaceStrings 7 - ; 8 - in { 9 - strings = { 10 - replaceUsing = replacements: str: 11 - replaceStrings 12 - (attrNames replacements) 13 - (attrValues replacements) 14 - str; 15 - }; 16 - }
+1 -1
modules/home/base/default.nix
··· 15 15 16 16 options.my.modules.enable = 17 17 lib.mkEnableOption "root home config" 18 - // {enable = true;}; 18 + // {default = true;}; 19 19 config = lib.mkIf cfg.enable { 20 20 programs.home-manager.enable = mkDefault true; 21 21 nix =
+3 -1
modules/home/cli/atuin/default.nix
··· 7 7 }: let 8 8 cfg = config.my.modules.cli.atuin; 9 9 in { 10 - options.my.modules.cli.atuin.enable = lib.mkEnableOption "atuin"; 10 + options.my.modules.cli.atuin.enable = 11 + lib.mkEnableOption "atuin" 12 + // {default = config.my.modules.cli.enable;}; 11 13 config = lib.mkIf cfg.enable { 12 14 programs.mcfly.enable = lib.mkForce false; 13 15 programs.atuin = {
+3 -3
modules/home/cli/editors/default.nix
··· 7 7 inherit (cfg) enable; 8 8 in { 9 9 options.my.modules.cli.editors = { 10 - enable = lib.mkEnableOption "editors"; 11 - kakoune.enable = lib.mkEnableOption "kakoune" // {inherit enable;}; 12 - vim.enable = lib.mkEnableOption "vim" // {inherit enable;}; 10 + enable = lib.mkEnableOption "editors" // {default = config.my.modules.cli.enable;}; 11 + kakoune.enable = lib.mkEnableOption "kakoune" // {default = enable;}; 12 + vim.enable = lib.mkEnableOption "vim" // {default = enable;}; 13 13 }; 14 14 15 15 config = lib.mkIf cfg.enable {
+1 -1
modules/home/cli/editors/helix/default.nix
··· 7 7 in { 8 8 options.my.modules.cli.editors.helix.enable = 9 9 lib.mkEnableOption "helix" 10 - // {inherit (config.my.modules.cli.editors) enable;}; 10 + // {default = config.my.modules.cli.editors.enable;}; 11 11 config = lib.mkIf cfg.enable { 12 12 programs.helix = { 13 13 enable = true;
+1 -1
modules/home/cli/editors/neovim/default.nix
··· 7 7 in { 8 8 options.my.modules.cli.editors.neovim.enable = 9 9 lib.mkEnableOption "neovim" 10 - // {inherit (config.my.modules.cli.editors) enable;}; 10 + // {default = config.my.modules.cli.editors.enable;}; 11 11 config = lib.mkIf cfg.enable { 12 12 programs.nixvim = { 13 13 enable = true;
+1 -1
modules/home/cli/git/default.nix
··· 8 8 in { 9 9 options.my.modules.cli.git = { 10 10 enable = lib.mkEnableOption "git"; 11 - lazygit.enable = lib.mkEnableOption "lazygit" // {inherit (cfg) enable;}; 11 + lazygit.enable = lib.mkEnableOption "lazygit" // {default = cfg.enable;}; 12 12 }; 13 13 14 14 config = lib.mkIf cfg.enable {
+10 -1
modules/home/traits/apps/gui.nix
··· 1 1 { 2 - my.modules.gui.enable = true; 2 + config, 3 + lib, 4 + ... 5 + }: let 6 + cfg = config.my.traits.apps.gui; 7 + in { 8 + options.my.traits.apps.gui.enable = lib.mkEnableOption "GUI apps trait"; 9 + config = lib.mkIf cfg.enable { 10 + my.modules.gui.enable = true; 11 + }; 3 12 }
+23 -16
modules/home/traits/apps/media.nix
··· 1 1 { 2 + config, 2 3 inputs, 4 + lib, 3 5 pkgs, 4 6 ... 5 - }: { 6 - programs = { 7 - mpv.enable = true; 8 - spicetify = let 9 - spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; 10 - in { 11 - enable = true; 12 - enabledExtensions = with spicePkgs.extensions; [ 13 - adblock 14 - popupLyrics 15 - shuffle # shuffle+ (special characters are sanitized out of extension names) 16 - ]; 7 + }: let 8 + cfg = config.my.traits.apps.media; 9 + in { 10 + options.my.traits.apps.media.enable = lib.mkEnableOption "media trait"; 11 + config = lib.mkIf cfg.enable { 12 + programs = { 13 + mpv.enable = true; 14 + spicetify = let 15 + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; 16 + in { 17 + enable = true; 18 + enabledExtensions = with spicePkgs.extensions; [ 19 + adblock 20 + popupLyrics 21 + shuffle # shuffle+ (special characters are sanitized out of extension names) 22 + ]; 23 + }; 17 24 }; 25 + home.packages = with pkgs; [ 26 + jellyfin-media-player 27 + vlc 28 + ]; 18 29 }; 19 - home.packages = with pkgs; [ 20 - jellyfin-media-player 21 - vlc 22 - ]; 23 30 }
+10 -1
modules/home/traits/de/gnome.nix
··· 1 1 { 2 - my.modules.de.gnome.enable = true; 2 + config, 3 + lib, 4 + ... 5 + }: let 6 + cfg = config.my.traits.de.gnome; 7 + in { 8 + options.my.traits.de.gnome.enable = lib.mkEnableOption "GNOME DE trait"; 9 + config = lib.mkIf cfg.enable { 10 + my.modules.de.gnome.enable = true; 11 + }; 3 12 }
+10 -1
modules/home/traits/de/hyprland.nix
··· 1 1 { 2 - my.modules.de.hyprland.enable = true; 2 + config, 3 + lib, 4 + ... 5 + }: let 6 + cfg = config.my.traits.de.hyprland; 7 + in { 8 + options.my.traits.de.hyprland.enable = lib.mkEnableOption "Hyprland DE trait"; 9 + config = lib.mkIf cfg.enable { 10 + my.modules.de.hyprland.enable = true; 11 + }; 3 12 }
+6
modules/home/traits/default.nix
··· 1 + {lib, ...}: { 2 + imports = lib.pipe ./. [ 3 + lib.filesystem.listFilesRecursive 4 + (builtins.filter (path: ! (lib.hasSuffix "default.nix" path))) 5 + ]; 6 + }
+8 -1
modules/home/traits/llm/high.nix
··· 1 1 { 2 - my.modules.misc.llm = { 2 + config, 3 + lib, 4 + ... 5 + }: let 6 + cfg = config.my.traits.llm.high; 7 + in { 8 + options.my.traits.llm.high.enable = lib.mkEnableOption "High LLM preset trait"; 9 + config.my.modules.misc.llm = lib.mkIf cfg.enable { 3 10 enable = true; 4 11 defaultModel = "llama3"; 5 12 };
+8 -1
modules/home/traits/llm/low.nix
··· 1 1 { 2 - my.modules.misc.llm = { 2 + config, 3 + lib, 4 + ... 5 + }: let 6 + cfg = config.my.traits.llm.low; 7 + in { 8 + options.my.traits.llm.low.enable = lib.mkEnableOption "Low LLM preset trait"; 9 + config.my.modules.misc.llm = lib.mkIf cfg.enable { 3 10 enable = true; 4 11 defaultModel = "tinyllama"; 5 12 };
+8 -1
modules/home/traits/llm/mid.nix
··· 1 1 { 2 - my.modules.misc.llm = { 2 + config, 3 + lib, 4 + ... 5 + }: let 6 + cfg = config.my.traits.llm.mid; 7 + in { 8 + options.my.traits.llm.mid.enable = lib.mkEnableOption "Mid LLM preset trait"; 9 + config.my.modules.misc.llm = lib.mkIf cfg.enable { 3 10 enable = true; 4 11 defaultModel = "phi2"; 5 12 };
+20 -11
modules/home/traits/non-nixos.nix
··· 1 - {config, ...}: { 2 - targets.genericLinux.enable = true; 1 + { 2 + config, 3 + lib, 4 + ... 5 + }: let 6 + cfg = config.my.traits.non-nixos; 7 + in { 8 + options.my.traits.non-nixos.enable = lib.mkEnableOption "Non-NixOS machine trait"; 9 + config = lib.mkIf cfg.enable { 10 + targets.genericLinux.enable = true; 3 11 4 - xdg.mime.enable = true; 5 - xdg.systemDirs.data = [ 6 - "${config.home.homeDirectory}/.nix-profile/share/applications" 7 - ]; 12 + xdg.mime.enable = true; 13 + xdg.systemDirs.data = [ 14 + "${config.home.homeDirectory}/.nix-profile/share/applications" 15 + ]; 8 16 9 - stylix.targets = { 10 - gnome.enable = false; 11 - gtk.enable = false; 12 - kde.enable = false; 13 - hyprland.enable = false; 17 + stylix.targets = { 18 + gnome.enable = false; 19 + gtk.enable = false; 20 + kde.enable = false; 21 + hyprland.enable = false; 22 + }; 14 23 }; 15 24 }
+71 -66
modules/home/traits/work.nix
··· 3 3 lib, 4 4 pkgs, 5 5 ... 6 - }: { 7 - home.packages = with pkgs; [ 8 - nodePackages.clipboard-cli 9 - (pkgs.writeShellScriptBin "dev2beta" '' 10 - git checkout dev && git pull && git checkout beta && git pull 11 - git branch -D bugfix#dev2beta >/dev/null 2>&1 12 - git checkout -b bugfix#dev2beta && git merge dev --no-ff --no-edit 13 - '') 14 - (pkgs.writeShellScriptBin "dev2master" '' 15 - git checkout dev && git pull && git checkout master && git pull 16 - git branch -D hotfix#dev2master >/dev/null 2>&1 17 - git checkout -b hotfix#dev2master && git merge dev --no-ff --no-edit 18 - '') 19 - (pkgs.writeShellScriptBin "master2dev" '' 20 - git checkout master && git pull && git checkout dev && git pull 21 - git branch -D bugfix#master2dev >/dev/null 2>&1 22 - git checkout -b bugfix#master2dev && git merge master --no-ff --no-edit 23 - '') 24 - (pkgs.writeShellScriptBin "cleanslate" '' 25 - git fetch origin dev:dev && git checkout dev 26 - '') 27 - ]; 6 + }: let 7 + cfg = config.my.traits.work; 8 + in { 9 + options.my.traits.work.enable = lib.mkEnableOption "work trait"; 10 + config = lib.mkIf cfg.enable { 11 + home.packages = with pkgs; [ 12 + nodePackages.clipboard-cli 13 + (pkgs.writeShellScriptBin "dev2beta" '' 14 + git checkout dev && git pull && git checkout beta && git pull 15 + git branch -D bugfix#dev2beta >/dev/null 2>&1 16 + git checkout -b bugfix#dev2beta && git merge dev --no-ff --no-edit 17 + '') 18 + (pkgs.writeShellScriptBin "dev2master" '' 19 + git checkout dev && git pull && git checkout master && git pull 20 + git branch -D hotfix#dev2master >/dev/null 2>&1 21 + git checkout -b hotfix#dev2master && git merge dev --no-ff --no-edit 22 + '') 23 + (pkgs.writeShellScriptBin "master2dev" '' 24 + git checkout master && git pull && git checkout dev && git pull 25 + git branch -D bugfix#master2dev >/dev/null 2>&1 26 + git checkout -b bugfix#master2dev && git merge master --no-ff --no-edit 27 + '') 28 + (pkgs.writeShellScriptBin "cleanslate" '' 29 + git fetch origin dev:dev && git checkout dev 30 + '') 31 + ]; 32 + 33 + programs.zsh.initExtra = '' 34 + export NVM_DIR="$HOME/.nvm" 35 + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm 36 + export PATH="$PATH:$HOME/Lucas/Bin"; 37 + ''; 38 + programs.tmux.extraConfig = lib.optionalString config.programs.nushell.enable '' 39 + set-option -g default-shell ${config.programs.nushell.package}/bin/nu 40 + ''; 28 41 29 - programs.zsh.initExtra = '' 30 - export NVM_DIR="$HOME/.nvm" 31 - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm 32 - export PATH="$PATH:$HOME/Lucas/Bin"; 33 - ''; 34 - programs.tmux.extraConfig = lib.optionalString config.programs.nushell.enable '' 35 - set-option -g default-shell ${config.programs.nushell.package}/bin/nu 36 - ''; 42 + my.modules = { 43 + enable = true; 44 + cli.enable = true; 45 + cli.git.enable = true; 46 + cli.hishtory.enable = false; 47 + de.gnome.theming.enableGnomeShellTheme = false; 48 + }; 37 49 38 - my.modules = { 39 - enable = true; 40 - cli.enable = true; 41 - cli.git.enable = true; 42 - cli.hishtory.enable = false; 43 - de.gnome.theming.enableGnomeShellTheme = false; 44 - }; 50 + programs.helix.languages.language = [ 51 + { 52 + name = "php"; 53 + language-id = "php"; 54 + debugger = { 55 + name = "vscode-php-debug"; 56 + transport = "stdio"; 57 + command = "node"; 58 + args = ["~/.vscode/extensions/xdebug.php-debug-1.34.0/out/phpDebug.js"]; 59 + }; 60 + debugger.templates = [ 61 + { 62 + name = "Listen for Xdebug"; 63 + request = "launch"; 64 + completion = ["ignored"]; 65 + args = {}; 66 + } 67 + ]; 68 + } 69 + ]; 45 70 46 - programs.helix.languages.language = [ 47 - { 48 - name = "php"; 49 - language-id = "php"; 50 - debugger = { 51 - name = "vscode-php-debug"; 52 - transport = "stdio"; 53 - command = "node"; 54 - args = ["~/.vscode/extensions/xdebug.php-debug-1.34.0/out/phpDebug.js"]; 71 + dconf.settings = { 72 + "org/gnome/desktop/interface" = { 73 + enable-hot-corners = true; 55 74 }; 56 - debugger.templates = [ 57 - { 58 - name = "Listen for Xdebug"; 59 - request = "launch"; 60 - completion = ["ignored"]; 61 - args = {}; 62 - } 63 - ]; 64 - } 65 - ]; 66 - 67 - dconf.settings = { 68 - "org/gnome/desktop/interface" = { 69 - enable-hot-corners = true; 70 - }; 71 - "org/gnome/desktop/wm/keybindings" = { 72 - switch-applications = []; 73 - switch-applications-backward = []; 74 - switch-windows = ["<Alt>Tab"]; 75 - switch-windows-backward = ["<Shift><Alt>Tab"]; 75 + "org/gnome/desktop/wm/keybindings" = { 76 + switch-applications = []; 77 + switch-applications-backward = []; 78 + switch-windows = ["<Alt>Tab"]; 79 + switch-windows-backward = ["<Shift><Alt>Tab"]; 80 + }; 76 81 }; 77 82 }; 78 83 }
+13 -4
modules/nixos/traits/composite/base.nix
··· 1 1 { 2 - imports = [ 3 - ../users.nix 4 - ../kernel.nix 5 - ]; 2 + config, 3 + lib, 4 + ... 5 + }: let 6 + cfg = config.my.traits.composite.base; 7 + in { 8 + options.my.traits.composite.base.enable = lib.mkEnableOption "base trait"; 9 + config = lib.mkIf cfg.enable { 10 + my.traits = { 11 + kernel.enable = true; 12 + users.enable = true; 13 + }; 14 + }; 6 15 }
+51 -41
modules/nixos/traits/de/gnome.nix
··· 1 1 # Use the GNOME desktop environment 2 - {pkgs, ...}: { 3 - services.xserver.enable = true; 4 - services.xserver.displayManager.gdm.enable = true; 5 - services.xserver.desktopManager.gnome.enable = true; 2 + { 3 + config, 4 + lib, 5 + pkgs, 6 + ... 7 + }: let 8 + cfg = config.my.traits.de.gnome; 9 + in { 10 + options.my.traits.de.gnome.enable = lib.mkEnableOption "gnome trait"; 11 + config = lib.mkIf cfg.enable { 12 + services.xserver.enable = true; 13 + services.xserver.displayManager.gdm.enable = true; 14 + services.xserver.desktopManager.gnome.enable = true; 6 15 7 - environment.gnome.excludePackages = let 8 - getPackages = p: (builtins.filter (package: p ? package) (with p; [ 9 - aisleriot # patience game 10 - atomix # puzzle game 11 - cheese # webcam tool 12 - # epiphany # web browser 13 - # evince # document viewer 14 - geary # email reader 15 - gedit # text editor 16 - gnome-initial-setup 17 - gnome-music 18 - gnome-terminal 19 - hitori # sudoku game 20 - iagno # go game 21 - tali # poker game 22 - totem # video player 23 - five-or-more # game 24 - four-in-a-row # game 25 - gnome-chess # chess game 26 - gnome-mines # mine game 27 - gnome-software 28 - gnome-sound-recorder 29 - gnome-sudoku # sudoku game 30 - gnome-system-monitor 31 - gnome-taquin # game 32 - gnome-tetravex # tetris game 33 - hitori # game 34 - quadrapassel # tetris game 35 - sushi # nautilus previewer 36 - swell-foop # puzzle game 37 - ])); 38 - in 39 - (getPackages pkgs) 40 - ++ (getPackages pkgs.gnome); 41 - environment.systemPackages = with pkgs; [ 42 - gnome-photos 43 - ]; 16 + environment.gnome.excludePackages = let 17 + getPackages = p: (builtins.filter (package: p ? package) (with p; [ 18 + aisleriot # patience game 19 + atomix # puzzle game 20 + cheese # webcam tool 21 + # epiphany # web browser 22 + # evince # document viewer 23 + geary # email reader 24 + gedit # text editor 25 + gnome-initial-setup 26 + gnome-music 27 + gnome-terminal 28 + hitori # sudoku game 29 + iagno # go game 30 + tali # poker game 31 + totem # video player 32 + five-or-more # game 33 + four-in-a-row # game 34 + gnome-chess # chess game 35 + gnome-mines # mine game 36 + gnome-software 37 + gnome-sound-recorder 38 + gnome-sudoku # sudoku game 39 + gnome-system-monitor 40 + gnome-taquin # game 41 + gnome-tetravex # tetris game 42 + hitori # game 43 + quadrapassel # tetris game 44 + sushi # nautilus previewer 45 + swell-foop # puzzle game 46 + ])); 47 + in 48 + (getPackages pkgs) 49 + ++ (getPackages pkgs.gnome); 50 + environment.systemPackages = with pkgs; [ 51 + gnome-photos 52 + ]; 53 + }; 44 54 }
+35 -30
modules/nixos/traits/de/hyprland.nix
··· 1 + # Use the Hyprland compositor 1 2 { 3 + config, 2 4 inputs, 5 + lib, 3 6 pkgs, 4 7 ... 5 - }: 6 - # Use the Hyprland compositor 7 - let 8 + }: let 8 9 flakePkgs = inputs.hyprland.packages.${pkgs.system}; 9 10 flakeNixpkgs = inputs.hyprland.inputs.nixpkgs.legacyPackages.${pkgs.system}; 11 + cfg = config.my.traits.de.hyprland; 10 12 in { 11 - imports = [ 12 - ../pipewire.nix 13 - ../wayland.nix 14 - ]; 13 + options.my.traits.de.hyprland.enable = lib.mkEnableOption "hyprland trait"; 14 + config = lib.mkIf cfg.enable { 15 + my.traits = { 16 + pipewire.enable = true; 17 + wayland.enable = true; 18 + }; 15 19 16 - programs.hyprland = { 17 - enable = true; 18 - xwayland.enable = true; 19 - package = flakePkgs.hyprland; 20 - portalPackage = flakePkgs.xdg-desktop-portal-hyprland; 21 - }; 22 - hardware.graphics = { 23 - enable = true; 24 - enable32Bit = true; 25 - package = flakeNixpkgs.mesa.drivers; 26 - package32 = flakeNixpkgs.pkgsi686Linux.mesa.drivers; 27 - }; 28 - security = { 29 - pam.services.hyprlock = {}; 30 - polkit.enable = true; 31 - }; 32 - xdg.portal.wlr.enable = true; 33 - environment = { 34 - sessionVariables.NIXOS_OZONE_WL = "1"; 35 - systemPackages = with pkgs; [ 36 - hypridle 37 - hyprlock 38 - ]; 20 + programs.hyprland = { 21 + enable = true; 22 + xwayland.enable = true; 23 + package = flakePkgs.hyprland; 24 + portalPackage = flakePkgs.xdg-desktop-portal-hyprland; 25 + }; 26 + hardware.graphics = { 27 + enable = true; 28 + enable32Bit = true; 29 + package = flakeNixpkgs.mesa.drivers; 30 + package32 = flakeNixpkgs.pkgsi686Linux.mesa.drivers; 31 + }; 32 + security = { 33 + pam.services.hyprlock = {}; 34 + polkit.enable = true; 35 + }; 36 + xdg.portal.wlr.enable = true; 37 + environment = { 38 + sessionVariables.NIXOS_OZONE_WL = "1"; 39 + systemPackages = with pkgs; [ 40 + hypridle 41 + hyprlock 42 + ]; 43 + }; 39 44 }; 40 45 }
+13 -4
modules/nixos/traits/de/plasma.nix
··· 1 1 # Use the KDE Plasma desktop environment 2 - {...}: { 3 - services.xserver.enable = true; 4 - services.xserver.displayManager.sddm.enable = true; 5 - services.xserver.desktopManager.plasma5.enable = true; 2 + { 3 + config, 4 + lib, 5 + ... 6 + }: let 7 + cfg = config.my.traits.de.plasma; 8 + in { 9 + options.my.traits.de.plasma.enable = lib.mkEnableOption "plasma trait"; 10 + config = lib.mkIf cfg.enable { 11 + services.xserver.enable = true; 12 + services.xserver.displayManager.sddm.enable = true; 13 + services.xserver.desktopManager.plasma5.enable = true; 14 + }; 6 15 }
+6
modules/nixos/traits/default.nix
··· 1 + {lib, ...}: { 2 + imports = lib.pipe ./. [ 3 + lib.filesystem.listFilesRecursive 4 + (builtins.filter (path: ! (lib.hasSuffix "default.nix" path))) 5 + ]; 6 + }
+14 -6
modules/nixos/traits/formfactor/desktop.nix
··· 1 1 # Desktop-specific configurations 2 - {pkgs, ...}: { 3 - imports = [ 4 - ../pipewire.nix 5 - ../wayland.nix 6 - ]; 2 + { 3 + config, 4 + lib, 5 + pkgs, 6 + ... 7 + }: let 8 + cfg = config.my.traits.formfactor.desktop; 9 + in { 10 + options.my.traits.formfactor.desktop.enable = lib.mkEnableOption "desktop trait"; 11 + config = lib.mkIf cfg.enable { 12 + my.traits = { 13 + pipewire.enable = true; 14 + wayland.enable = true; 15 + }; 7 16 8 - config = { 9 17 environment.systemPackages = with pkgs; [ 10 18 nix-software-center 11 19 piper
+10 -6
modules/nixos/traits/formfactor/laptop.nix
··· 1 1 # Laptop-specific configurations 2 2 { 3 3 config, 4 + lib, 4 5 pkgs, 5 6 ... 6 - }: { 7 - imports = [ 8 - ../pipewire.nix 9 - ../wayland.nix 10 - ]; 7 + }: let 8 + cfg = config.my.traits.formfactor.laptop; 9 + in { 10 + options.my.traits.formfactor.laptop.enable = lib.mkEnableOption "laptop trait"; 11 + config = lib.mkIf cfg.enable { 12 + my.traits = { 13 + pipewire.enable = true; 14 + wayland.enable = true; 15 + }; 11 16 12 - config = { 13 17 hardware.graphics.enable = true; 14 18 hardware.sensor.iio.enable = true; 15 19
+3 -1
modules/nixos/traits/gaming.nix modules/nixos/gaming/default.nix
··· 9 9 in { 10 10 options.my.gaming = { 11 11 enable = lib.mkEnableOption "gaming tweaks"; 12 - steam.enable = lib.mkEnableOption "steam tweaks" // {default = config.my.gaming.enable;}; 12 + steam.enable = 13 + lib.mkEnableOption "steam tweaks" 14 + // {default = config.my.gaming.enable;}; 13 15 }; 14 16 config = lib.mkMerge [ 15 17 (lib.mkIf cfg.enable {
+21 -12
modules/nixos/traits/gpu/nvidia.nix
··· 1 - {config, ...}: { 2 - boot.kernelParams = ["nvidia.NVreg_PreserveVideoMemoryAllocations=1"]; 1 + { 2 + config, 3 + lib, 4 + ... 5 + }: let 6 + cfg = config.my.traits.gpu.nvidia; 7 + in { 8 + options.my.traits.gpu.nvidia.enable = lib.mkEnableOption "nvidia trait"; 9 + config = lib.mkIf cfg.enable { 10 + boot.kernelParams = ["nvidia.NVreg_PreserveVideoMemoryAllocations=1"]; 3 11 4 - hardware = { 5 - graphics.enable = true; 6 - nvidia = { 7 - modesetting.enable = true; 8 - nvidiaSettings = true; 9 - open = false; 10 - package = config.boot.kernelPackages.nvidiaPackages.latest; 11 - powerManagement.enable = true; 12 + hardware = { 13 + graphics.enable = true; 14 + nvidia = { 15 + modesetting.enable = true; 16 + nvidiaSettings = true; 17 + open = false; 18 + package = config.boot.kernelPackages.nvidiaPackages.latest; 19 + powerManagement.enable = true; 20 + }; 12 21 }; 13 - }; 14 22 15 - services.xserver.videoDrivers = ["nvidia"]; 23 + services.xserver.videoDrivers = ["nvidia"]; 24 + }; 16 25 }
+16 -10
modules/nixos/traits/kernel.nix
··· 1 1 { 2 + config, 2 3 lib, 3 4 pkgs, 4 5 ... 5 - }: { 6 - boot = { 7 - kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; 8 - kernelModules = [ 9 - "i2c-dev" 10 - "wireguard" 11 - ]; 6 + }: let 7 + cfg = config.my.traits.kernel; 8 + in { 9 + options.my.traits.kernel.enable = lib.mkEnableOption "kernel trait"; 10 + config = lib.mkIf cfg.enable { 11 + boot = { 12 + kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; 13 + kernelModules = [ 14 + "i2c-dev" 15 + "wireguard" 16 + ]; 17 + }; 18 + services.udev.extraRules = '' 19 + KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660" 20 + ''; 12 21 }; 13 - services.udev.extraRules = '' 14 - KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660" 15 - ''; 16 22 }
+18 -13
modules/nixos/traits/misc/rgb.nix
··· 1 1 { 2 2 config, 3 + lib, 3 4 pkgs, 4 5 ... 5 6 }: let 6 7 inherit (config.services.hardware.openrgb) package; 8 + cfg = config.my.traits.misc.rgb; 7 9 in { 8 - environment.systemPackages = [package]; 9 - services.hardware.openrgb = { 10 - enable = true; 11 - package = pkgs.openrgb-with-all-plugins; 12 - }; 13 - services.udev.packages = [package]; 14 - powerManagement = { 15 - powerDownCommands = '' 16 - ${package}/bin/openrgb --color 000000 17 - ''; 18 - powerUpCommands = '' 19 - ${package}/bin/openrgb --color 000000 20 - ''; 10 + options.my.traits.misc.rgb.enable = lib.mkEnableOption "RGB trait"; 11 + config = lib.mkIf cfg.enable { 12 + environment.systemPackages = [package]; 13 + services.hardware.openrgb = { 14 + enable = true; 15 + package = pkgs.openrgb-with-all-plugins; 16 + }; 17 + services.udev.packages = [package]; 18 + powerManagement = { 19 + powerDownCommands = '' 20 + ${package}/bin/openrgb --color 000000 21 + ''; 22 + powerUpCommands = '' 23 + ${package}/bin/openrgb --color 000000 24 + ''; 25 + }; 21 26 }; 22 27 }
+22 -13
modules/nixos/traits/pipewire.nix
··· 1 1 # Use pipewire audio 2 2 { 3 - hardware = { 4 - pulseaudio.enable = false; 5 - enableAllFirmware = true; 6 - }; 7 - security.rtkit.enable = true; 8 - services.pipewire = { 9 - enable = true; 10 - audio.enable = true; 11 - alsa.enable = true; 12 - alsa.support32Bit = true; 13 - pulse.enable = true; 14 - jack.enable = true; 15 - wireplumber.enable = true; 3 + config, 4 + lib, 5 + ... 6 + }: let 7 + cfg = config.my.traits.pipewire; 8 + in { 9 + options.my.traits.pipewire.enable = lib.mkEnableOption "pipewire trait"; 10 + config = lib.mkIf cfg.enable { 11 + hardware = { 12 + pulseaudio.enable = false; 13 + enableAllFirmware = true; 14 + }; 15 + security.rtkit.enable = true; 16 + services.pipewire = { 17 + enable = true; 18 + audio.enable = true; 19 + alsa.enable = true; 20 + alsa.support32Bit = true; 21 + pulse.enable = true; 22 + jack.enable = true; 23 + wireplumber.enable = true; 24 + }; 16 25 }; 17 26 }
+22 -18
modules/nixos/traits/users.nix
··· 9 9 }: let 10 10 inherit (lib.lpchaim.shared) defaults; 11 11 userName = defaults.name.user; 12 + cfg = config.my.traits.users; 12 13 in { 13 - users = { 14 - mutableUsers = false; 15 - groups.${userName} = { 16 - gid = 1000; 17 - }; 18 - extraUsers = { 19 - ${userName} = { 20 - uid = 1000; 21 - home = "/home/${userName}"; 22 - description = defaults.name.full; 23 - isNormalUser = true; 24 - group = userName; 25 - extraGroups = ["i2c" "networkmanager" "storage" "wheel"]; 26 - shell = pkgs.${defaults.shell}; 27 - hashedPasswordFile = "${config.sops.secrets."password".path}"; 14 + options.my.traits.users.enable = lib.mkEnableOption "users trait"; 15 + config = lib.mkIf cfg.enable { 16 + users = { 17 + mutableUsers = false; 18 + groups.${userName} = { 19 + gid = 1000; 28 20 }; 29 - root.hashedPassword = null; 21 + extraUsers = { 22 + ${userName} = { 23 + uid = 1000; 24 + home = "/home/${userName}"; 25 + description = defaults.name.full; 26 + isNormalUser = true; 27 + group = userName; 28 + extraGroups = ["i2c" "networkmanager" "storage" "wheel"]; 29 + shell = pkgs.${defaults.shell}; 30 + hashedPasswordFile = "${config.sops.secrets."password".path}"; 31 + }; 32 + root.hashedPassword = null; 33 + }; 30 34 }; 35 + nix.settings.trusted-users = ["root" "@wheel"]; 36 + systemd.services.ollama.serviceConfig.ReadWritePaths = [config.users.extraUsers.${userName}.home]; 31 37 }; 32 - nix.settings.trusted-users = ["root" "@wheel"]; 33 - systemd.services.ollama.serviceConfig.ReadWritePaths = [config.users.extraUsers.${userName}.home]; 34 38 }
+14 -9
modules/nixos/traits/virtualisation.nix
··· 3 3 lib, 4 4 pkgs, 5 5 ... 6 - }: { 7 - environment.systemPackages = with pkgs; [ 8 - distrobox 9 - ]; 10 - virtualisation = { 11 - docker = { 12 - enable = true; 13 - enableOnBoot = true; 14 - enableNvidia = lib.elem "nvidia" config.services.xserver.videoDrivers; 6 + }: let 7 + cfg = config.my.traits.virtualisation; 8 + in { 9 + options.my.traits.virtualisation.enable = lib.mkEnableOption "virtualisation trait"; 10 + config = lib.mkIf cfg.enable { 11 + environment.systemPackages = with pkgs; [ 12 + distrobox 13 + ]; 14 + virtualisation = { 15 + docker = { 16 + enable = true; 17 + enableOnBoot = true; 18 + enableNvidia = lib.elem "nvidia" config.services.xserver.videoDrivers; 19 + }; 15 20 }; 16 21 }; 17 22 }
+22 -12
modules/nixos/traits/wayland.nix
··· 1 1 # Use wayland instead of X11 2 2 # https://nixos.wiki/wiki/Wayland 3 - {pkgs, ...}: { 4 - services.xserver.displayManager.gdm.wayland = true; 5 - programs.xwayland.enable = true; 3 + { 4 + config, 5 + lib, 6 + pkgs, 7 + ... 8 + }: let 9 + cfg = config.my.traits.wayland; 10 + in { 11 + options.my.traits.wayland.enable = lib.mkEnableOption "wayland trait"; 12 + config = lib.mkIf cfg.enable { 13 + services.xserver.displayManager.gdm.wayland = true; 14 + programs.xwayland.enable = true; 6 15 7 - environment.sessionVariables.NIXOS_OZONE_WL = "1"; 8 - environment.systemPackages = with pkgs; [ 9 - wl-clipboard 10 - nur.repos.ataraxiasjel.waydroid-script 11 - ]; 16 + environment.sessionVariables.NIXOS_OZONE_WL = "1"; 17 + environment.systemPackages = with pkgs; [ 18 + wl-clipboard 19 + nur.repos.ataraxiasjel.waydroid-script 20 + ]; 12 21 13 - # To init: sudo waydroid init -s GAPPS 14 - # See also: https://nixos.wiki/wiki/WayDroid 15 - # and https://github.com/casualsnek/waydroid_script 16 - virtualisation.waydroid.enable = true; 22 + # To init: sudo waydroid init -s GAPPS 23 + # See also: https://nixos.wiki/wiki/WayDroid 24 + # and https://github.com/casualsnek/waydroid_script 25 + virtualisation.waydroid.enable = true; 26 + }; 17 27 }
-19
overlays/default.nix
··· 1 1 {inputs, ...}: let 2 - inherit (inputs) self; 3 2 inherit (inputs.nixpkgs) lib; 4 3 in 5 4 final: prev: { ··· 8 7 mesa-radeonsi-jupiter 9 8 mesa-radv-jupiter 10 9 ; 11 - nix-conf = let 12 - homeCfg = self.legacyPackages.${prev.system}.homeConfigurations.minimal.config.home; 13 - nixCfg = homeCfg.file."${homeCfg.homeDirectory}/.config/nix/nix.conf".source; 14 - in 15 - nixCfg; 16 - # Temporary fix for xdg-desktop-portal-gnome 17 - # See https://github.com/NixOS/nixpkgs/pull/345979 18 - xdg-desktop-portal-gtk = prev.xdg-desktop-portal-gtk.overrideAttrs (old: { 19 - buildInputs = [ 20 - prev.glib 21 - prev.gtk3 22 - prev.xdg-desktop-portal 23 - prev.gsettings-desktop-schemas # settings exposed by settings portal 24 - prev.gnome-desktop 25 - prev.gnome-settings-daemon # schemas needed for settings api (mostly useless now that fonts were moved to g-d-s, just mouse and xsettings) 26 - ]; 27 - mesonFlags = []; 28 - }); 29 10 proton-ge-bin-versions = let 30 11 latestPackage = prev.proton-ge-bin; 31 12 legacyVersions = {
+12 -20
systems/aarch64-linux/raspberrypi/default.nix
··· 1 - { 2 - lib, 3 - pkgs, 4 - ... 5 - }: let 6 - inherit (lib.lpchaim.nixos) getTraitModules; 7 - in { 8 - imports = 9 - [ 10 - ./hardware-configuration.nix 11 - ./disko.nix 12 - ] 13 - ++ (getTraitModules [ 14 - "composite/base" 15 - ]); 1 + {pkgs, ...}: { 2 + imports = [ 3 + ./hardware-configuration.nix 4 + ./disko.nix 5 + ]; 16 6 17 - config = { 18 - system.stateVersion = "24.05"; 19 - hardware.graphics.enable = false; 20 - boot.kernelPackages = pkgs.linuxPackages_latest; 21 - my.security.u2f.relaxed = true; 7 + my.traits = { 8 + composite.base.enable = true; 22 9 }; 10 + my.security.u2f.relaxed = true; 11 + 12 + hardware.graphics.enable = false; 13 + boot.kernelPackages = pkgs.linuxPackages_latest; 14 + system.stateVersion = "24.05"; 23 15 }
-7
systems/minimal/default.nix
··· 1 - {lib, ...}: let 2 - inherit (lib.lpchaim.nixos) getTraitModules; 3 - in { 4 - imports = getTraitModules [ 5 - "composite/base" 6 - ]; 7 - }
+17 -19
systems/x86_64-linux/desktop/default.nix
··· 4 4 pkgs, 5 5 ... 6 6 }: let 7 - inherit (lib.lpchaim.nixos) getTraitModules; 8 7 inherit (lib.lpchaim.shared.defaults) name; 9 8 inherit (lib.lpchaim.storage.btrfs) mkStorage; 10 9 in { 11 - imports = 12 - [ 13 - ./hardware-configuration.nix 14 - (mkStorage { 15 - device = "/dev/disk/by-id/nvme-Corsair_MP600_PRO_XT_214279380001310131BD"; 16 - swapSize = "35G"; 17 - }) 18 - ] 19 - ++ (getTraitModules [ 20 - "composite/base" 21 - "formfactor/desktop" 22 - "de/gnome" 23 - "de/hyprland" 24 - "gaming" 25 - "gpu/nvidia" 26 - "misc/rgb" 27 - ]); 10 + imports = [ 11 + ./hardware-configuration.nix 12 + (mkStorage { 13 + device = "/dev/disk/by-id/nvme-Corsair_MP600_PRO_XT_214279380001310131BD"; 14 + swapSize = "35G"; 15 + }) 16 + ]; 28 17 29 - system.stateVersion = "23.11"; 18 + my.traits = { 19 + composite.base.enable = true; 20 + formfactor.desktop.enable = true; 21 + de.gnome.enable = true; 22 + de.hyprland.enable = true; 23 + gpu.nvidia.enable = true; 24 + misc.rgb.enable = true; 25 + }; 30 26 my.gaming.enable = true; 31 27 my.networking.tailscale.trusted = true; 32 28 my.security.secureboot.enable = true; ··· 59 55 ExecStart = "${pkgs.ntfs3g}/bin/ntfsfix ${path} --clear-dirty"; 60 56 }; 61 57 }; 58 + 59 + system.stateVersion = "23.11"; 62 60 }
+15 -18
systems/x86_64-linux/laptop/default.nix
··· 1 1 {lib, ...}: let 2 - inherit (lib.lpchaim.nixos) getTraitModules; 3 2 inherit (lib.lpchaim.storage.btrfs) mkStorage; 4 3 in { 5 - imports = 6 - [ 7 - ./hardware-configuration.nix 8 - (mkStorage { 9 - device = "/dev/disk/by-id/nvme-WDSN740-SDDPNQD-512G-1004_23360G804890"; 10 - swapSize = "17G"; 11 - }) 12 - ] 13 - ++ (getTraitModules [ 14 - "composite/base" 15 - "formfactor/laptop" 16 - "de/gnome" 17 - "de/hyprland" 18 - "gaming" 19 - ]); 4 + imports = [ 5 + ./hardware-configuration.nix 6 + (mkStorage { 7 + device = "/dev/disk/by-id/nvme-WDSN740-SDDPNQD-512G-1004_23360G804890"; 8 + swapSize = "17G"; 9 + }) 10 + ]; 20 11 21 - networking.hostName = "laptop"; 22 - system.stateVersion = "23.11"; 12 + my.traits = { 13 + composite.base.enable = true; 14 + formfactor.laptop.enable = true; 15 + de.gnome.enable = true; 16 + de.hyprland.enable = true; 17 + }; 23 18 my.gaming.steam.enable = true; 24 19 my.networking.tailscale.trusted = true; 25 20 my.security.secureboot.enable = true; 21 + 22 + system.stateVersion = "23.11"; 26 23 }
+52 -56
systems/x86_64-linux/steamdeck/default.nix
··· 5 5 ... 6 6 }: let 7 7 inherit (lib) mkIf mkForce; 8 - inherit (lib.lpchaim.nixos) getTraitModules; 9 8 inherit (lib.lpchaim.shared) defaults; 10 9 inherit (lib.lpchaim.storage.btrfs) mkStorage; 11 10 in { 12 - imports = 13 - [ 14 - inputs.jovian.nixosModules.default 15 - ./hardware-configuration.nix 16 - (mkStorage { 17 - device = "/dev/disk/by-id/nvme-KINGSTON_OM3PDP3512B-A01_50026B7685D47463"; 18 - swapSize = "17G"; 19 - }) 20 - ] 21 - ++ (getTraitModules [ 22 - "users" 23 - "wayland" 24 - "pipewire" 25 - "de/gnome" 26 - "gaming" 27 - ]); 11 + imports = [ 12 + inputs.jovian.nixosModules.default 13 + ./hardware-configuration.nix 14 + (mkStorage { 15 + device = "/dev/disk/by-id/nvme-KINGSTON_OM3PDP3512B-A01_50026B7685D47463"; 16 + swapSize = "17G"; 17 + }) 18 + ]; 28 19 29 - config = { 30 - system.stateVersion = "24.05"; 31 - my.gaming.enable = false; 32 - my.gaming.steam.enable = true; 33 - my.security.u2f.relaxed = true; 20 + my.traits = { 21 + users.enable = true; 22 + wayland.enable = true; 23 + pipewire.enable = true; 24 + de.gnome.enable = true; 25 + }; 26 + my.gaming.enable = false; 27 + my.gaming.steam.enable = true; 28 + my.security.u2f.relaxed = true; 34 29 35 - jovian = { 36 - steam = { 37 - inherit (defaults.name) user; 38 - enable = true; 39 - autoStart = true; 40 - desktopSession = "gnome"; 41 - }; 42 - steamos = { 43 - enableMesaPatches = true; 44 - useSteamOSConfig = true; 45 - }; 46 - decky-loader.enable = true; 47 - devices.steamdeck = { 48 - enable = true; 49 - autoUpdate = true; 50 - enableGyroDsuService = true; 51 - }; 30 + jovian = { 31 + steam = { 32 + inherit (defaults.name) user; 33 + enable = true; 34 + autoStart = true; 35 + desktopSession = "gnome"; 52 36 }; 53 - 54 - services = mkIf config.jovian.steam.autoStart { 55 - displayManager.sddm.enable = mkForce false; 56 - xserver.displayManager.gdm.enable = mkForce false; 37 + steamos = { 38 + enableMesaPatches = true; 39 + useSteamOSConfig = true; 57 40 }; 58 - time = { 59 - hardwareClockInLocalTime = mkForce false; 60 - timeZone = mkForce null; 41 + decky-loader.enable = true; 42 + devices.steamdeck = { 43 + enable = true; 44 + autoUpdate = true; 45 + enableGyroDsuService = true; 61 46 }; 47 + }; 62 48 63 - fileSystems."/run/media/${defaults.name.user}/sdcard" = { 64 - device = "/dev/disk/by-id/mmc-EF8S5_0x3b3163d0-part1"; 65 - options = [ 66 - "defaults" 67 - "subvol=@" 68 - "compress=zstd" 69 - "noatime" 70 - "nofail" 71 - ]; 72 - }; 49 + services = mkIf config.jovian.steam.autoStart { 50 + displayManager.sddm.enable = mkForce false; 51 + xserver.displayManager.gdm.enable = mkForce false; 52 + }; 53 + time = { 54 + hardwareClockInLocalTime = mkForce false; 55 + timeZone = mkForce null; 56 + }; 57 + 58 + fileSystems."/run/media/${defaults.name.user}/sdcard" = { 59 + device = "/dev/disk/by-id/mmc-EF8S5_0x3b3163d0-part1"; 60 + options = [ 61 + "defaults" 62 + "subvol=@" 63 + "compress=zstd" 64 + "noatime" 65 + "nofail" 66 + ]; 73 67 }; 68 + 69 + system.stateVersion = "24.05"; 74 70 }