From 9567cce5fa8a6bfdd0288b77806def26767d0a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Thu, 11 May 2023 17:33:14 +0200 Subject: [PATCH 1/6] refactor!: import modules recursively --- flake.nix | 13 -- hosts/nixos-desktop/default.nix | 6 + hosts/nixos-laptop/default.nix | 5 + lib/default.nix | 30 ++++ .../bin/{cycleSinks.nix => _cycleSinks.nix} | 0 .../bin/{protonge.nix => _protonge.nix} | 0 modules/config/bin/{share.nix => _share.nix} | 0 .../bin/{sxhkdHelp.nix => _sxhkdHelp.nix} | 0 modules/config/bin/default.nix | 8 +- modules/config/default.nix | 5 - .../{catppuccin.nix => _catppuccin.nix} | 0 modules/config/theming/catppuccin-frappe.nix | 2 +- modules/config/theming/catppuccin-latte.nix | 2 +- .../config/theming/catppuccin-macchiato.nix | 2 +- modules/config/theming/catppuccin-mocha.nix | 2 +- .../default.nix} | 0 .../{ => wallpapers}/a_short_walk.png | Bin .../{ => wallpapers}/blender_pink_blue.jpg | Bin .../wallpapers/{ => wallpapers}/elephants.jpg | Bin .../{ => wallpapers}/forest_road.jpg | Bin .../{ => wallpapers}/little-ships.png | Bin .../{ => wallpapers}/old-hardware.jpg | Bin .../wallpapers/{ => wallpapers}/stardust.jpg | Bin .../{ => wallpapers}/whale_in_sky.jpg | Bin modules/default.nix | 9 +- modules/profiles/desktop.nix | 130 ++++++++++-------- modules/profiles/gaming.nix | 30 ++-- modules/profiles/personal.nix | 109 ++++++++------- modules/profiles/ripping.nix | 27 +++- modules/programs/default.nix | 5 - .../hyprland/{config.nix => _config.nix} | 0 modules/programs/hyprland/default.nix | 2 +- modules/programs/wallpaper/wallpaper.sh | 8 +- modules/services/default.nix | 5 - modules/virtualisation/default.nix | 5 - 35 files changed, 227 insertions(+), 178 deletions(-) rename modules/config/bin/{cycleSinks.nix => _cycleSinks.nix} (100%) rename modules/config/bin/{protonge.nix => _protonge.nix} (100%) rename modules/config/bin/{share.nix => _share.nix} (100%) rename modules/config/bin/{sxhkdHelp.nix => _sxhkdHelp.nix} (100%) delete mode 100644 modules/config/default.nix rename modules/config/theming/{catppuccin.nix => _catppuccin.nix} (100%) rename modules/config/{wallpapers.nix => wallpapers/default.nix} (100%) rename modules/config/wallpapers/{ => wallpapers}/a_short_walk.png (100%) rename modules/config/wallpapers/{ => wallpapers}/blender_pink_blue.jpg (100%) rename modules/config/wallpapers/{ => wallpapers}/elephants.jpg (100%) rename modules/config/wallpapers/{ => wallpapers}/forest_road.jpg (100%) rename modules/config/wallpapers/{ => wallpapers}/little-ships.png (100%) rename modules/config/wallpapers/{ => wallpapers}/old-hardware.jpg (100%) rename modules/config/wallpapers/{ => wallpapers}/stardust.jpg (100%) rename modules/config/wallpapers/{ => wallpapers}/whale_in_sky.jpg (100%) delete mode 100644 modules/programs/default.nix rename modules/programs/hyprland/{config.nix => _config.nix} (100%) delete mode 100644 modules/services/default.nix delete mode 100644 modules/virtualisation/default.nix diff --git a/flake.nix b/flake.nix index 19877ec..e5115ea 100644 --- a/flake.nix +++ b/flake.nix @@ -121,16 +121,8 @@ ║ Modules ║ ╚══════════════════════════════════════════════════════════╝ */ - nixosModules = utils.lib.exportModules [ - ./modules/profiles/base.nix - ./modules/profiles/gaming.nix - ./modules/profiles/desktop.nix - ./modules/profiles/personal.nix - ]; - hostDefaults.modules = [ ./modules/default.nix - self.nixosModules.base inputs.home-manager.nixosModule { home-manager = { @@ -145,16 +137,11 @@ hosts.nixos-laptop.modules = [ ./hosts/nixos-laptop - self.nixosModules.desktop - self.nixosModules.personal ]; hosts.nixos-desktop.modules = [ ./hosts/nixos-desktop - self.nixosModules.desktop - self.nixosModules.gaming - self.nixosModules.personal ]; /* diff --git a/hosts/nixos-desktop/default.nix b/hosts/nixos-desktop/default.nix index b88a65e..f0c06dd 100644 --- a/hosts/nixos-desktop/default.nix +++ b/hosts/nixos-desktop/default.nix @@ -10,7 +10,13 @@ # Include the results of the hardware scan. ./hardware-configuration.nix ]; + my = { + profiles = { + desktop.enable = true; + gaming.enable = true; + personal.enable = true; + }; programs.hyprland.nvidiaSupport = true; services.mullvad.enable = true; programs.ledger.enable = true; diff --git a/hosts/nixos-laptop/default.nix b/hosts/nixos-laptop/default.nix index 42c242c..f58998f 100644 --- a/hosts/nixos-laptop/default.nix +++ b/hosts/nixos-laptop/default.nix @@ -10,6 +10,11 @@ ./hardware-configuration.nix ]; + my.profiles = { + desktop.enable = true; + personal.enable = true; + }; + # BOOT boot = { supportedFilesystems = [ "btrfs" ]; diff --git a/lib/default.nix b/lib/default.nix index f7a8b1c..a19b79b 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -47,4 +47,34 @@ lib.makeExtensible (_: rec { mapModules' = f: dir: lib.attrValues (mapModules f dir); listModules = mapModules' (path: path); + + mapModulesRec = f: dir: + let + filterDirs = name: type: + let + isPublic = !(lib.hasPrefix "_" name); + isSomething = type != null; + isDir = type == "directory"; + isDefault = isDir && builtins.pathExists "${toString dir}/${name}/default.nix"; + in + isPublic && isSomething && isDir && !isDefault; + + subDirs = lib.filterAttrs filterDirs (builtins.readDir dir); + + mkSubModule = name: _: + let + path = "${toString dir}/${name}"; + in + lib.nameValuePair name (mapModulesRec f path); + in + mapModules f dir // + (lib.mapAttrs' mkSubModule subDirs); + + mapModulesRec' = f: dir: + let + attrValuesRec = attrs: map (values: if lib.isAttrs values then attrValuesRec values else values) (lib.attrValues attrs); + in + lib.flatten (attrValuesRec (mapModulesRec f dir)); + + listModulesRec = mapModulesRec' (path: path); }) diff --git a/modules/config/bin/cycleSinks.nix b/modules/config/bin/_cycleSinks.nix similarity index 100% rename from modules/config/bin/cycleSinks.nix rename to modules/config/bin/_cycleSinks.nix diff --git a/modules/config/bin/protonge.nix b/modules/config/bin/_protonge.nix similarity index 100% rename from modules/config/bin/protonge.nix rename to modules/config/bin/_protonge.nix diff --git a/modules/config/bin/share.nix b/modules/config/bin/_share.nix similarity index 100% rename from modules/config/bin/share.nix rename to modules/config/bin/_share.nix diff --git a/modules/config/bin/sxhkdHelp.nix b/modules/config/bin/_sxhkdHelp.nix similarity index 100% rename from modules/config/bin/sxhkdHelp.nix rename to modules/config/bin/_sxhkdHelp.nix diff --git a/modules/config/bin/default.nix b/modules/config/bin/default.nix index 5cbf5ed..abf3926 100644 --- a/modules/config/bin/default.nix +++ b/modules/config/bin/default.nix @@ -7,10 +7,10 @@ with lib; let cfg = config.my.bin; - cycleSinks = import ./cycleSinks.nix { inherit pkgs; }; - protonge = import ./protonge.nix { inherit pkgs; }; - share = import ./share.nix { inherit pkgs; }; - sxhkdHelp = import ./sxhkdHelp.nix { inherit pkgs; }; + cycleSinks = import ./_cycleSinks.nix { inherit pkgs; }; + protonge = import ./_protonge.nix { inherit pkgs; }; + share = import ./_share.nix { inherit pkgs; }; + sxhkdHelp = import ./_sxhkdHelp.nix { inherit pkgs; }; in { options.my.bin.enable = mkEnableOption "bin"; diff --git a/modules/config/default.nix b/modules/config/default.nix deleted file mode 100644 index 1a044e4..0000000 --- a/modules/config/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ lib, ... }: - -{ - imports = lib.my.listModules ./.; -} diff --git a/modules/config/theming/catppuccin.nix b/modules/config/theming/_catppuccin.nix similarity index 100% rename from modules/config/theming/catppuccin.nix rename to modules/config/theming/_catppuccin.nix diff --git a/modules/config/theming/catppuccin-frappe.nix b/modules/config/theming/catppuccin-frappe.nix index 6be8d62..0a98a0f 100644 --- a/modules/config/theming/catppuccin-frappe.nix +++ b/modules/config/theming/catppuccin-frappe.nix @@ -6,7 +6,7 @@ let in { config = mkIf (cfg.enable && cfg.scheme == "catppuccin-frappe") - (import ./catppuccin.nix + (import ./_catppuccin.nix { inherit config lib pkgs; flavor = "mocha"; diff --git a/modules/config/theming/catppuccin-latte.nix b/modules/config/theming/catppuccin-latte.nix index 96051cb..3c64d83 100644 --- a/modules/config/theming/catppuccin-latte.nix +++ b/modules/config/theming/catppuccin-latte.nix @@ -6,7 +6,7 @@ let in { config = mkIf (cfg.enable && cfg.scheme == "catppuccin-latte") - (import ./catppuccin.nix + (import ./_catppuccin.nix { inherit config lib pkgs; flavor = "mocha"; diff --git a/modules/config/theming/catppuccin-macchiato.nix b/modules/config/theming/catppuccin-macchiato.nix index c8e0a6c..f65449f 100644 --- a/modules/config/theming/catppuccin-macchiato.nix +++ b/modules/config/theming/catppuccin-macchiato.nix @@ -6,7 +6,7 @@ let in { config = mkIf (cfg.enable && cfg.scheme == "catppuccin-macchiato") - (import ./catppuccin.nix + (import ./_catppuccin.nix { inherit config lib pkgs; flavor = "mocha"; diff --git a/modules/config/theming/catppuccin-mocha.nix b/modules/config/theming/catppuccin-mocha.nix index 4cfc510..732ab23 100644 --- a/modules/config/theming/catppuccin-mocha.nix +++ b/modules/config/theming/catppuccin-mocha.nix @@ -6,7 +6,7 @@ let in { config = mkIf (cfg.enable && cfg.scheme == "catppuccin-mocha") - (import ./catppuccin.nix + (import ./_catppuccin.nix { inherit config lib pkgs; flavor = "mocha"; diff --git a/modules/config/wallpapers.nix b/modules/config/wallpapers/default.nix similarity index 100% rename from modules/config/wallpapers.nix rename to modules/config/wallpapers/default.nix diff --git a/modules/config/wallpapers/a_short_walk.png b/modules/config/wallpapers/wallpapers/a_short_walk.png similarity index 100% rename from modules/config/wallpapers/a_short_walk.png rename to modules/config/wallpapers/wallpapers/a_short_walk.png diff --git a/modules/config/wallpapers/blender_pink_blue.jpg b/modules/config/wallpapers/wallpapers/blender_pink_blue.jpg similarity index 100% rename from modules/config/wallpapers/blender_pink_blue.jpg rename to modules/config/wallpapers/wallpapers/blender_pink_blue.jpg diff --git a/modules/config/wallpapers/elephants.jpg b/modules/config/wallpapers/wallpapers/elephants.jpg similarity index 100% rename from modules/config/wallpapers/elephants.jpg rename to modules/config/wallpapers/wallpapers/elephants.jpg diff --git a/modules/config/wallpapers/forest_road.jpg b/modules/config/wallpapers/wallpapers/forest_road.jpg similarity index 100% rename from modules/config/wallpapers/forest_road.jpg rename to modules/config/wallpapers/wallpapers/forest_road.jpg diff --git a/modules/config/wallpapers/little-ships.png b/modules/config/wallpapers/wallpapers/little-ships.png similarity index 100% rename from modules/config/wallpapers/little-ships.png rename to modules/config/wallpapers/wallpapers/little-ships.png diff --git a/modules/config/wallpapers/old-hardware.jpg b/modules/config/wallpapers/wallpapers/old-hardware.jpg similarity index 100% rename from modules/config/wallpapers/old-hardware.jpg rename to modules/config/wallpapers/wallpapers/old-hardware.jpg diff --git a/modules/config/wallpapers/stardust.jpg b/modules/config/wallpapers/wallpapers/stardust.jpg similarity index 100% rename from modules/config/wallpapers/stardust.jpg rename to modules/config/wallpapers/wallpapers/stardust.jpg diff --git a/modules/config/wallpapers/whale_in_sky.jpg b/modules/config/wallpapers/wallpapers/whale_in_sky.jpg similarity index 100% rename from modules/config/wallpapers/whale_in_sky.jpg rename to modules/config/wallpapers/wallpapers/whale_in_sky.jpg diff --git a/modules/default.nix b/modules/default.nix index 6e3b243..70fe578 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,9 +1,4 @@ +{ lib, ... }: { - imports = [ - ./config - ./programs - ./security - ./services - ./virtualisation - ]; + imports = lib.my.listModulesRec ./.; } diff --git a/modules/profiles/desktop.nix b/modules/profiles/desktop.nix index ac348a0..678df5c 100644 --- a/modules/profiles/desktop.nix +++ b/modules/profiles/desktop.nix @@ -1,73 +1,83 @@ { lib +, config , pkgs , ... }: -with lib; { - my = { - yubikey = { - enable = mkDefault true; - luksSupport = { + +with lib; +let + cfg = config.my.profiles.desktop; +in +{ + options.my.profiles.desktop.enable = mkEnableOption "desktop profile"; + + config = mkIf cfg.enable { + my = { + yubikey = { enable = mkDefault true; - devices = mkDefault [ "enc" ]; + luksSupport = { + enable = mkDefault true; + devices = mkDefault [ "enc" ]; + }; + }; + wallpapers.enable = mkDefault true; + theming = { + enable = mkDefault true; + scheme = mkDefault "catppuccin-macchiato"; + }; + virtualisation.podman.enable = mkDefault true; + + programs = { + chromium.enable = mkDefault true; + firefox.enable = mkDefault true; + gpg.enable = mkDefault true; + hyprland.enable = mkDefault true; + logseq.enable = mkDefault true; + nvim.enable = mkDefault true; + python.versions."311".enable = mkDefault true; + spotify.enable = mkDefault true; + ssh.enable = mkDefault true; + thunar.enable = mkDefault true; + wallpaper.enable = mkDefault true; + zathura.enable = mkDefault true; + }; + services = { + dunst.enable = mkDefault true; + gammastep.enable = true; + kdeconnect.enable = mkDefault true; + printing.enable = true; + wireguard.enable = true; }; }; - wallpapers.enable = mkDefault true; - theming = { - enable = mkDefault true; - scheme = mkDefault "catppuccin-macchiato"; - }; - virtualisation.podman.enable = mkDefault true; - programs = { - chromium.enable = mkDefault true; - firefox.enable = mkDefault true; - gpg.enable = mkDefault true; - hyprland.enable = mkDefault true; - logseq.enable = mkDefault true; - nvim.enable = mkDefault true; - python.versions."311".enable = mkDefault true; - spotify.enable = mkDefault true; - ssh.enable = mkDefault true; - thunar.enable = mkDefault true; - wallpaper.enable = mkDefault true; - zathura.enable = mkDefault true; + environment.systemPackages = with pkgs; [ + anki + calibre + keepassxc + nixpkgs-review + pavucontrol + stable.libreoffice # HACK to fix build error + stable.signal-desktop + texlive.combined.scheme-full + thunderbird + vlc + ]; + + programs.nix-ld.enable = true; + + home-manager.users.moritz = { + services.nextcloud-client = { + enable = true; + startInBackground = true; + }; }; services = { - dunst.enable = mkDefault true; - gammastep.enable = true; - kdeconnect.enable = mkDefault true; - printing.enable = true; - wireguard.enable = true; - }; - }; - - environment.systemPackages = with pkgs; [ - anki - calibre - keepassxc - nixpkgs-review - pavucontrol - stable.libreoffice # HACK to fix build error - stable.signal-desktop - texlive.combined.scheme-full - thunderbird - vlc - ]; - - programs.nix-ld.enable = true; - - home-manager.users.moritz = { - services.nextcloud-client = { - enable = true; - startInBackground = true; - }; - }; - services = { - gnome.gnome-keyring.enable = true; - pipewire = { - enable = true; - alsa.enable = true; - pulse.enable = true; + gnome.gnome-keyring.enable = true; + pipewire = { + enable = true; + alsa.enable = true; + pulse.enable = true; + }; }; }; } diff --git a/modules/profiles/gaming.nix b/modules/profiles/gaming.nix index e773f20..bf493fd 100644 --- a/modules/profiles/gaming.nix +++ b/modules/profiles/gaming.nix @@ -1,11 +1,23 @@ -{ pkgs +{ lib +, config +, pkgs , ... -}: { - programs.steam.enable = true; - environment.systemPackages = with pkgs; [ - lutris - legendary-gl - heroic - mangohud - ]; +}: + +with lib; +let + cfg = config.my.profiles.gaming; +in +{ + options.my.profiles.gaming.enable = mkEnableOption "Enable gaming profile"; + + config = mkIf cfg.enable { + programs.steam.enable = true; + environment.systemPackages = with pkgs; [ + lutris + legendary-gl + heroic + mangohud + ]; + }; } diff --git a/modules/profiles/personal.nix b/modules/profiles/personal.nix index 2b227c3..37cca50 100644 --- a/modules/profiles/personal.nix +++ b/modules/profiles/personal.nix @@ -1,63 +1,74 @@ -{ lib, ... }: +{ lib +, config +, ... +}: with lib; +let + cfg = config.my.profiles.personal; +in { - my = { - services = { - openconnect.enable = true; - synology-drive.enable = true; - }; - programs = { - ssh.includeSecrets = mkDefault [ ../../secrets/ssh-home.age ]; - git.signing = mkDefault true; - hub.enable = mkDefault true; - firefox.arkenfox = { - enable = mkDefault true; - overrides = mkDefault { - ## arkenfox overrides - # automatic search - "keyword.enabled" = true; - "browser.search.suggest.enabled" = true; - "browser.urlbar.suggest.searches" = true; + options.my.profiles.personal.enable = mkEnableOption "personal profile"; - # startup page - "browser.startup.homepage" = "https://searxng.moritzboeh.me/"; - "browser.startup.page" = 1; + config = mkIf cfg.enable + { + my = { + services = { + openconnect.enable = true; + synology-drive.enable = true; + }; + programs = { + ssh.includeSecrets = mkDefault [ ../../secrets/ssh-home.age ]; + git.signing = mkDefault true; + hub.enable = mkDefault true; + firefox.arkenfox = { + enable = mkDefault true; + overrides = mkDefault { + ## arkenfox overrides + # automatic search + "keyword.enabled" = true; + "browser.search.suggest.enabled" = true; + "browser.urlbar.suggest.searches" = true; - # drm - "media.eme.enabled" = true; + # startup page + "browser.startup.homepage" = "https://searxng.moritzboeh.me/"; + "browser.startup.page" = 1; - # sanitisation - "privacy.clearOnShutdown.history" = false; + # drm + "media.eme.enabled" = true; - # disable letterboxing - "privacy.resistFingerprinting.letterboxing" = false; + # sanitisation + "privacy.clearOnShutdown.history" = false; - ## OTHER - # Dont show warning when accessing about:config - "browser.aboutConfig.showWarning" = false; + # disable letterboxing + "privacy.resistFingerprinting.letterboxing" = false; - # Hide bookmarks - "browser.toolbars.bookmarks.visibility" = "never"; + ## OTHER + # Dont show warning when accessing about:config + "browser.aboutConfig.showWarning" = false; - # Smooth scrolling - "general.smoothScroll.lines.durationMaxMS" = 125; - "general.smoothScroll.lines.durationMinMS" = 125; - "general.smoothScroll.mouseWheel.durationMaxMS" = 200; - "general.smoothScroll.mouseWheel.durationMinMS" = 100; - "general.smoothScroll.msdPhysics.enabled" = true; - "general.smoothScroll.other.durationMaxMS" = 125; - "general.smoothScroll.other.durationMinMS" = 125; - "general.smoothScroll.pages.durationMaxMS" = 125; - "general.smoothScroll.pages.durationMinMS" = 125; - "mousewheel.min_line_scroll_amount" = 40; - "mousewheel.system_scroll_override_on_root_content.enabled" = true; - "mousewheel.system_scroll_override_on_root_content.horizontal.factor" = 175; - "mousewheel.system_scroll_override_on_root_content.vertical.factor" = 175; - "toolkit.scrollbox.horizontalScrollDistance" = 6; - "toolkit.scrollbox.verticalScrollDistance" = 2; + # Hide bookmarks + "browser.toolbars.bookmarks.visibility" = "never"; + + # Smooth scrolling + "general.smoothScroll.lines.durationMaxMS" = 125; + "general.smoothScroll.lines.durationMinMS" = 125; + "general.smoothScroll.mouseWheel.durationMaxMS" = 200; + "general.smoothScroll.mouseWheel.durationMinMS" = 100; + "general.smoothScroll.msdPhysics.enabled" = true; + "general.smoothScroll.other.durationMaxMS" = 125; + "general.smoothScroll.other.durationMinMS" = 125; + "general.smoothScroll.pages.durationMaxMS" = 125; + "general.smoothScroll.pages.durationMinMS" = 125; + "mousewheel.min_line_scroll_amount" = 40; + "mousewheel.system_scroll_override_on_root_content.enabled" = true; + "mousewheel.system_scroll_override_on_root_content.horizontal.factor" = 175; + "mousewheel.system_scroll_override_on_root_content.vertical.factor" = 175; + "toolkit.scrollbox.horizontalScrollDistance" = 6; + "toolkit.scrollbox.verticalScrollDistance" = 2; + }; + }; }; }; }; - }; } diff --git a/modules/profiles/ripping.nix b/modules/profiles/ripping.nix index 61289f9..d01d1ac 100644 --- a/modules/profiles/ripping.nix +++ b/modules/profiles/ripping.nix @@ -1,10 +1,23 @@ -{ pkgs }: +{ lib +, config +, pkgs +, ... +}: + +with lib; +let + cfg = config.my.profiles.ripping; +in { - environment.systemPackages = with pkgs; [ - # ripping - abcde - handbrake - picard - ]; + options.my.profiles.ripping.enable = mkEnableOption "ripping profile"; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + # ripping + abcde + handbrake + picard + ]; + }; } diff --git a/modules/programs/default.nix b/modules/programs/default.nix deleted file mode 100644 index 1a044e4..0000000 --- a/modules/programs/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ lib, ... }: - -{ - imports = lib.my.listModules ./.; -} diff --git a/modules/programs/hyprland/config.nix b/modules/programs/hyprland/_config.nix similarity index 100% rename from modules/programs/hyprland/config.nix rename to modules/programs/hyprland/_config.nix diff --git a/modules/programs/hyprland/default.nix b/modules/programs/hyprland/default.nix index 654a13a..42f39c6 100644 --- a/modules/programs/hyprland/default.nix +++ b/modules/programs/hyprland/default.nix @@ -48,7 +48,7 @@ in enable = true; package = hyprland; recommendedEnvironment = true; - extraConfig = import ./config.nix args; + extraConfig = import ./_config.nix args; }; }; diff --git a/modules/programs/wallpaper/wallpaper.sh b/modules/programs/wallpaper/wallpaper.sh index 5b52710..2cc7e17 100644 --- a/modules/programs/wallpaper/wallpaper.sh +++ b/modules/programs/wallpaper/wallpaper.sh @@ -5,7 +5,7 @@ WALLPAPERS=$(find "$WALLPAPERS_PATH" -type f,l) function help() { echo "Usage:" - echo -e " wallpaper [OPTIONS] [PATH]" + echo -e " wallpaper [OPTIONS] [PATH]" echo "" echo "Options:" echo -e " -h, --help \n\t Show this help message and exit" @@ -60,12 +60,12 @@ done set -- "${POSITIONAL[@]}" # restore positional arguments if [[ $# -gt 1 ]]; then - help - exit 1 + help + exit 1 fi if [[ $# -eq 1 ]]; then - WALLPAPER="$1" + WALLPAPER="$1" fi if [[ -z ${WALLPAPER+x} ]]; then diff --git a/modules/services/default.nix b/modules/services/default.nix deleted file mode 100644 index 1a044e4..0000000 --- a/modules/services/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ lib, ... }: - -{ - imports = lib.my.listModules ./.; -} diff --git a/modules/virtualisation/default.nix b/modules/virtualisation/default.nix deleted file mode 100644 index 1a044e4..0000000 --- a/modules/virtualisation/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ lib, ... }: - -{ - imports = lib.my.listModules ./.; -} From bd88d8382c70f6a5b0e8518d78fb64af2172a9f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Thu, 11 May 2023 21:48:38 +0200 Subject: [PATCH 2/6] refactor(flake): hand roll flake --- flake.lock | 23 +---- flake.nix | 152 +++++++++++++++++++-------------- hosts/nixos-desktop/system.nix | 1 + hosts/nixos-laptop/system.nix | 1 + overlays/channels.nix | 12 --- 5 files changed, 89 insertions(+), 100 deletions(-) create mode 100644 hosts/nixos-desktop/system.nix create mode 100644 hosts/nixos-laptop/system.nix delete mode 100644 overlays/channels.nix diff --git a/flake.lock b/flake.lock index 3577110..b514e2c 100644 --- a/flake.lock +++ b/flake.lock @@ -980,8 +980,7 @@ "nvim-treesitter-textsubjects": "nvim-treesitter-textsubjects", "pre-commit-hooks": "pre-commit-hooks", "smartcolumn-nvim": "smartcolumn-nvim", - "stable": "stable", - "utils": "utils" + "stable": "stable" } }, "rust-overlay": { @@ -1083,26 +1082,6 @@ "type": "github" } }, - "utils": { - "inputs": { - "flake-utils": [ - "flake-utils" - ] - }, - "locked": { - "lastModified": 1657226504, - "narHash": "sha256-GIYNjuq4mJlFgqKsZ+YrgzWm0IpA4axA3MCrdKYj7gs=", - "owner": "gytis-ivaskevicius", - "repo": "flake-utils-plus", - "rev": "2bf0f91643c2e5ae38c1b26893ac2927ac9bd82a", - "type": "github" - }, - "original": { - "owner": "gytis-ivaskevicius", - "repo": "flake-utils-plus", - "type": "github" - } - }, "wlroots": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index e5115ea..dde8687 100644 --- a/flake.nix +++ b/flake.nix @@ -13,8 +13,6 @@ stable.url = "github:nixos/nixpkgs/nixos-22.11"; flake-utils.url = "github:numtide/flake-utils"; - utils.url = "github:gytis-ivaskevicius/flake-utils-plus"; - utils.inputs.flake-utils.follows = "flake-utils"; agenix.inputs.nixpkgs.follows = "nixpkgs"; agenix.url = "github:ryantm/agenix"; @@ -79,50 +77,51 @@ ║ Outputs ║ ╚══════════════════════════════════════════════════════════╝ */ - outputs = - inputs@{ self, nixpkgs, utils, ... }: - utils.lib.mkFlake { - inherit self inputs; + outputs = inputs@{ self, nixpkgs, ... }: + let + systems = [ "x86_64-linux" "aarch64-linux" ]; - supportedSystems = [ "x86_64-linux" ]; - - channelsConfig.allowUnfree = true; + forEachSystem = lib.genAttrs systems; lib = nixpkgs.lib.extend (self: _: { my = import ./lib { lib = self; }; }); - /* - ╔══════════════════════════════════════════════════════════╗ - ║ Overlays ║ - ╚══════════════════════════════════════════════════════════╝ - */ overlay = import ./overlays { inherit inputs; inherit (self) lib; }; - channels.nixpkgs.overlaysBuilder = _: [ + config.allowUnfree = true; + + overlays = [ inputs.hypr-contrib.overlays.default inputs.hyprland.overlays.default inputs.neovim-nightly-overlay.overlay - inputs.utils.overlay - self.overlay + overlay ]; - overlays = utils.lib.exportOverlays - { - inherit (self) pkgs inputs; - } // { - default = self.overlay; + pkgsFor = system: import nixpkgs { + inherit system config; + overlays = overlays ++ [ + ( + _: prev: { + master = import inputs.master { + inherit (prev) system; + inherit overlays config; + }; + stable = import inputs.stable { + inherit (prev) system; + inherit overlays config; + }; + } + ) + overlay + ]; }; - /* - ╔══════════════════════════════════════════════════════════╗ - ║ Modules ║ - ╚══════════════════════════════════════════════════════════╝ - */ - hostDefaults.modules = [ - ./modules/default.nix + defaultModules = [ + { nixpkgs = { inherit config; }; } + ./modules inputs.home-manager.nixosModule { home-manager = { @@ -134,45 +133,66 @@ inputs.agenix.nixosModules.age ]; - - hosts.nixos-laptop.modules = [ - ./hosts/nixos-laptop - ]; - - - hosts.nixos-desktop.modules = [ - ./hosts/nixos-desktop - ]; - - /* - ╔══════════════════════════════════════════════════════════╗ - ║ Other Outputs ║ - ╚══════════════════════════════════════════════════════════╝ - */ - outputsBuilder = channels: - with channels.nixpkgs; { - devShells.default = mkShell { - inherit (self.checks.${system}.pre-commit-check) shellHook; - name = "dotfiles"; - packages = [ - # Secrets - pkgs.agenix - # cachix - cachix - ]; - }; - - checks.pre-commit-check = inputs.pre-commit-hooks.lib."${system}".run { - src = ./.; - hooks = { - nixpkgs-fmt.enable = true; - statix.enable = true; - shellcheck.enable = true; - stylua.enable = true; + hosts = self.lib.my.mapModules + (path: + let + system = import "${path}/system.nix"; + pkgs = pkgsFor system; + in + lib.nixosSystem { + inherit pkgs system lib; + specialArgs = { + inherit inputs; }; - }; + modules = defaultModules ++ [ path ]; + }) + ./hosts; - packages = utils.lib.exportPackages self.overlays channels; + pre-commit-check = system: inputs.pre-commit-hooks.lib."${system}".run { + src = ./.; + hooks = { + nixpkgs-fmt.enable = true; + statix.enable = true; + shellcheck.enable = true; + stylua.enable = true; }; + }; + in + with lib; { + inherit lib; + + pkgs = genAttrs systems pkgsFor; + + # ╔══════════════════════════════════════════════════════════╗ + # ║ NixOS Configurations ║ + # ╚══════════════════════════════════════════════════════════╝ + + nixosConfigurations = hosts; + + # ╔══════════════════════════════════════════════════════════╗ + # ║ Other Outputs ║ + # ╚══════════════════════════════════════════════════════════╝ + + devShells = forEachSystem (system: + let + pkgs = pkgsFor system; + in + { + default = pkgs.mkShell + { + inherit (pre-commit-check system) shellHook; + name = "dotfiles"; + packages = with pkgs; [ + # Secrets + agenix + # cachix + cachix + ]; + }; + }); + + checks = forEachSystem (system: { + pre-commit-check = pre-commit-check system; + }); }; } diff --git a/hosts/nixos-desktop/system.nix b/hosts/nixos-desktop/system.nix new file mode 100644 index 0000000..132026a --- /dev/null +++ b/hosts/nixos-desktop/system.nix @@ -0,0 +1 @@ +"x86_64-linux" diff --git a/hosts/nixos-laptop/system.nix b/hosts/nixos-laptop/system.nix new file mode 100644 index 0000000..132026a --- /dev/null +++ b/hosts/nixos-laptop/system.nix @@ -0,0 +1 @@ +"x86_64-linux" diff --git a/overlays/channels.nix b/overlays/channels.nix deleted file mode 100644 index 5c2a49a..0000000 --- a/overlays/channels.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ inputs, ... }: - -_: prev: { - master = import inputs.master { - inherit (prev) system; - config.allowUnfree = true; - }; - stable = import inputs.stable { - inherit (prev) system; - config.allowUnfree = true; - }; -} From a2055ecc9c39846d67da9e7384a06e4601fb8d4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Fri, 12 May 2023 09:45:47 +0200 Subject: [PATCH 3/6] feat(flake): add packages and overlays --- flake.nix | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index dde8687..19c9653 100644 --- a/flake.nix +++ b/flake.nix @@ -161,7 +161,7 @@ with lib; { inherit lib; - pkgs = genAttrs systems pkgsFor; + pkgs = forEachSystem pkgsFor; # ╔══════════════════════════════════════════════════════════╗ # ║ NixOS Configurations ║ @@ -194,5 +194,22 @@ checks = forEachSystem (system: { pre-commit-check = pre-commit-check system; }); + + packages = forEachSystem (system: + let + pkgs = pkgsFor system; + in + filterAttrs (_: isDerivation) + (overlay pkgs pkgs) + ); + + overlays = + let + overlayNames = attrNames (overlay null null); + mkOverlay = name: final: prev: (overlay final prev).${name}; + in + (genAttrs overlayNames mkOverlay) // { + default = overlay; + }; }; } From f875fb90c5fa7b7032deb718dfc3befae589461d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Fri, 12 May 2023 15:13:27 +0200 Subject: [PATCH 4/6] fix(nix): nix command not set --- modules/programs/nix.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/programs/nix.nix b/modules/programs/nix.nix index 413936f..adca789 100644 --- a/modules/programs/nix.nix +++ b/modules/programs/nix.nix @@ -22,6 +22,8 @@ in }; config.nix = { + extraOptions = "experimental-features = nix-command flakes"; + gc = { automatic = cfg.gc.enable; options = "--max-freed ${cfg.gc.minimumFreedGB} --delete-older-than 14d"; From e3b7c63f20cb4cc8315886d4707d0944858cecaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Fri, 12 May 2023 15:14:08 +0200 Subject: [PATCH 5/6] feat(nix): add registry entry to self --- flake.nix | 2 +- modules/programs/nix.nix | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 19c9653..365a476 100644 --- a/flake.nix +++ b/flake.nix @@ -142,7 +142,7 @@ lib.nixosSystem { inherit pkgs system lib; specialArgs = { - inherit inputs; + inherit inputs self; }; modules = defaultModules ++ [ path ]; }) diff --git a/modules/programs/nix.nix b/modules/programs/nix.nix index adca789..dbbf277 100644 --- a/modules/programs/nix.nix +++ b/modules/programs/nix.nix @@ -1,6 +1,7 @@ { config , lib , inputs +, self , ... }: @@ -44,6 +45,7 @@ in master.flake = inputs.master; nixpkgs.flake = inputs.nixpkgs; stable.flake = inputs.stable; + dotfiles.flake = self; }; settings = { From 462f2e3276432932c375f214363780a37a1148b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Fri, 12 May 2023 15:20:55 +0200 Subject: [PATCH 6/6] refactor: rename pkgs to use them for nix run --- flake.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 365a476..cdb572c 100644 --- a/flake.nix +++ b/flake.nix @@ -161,8 +161,6 @@ with lib; { inherit lib; - pkgs = forEachSystem pkgsFor; - # ╔══════════════════════════════════════════════════════════╗ # ║ NixOS Configurations ║ # ╚══════════════════════════════════════════════════════════╝ @@ -195,6 +193,8 @@ pre-commit-check = pre-commit-check system; }); + legacyPackages = forEachSystem pkgsFor; + packages = forEachSystem (system: let pkgs = pkgsFor system;