diff --git a/flake.nix b/flake.nix index d1bd10c..59f85ba 100644 --- a/flake.nix +++ b/flake.nix @@ -11,7 +11,7 @@ }; outputs = { self, nixpkgs, ... } @ inputs: { - nixosConfigurations.z790prors-nix = nixpkgs.lib.nixosSystem { + nixosConfigurations.z790prors-nix = nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; modules = [ ./roles @@ -20,13 +20,15 @@ { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit inputs; }; home-manager.users.johno = import ./home/home-z790prors.nix; + home-manager.extraSpecialArgs = { + customPkgs = nixpkgs.legacyPackages."${system}".callPackage ./packages {}; + }; } ]; }; - nixosConfigurations.nix-book = nixpkgs.lib.nixosSystem { + nixosConfigurations.nix-book = nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; modules = [ ./roles @@ -35,13 +37,15 @@ { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit inputs; }; home-manager.users.johno = import ./home/home-nix-book.nix; + home-manager.extraSpecialArgs = { + customPkgs = nixpkgs.legacyPackages."${system}".callPackage ./packages {}; + }; } ]; }; - nixosConfigurations.boxy = nixpkgs.lib.nixosSystem { + nixosConfigurations.boxy = nixpkgs.lib.nixosSystem rec { system = "x86_64-linux"; modules = [ ./roles @@ -50,8 +54,10 @@ { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit inputs; }; home-manager.users.johno = import ./home/home-default.nix; + home-manager.extraSpecialArgs = { + customPkgs = nixpkgs.legacyPackages."${system}".callPackage ./packages {}; + }; } ]; }; diff --git a/home/home-default.nix b/home/home-default.nix index 2379330..7cd82ee 100644 --- a/home/home-default.nix +++ b/home/home-default.nix @@ -1,8 +1,5 @@ -{ pkgs, ... }: +{ pkgs, customPkgs, ... }: -let - nextcloudTalkDesktop = pkgs.callPackage ./modules/nextcloud-talk-desktop/package.nix {}; -in { # Home Manager needs a bit of information about you and the paths it should # manage. @@ -62,7 +59,7 @@ in pkgs.wofi pkgs.vlc - nextcloudTalkDesktop + customPkgs.nextcloudTalkDesktop ]; # Home Manager is pretty good at managing dotfiles. The primary way to manage diff --git a/home/modules/emacs/default.nix b/home/modules/emacs/default.nix index beae966..9720693 100644 --- a/home/modules/emacs/default.nix +++ b/home/modules/emacs/default.nix @@ -1,69 +1,67 @@ { config, lib, pkgs, ... }: +with lib; + let - emacs = pkgs.emacs29; doomSync = (let git = pkgs.git; in '' - export PATH=${emacs}/bin:${git}/bin:$PATH + export PATH=${pkgs.emacs}/bin:${git}/bin:$PATH ${config.xdg.configHome}/emacs/bin/doom sync -u -j $((`nproc`/4*3)) ''); in { - home.packages = [ - pkgs.emacs-all-the-icons-fonts - pkgs.fontconfig - pkgs.graphviz - pkgs.isort - pkgs.nerdfonts - pkgs.nil # nix lsp language server - pkgs.nixfmt-rfc-style - (pkgs.ripgrep.override {withPCRE2 = true;}) - pkgs.pipenv - pkgs.poetry - pkgs.python3 - ]; + config = { + home.packages = [ + pkgs.emacs-all-the-icons-fonts + pkgs.fontconfig + pkgs.graphviz + pkgs.isort + pkgs.nerdfonts + pkgs.nil # nix lsp language server + pkgs.nixfmt-rfc-style + (pkgs.ripgrep.override {withPCRE2 = true;}) + pkgs.pipenv + pkgs.poetry + pkgs.python3 + ]; - fonts.fontconfig.enable = true; + fonts.fontconfig.enable = true; - home.file = { - ".config/emacs" = { - source = fetchGit { - url = "https://github.com/doomemacs/doomemacs.git"; - # When updating me, remember to run `doom sync` - rev = "ac1122ae67d762e09fc6684945b52adff96cf1dc"; + home.file = { + ".config/emacs" = { + source = fetchGit { + url = "https://github.com/doomemacs/doomemacs.git"; + # When updating me, remember to run `doom sync` + rev = "ac1122ae67d762e09fc6684945b52adff96cf1dc"; + }; + # We need to use recursive mode here or else doom fails to sync for + # some reason related to the permissions on the synced path. I'm not + # quite sure of everything that's going on here. + recursive = true; + + # Because `recursive = true` will cause this to sync every single + # activation, we turn this off here. + # + # There's probably a way we could do better detection of this within + # our onChange shell? + # + # onChange = doomSync; }; - # We need to use recursive mode here or else doom fails to sync for - # some reason related to the permissions on the synced path. I'm not - # quite sure of everything that's going on here. - recursive = true; + }; - # Because `recursive = true` will cause this to sync every single - # activation, we turn this off here. - # - # There's probably a way we could do better detection of this within - # our onChange shell? - # - # onChange = doomSync; + home.sessionVariables = { + DOOMLOCALDIR = "${config.xdg.dataHome}/doom"; + EDITOR = "emacs -nw"; + }; + + home.sessionPath = [ + "${config.xdg.configHome}/emacs/bin" + ]; + + xdg.configFile."doom" = { + source = ./doom; + # Sync doom if we updated the config + onChange = doomSync; }; }; - - home.sessionVariables = { - DOOMLOCALDIR = "${config.xdg.dataHome}/doom"; - EDITOR = "emacs -nw"; - }; - - home.sessionPath = [ - "${config.xdg.configHome}/emacs/bin" - ]; - - programs.emacs = { - enable = true; - package = emacs; - }; - - xdg.configFile."doom" = { - source = ./doom; - # Sync doom if we updated the config - onChange = doomSync; - }; } diff --git a/packages/default.nix b/packages/default.nix new file mode 100644 index 0000000..274681f --- /dev/null +++ b/packages/default.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + nextcloudTalkDesktop = pkgs.callPackage ./nextcloud-talk-desktop {}; +} diff --git a/home/modules/nextcloud-talk-desktop/package.nix b/packages/nextcloud-talk-desktop/default.nix similarity index 100% rename from home/modules/nextcloud-talk-desktop/package.nix rename to packages/nextcloud-talk-desktop/default.nix diff --git a/roles/desktop/default.nix b/roles/desktop/default.nix index c1a3b60..2060046 100644 --- a/roles/desktop/default.nix +++ b/roles/desktop/default.nix @@ -4,6 +4,29 @@ with lib; let cfg = config.roles.desktop; + + basePackages = with pkgs; [ + + ]; + + x11BasePackages = with pkgs; [ + + ]; + + x11OnlyPackages = with pkgs; [ + emacs + ]; + + waylandBasePackages = with pkgs; [ + grim + slurp + wl-clipboard + mako + ]; + + waylandOnlyPackages = with pkgs; [ + emacs-gtk + ]; in { options.roles.desktop = { @@ -40,12 +63,6 @@ in programs.dconf.enable = true; services.gnome.gnome-keyring.enable = true; - environment.systemPackages = with pkgs; mkIf (!cfg.x11Only) [ - grim - slurp - wl-clipboard - mako - ]; programs.sway = mkIf (!cfg.x11Only) { enable = true; wrapperFeatures.gtk = true; @@ -73,6 +90,15 @@ in virtualisation.docker.enable = true; users.extraGroups.docker.members = [ "johno" ]; + + environment.systemPackages = with pkgs; mkMerge [ + basePackages + x11BasePackages + (mkIf cfg.x11Only x11OnlyPackages) + # TODO: Do we need a "wayland only" mode? + (mkIf (!cfg.x11Only) waylandBasePackages) + (mkIf (!cfg.x11Only) waylandOnlyPackages) + ]; }; }