diff --git a/flake.lock b/flake.lock index ab01838..822f399 100644 --- a/flake.lock +++ b/flake.lock @@ -7,42 +7,27 @@ ] }, "locked": { - "lastModified": 1690084763, - "narHash": "sha256-Nw680m/pyVoosSgXZW415Z657mfVM2BxaxDPjEk48Z0=", + "lastModified": 1687871164, + "narHash": "sha256-bBFlPthuYX322xOlpJvkjUBz0C+MOBjZdDOOJJ+G2jU=", "owner": "nix-community", "repo": "home-manager", - "rev": "fb03fa5516d4e86059d24ab35a611ffa3a359547", + "rev": "07c347bb50994691d7b0095f45ebd8838cf6bc38", "type": "github" }, "original": { "owner": "nix-community", + "ref": "release-23.05", "repo": "home-manager", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1690083312, - "narHash": "sha256-I3egwgNXavad1eIjWu1kYyi0u73di/sMmlnQIuzQASk=", + "lastModified": 1690271650, + "narHash": "sha256-qwdsW8DBY1qH+9luliIH7VzgwvL+ZGI3LZWC0LTiDMI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "af8cd5ded7735ca1df1a1174864daab75feeb64a", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-23_05": { - "locked": { - "lastModified": 1689956312, - "narHash": "sha256-NV9yamMhE5jgz+ZSM2IgXeYqOvmGIbIIJ+AFIhfD7Ek=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "6da4bc6cb07cba1b8e53d139cbf1d2fb8061d967", + "rev": "6dc93f0daec55ee2f441da385aaf143863e3d671", "type": "github" }, "original": { @@ -52,11 +37,27 @@ "type": "github" } }, + "nixpkgs-unstable": { + "locked": { + "lastModified": 1690272529, + "narHash": "sha256-MakzcKXEdv/I4qJUtq/k/eG+rVmyOZLnYNC2w1mB59Y=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "ef99fa5c5ed624460217c31ac4271cfb5cb2502c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "home-manager": "home-manager", "nixpkgs": "nixpkgs", - "nixpkgs-23_05": "nixpkgs-23_05" + "nixpkgs-unstable": "nixpkgs-unstable" } } }, diff --git a/flake.nix b/flake.nix index 79c139b..4de476a 100644 --- a/flake.nix +++ b/flake.nix @@ -2,91 +2,60 @@ description = "A Very Flakey Home Manager"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; - nixpkgs-23_05.url = "github:nixos/nixpkgs/nixos-23.05"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05"; + nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; home-manager = { - url = "github:nix-community/home-manager"; + url = "github:nix-community/home-manager/release-23.05"; inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = {nixpkgs, home-manager, ...} @inputs: + outputs = { self, nixpkgs, home-manager, ... }@inputs: let - # Overlays enable you to customize the Nixpkgs attribute set - overlays = [ - (self: super: - let - system = self.stdenv.system; - in { - pkgs_2305 = inputs.nixpkgs-23_05.legacyPackages.${system}; - pkgs_aarch64 = import nixpkgs { - system = "aarch64-${builtins.head (builtins.match ".+-([[:lower:]]+)" system)}"; - }; - pkgs_x86_64 = nixpkgs.legacyPackages.${"x86_64-${builtins.head (builtins.match ".+-([[:lower:]]+)" system)}"}; - }) - ]; - - # Systems supported - allSystems = [ + inherit (self) outputs; + forAllSystems = nixpkgs.lib.genAttrs [ "aarch64-linux" "x86_64-linux" ]; - - importPkgs = (system: import nixpkgs { - inherit overlays system; - config.allowUnfree = true; - }); - - # Helper to provide system-specific attributes - forAllSystems = f: nixpkgs.lib.genAttrs allSystems (system: f { - inherit system; - pkgs = (importPkgs system); - }); - in rec { - inherit allSystems importPkgs forAllSystems home-manager; + packages = forAllSystems (system: + let pkgs = nixpkgs.legacyPackages.${system}; + in import ./nix/pkgs { inherit pkgs; } + ); + + devShells = forAllSystems (system: + let pkgs = nixpkgs.legacyPackages.${system}; + in import ./nix/shell.nix { inherit pkgs; } + ); + + overlays = import ./nix/overlays { inherit inputs; }; + nixosModules = import ./nix/modules/nixos; + homeManagerModules = import ./nix/modules/home-manager; - overlays = { }; - - packages = forAllSystems - ({ pkgs, system }: rec { - home-penguin-fw = homeConfigurations."john@penguin-fw".activationPackage; - home-penguin-duet = homeConfigurations."john@penguin-duet".activationPackage; - home-pixnix = homeConfigurations."john@pixnix".activationPackage; - all = pkgs.symlinkJoin { - name = "all"; - paths = [ - home-penguin-fw - home-penguin-duet - home-pixnix + nixosConfigurations = { + pixnix = nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs outputs; }; + modules = [ + ./nix/nixos/configuration.nix ]; }; - default = all; - }); - + }; + homeConfigurations = { "john@penguin-fw" = home-manager.lib.homeManagerConfiguration { - pkgs = importPkgs "x86_64-linux"; - + pkgs = nixpkgs.legacyPackages.x86_64-linux; + extraSpecialArgs = { inherit inputs outputs; }; modules = [ ./nix/machines/penguin-fw/home.nix - ]; - }; - "john@penguin-duet" = home-manager.lib.homeManagerConfiguration { - pkgs = importPkgs "aarch64-linux"; - - modules = [ - ./nix/machines/penguin-duet/home.nix - ]; - }; - "john@pixnix" = home-manager.lib.homeManagerConfiguration { - pkgs = importPkgs "x86_64-linux"; - - modules = [ - ./nix/common/home.nix + { + home = { + username = "john"; + homeDirectory = "/home/john"; + }; + } ]; }; }; }; -} +} \ No newline at end of file diff --git a/nix/common/home.nix b/nix/common/home.nix index 6308a43..ab29a5d 100644 --- a/nix/common/home.nix +++ b/nix/common/home.nix @@ -1,78 +1,70 @@ -{ pkgs, lib, config, ... }: { +{ inputs, outputs, lib, config, pkgs, ... }: { imports = [ ../lib/tmux.nix ../lib/vim.nix ]; - # home-manager config - home.username = "john"; - home.homeDirectory = "/home/john"; - home.stateVersion = "23.05"; # Please read the comment before changing. - programs.home-manager.enable = true; + + nixpkgs.config = { + allowUnfree = true; + allowUnfreePredicate = (_: true); + }; + + home = { + homeDirectory = lib.mkDefault "/home/${config.home.username}"; + stateVersion = lib.mkDefault "23.05"; + + file = { + + }; + + packages = with pkgs; [ + babelfish + hugo + packer + powershell + terraform + tldr + vault + ]; + + sessionVariables = { + EDITOR = "vim"; + }; + }; + + programs = { + home-manager.enable = true; + + # direnv = { + # enable = lib.mkDefault true; + # # enableFishIntegration = true; + # nix-direnv.enable = true; + # }; + + fish = { + enable = true; + shellInit = "source ${config.home.homeDirectory}/.nix-profile/etc/profile.d/nix.fish"; + functions = { + switch-home = "home-manager switch -b backup --flake ${config.home.homeDirectory}/.dotfiles#$USER@$(hostname -s)"; + }; + }; + + git = { + enable = lib.mkDefault true; + delta.enable = true; + userEmail = lib.mkDefault "john@bowdre.net"; + userName = lib.mkDefault "John Bowdre"; + extraConfig = { + init.defaultBranch = "main"; + pull.rebase = false; + }; + }; + + htop.enable = lib.mkDefault true; + + jq.enable = lib.mkDefault true; + + }; + targets.genericLinux.enable = true; - - # home files - home.file = { - # # Building this configuration will create a copy of 'dotfiles/screenrc' in - # # the Nix store. Activating the configuration will then make '~/.screenrc' a - # # symlink to the Nix store copy. - # ".screenrc".source = dotfiles/screenrc; - - # # You can also set the file content immediately. - # ".gradle/gradle.properties".text = '' - # org.gradle.console=verbose - # org.gradle.daemon.idletimeout=3600000 - # ''; - }; - - # env vars - home.sessionVariables = { - EDITOR = "vim"; - }; - - # packages - home.packages = with pkgs; [ - babelfish - fish - htop - hugo - packer - powershell - terraform - tldr - vault - - # # It is sometimes useful to fine-tune packages, for example, by applying - # # overrides. You can do that directly here, just don't forget the - # # parentheses. Maybe you want to install Nerd Fonts with a limited number of - # # fonts? - # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) - - # # You can also create simple shell scripts directly inside your - # # configuration. For example, this adds a command 'my-hello' to your - # # environment: - # (pkgs.writeShellScriptBin "my-hello" '' - # echo "Hello, ${config.home.username}!" - # '') - ]; - - # Fish shell settings - programs.fish = { - enable = true; - shellInit = "source ${config.home.homeDirectory}/.nix-profile/etc/profile.d/nix.fish"; - functions = { - switch-home = "home-manager switch -b backup --flake ${config.home.homeDirectory}/.dotfiles"; - }; - }; - - # git settings - programs.git = { - enable = true; - delta.enable = true; - userEmail = "john@bowdre.net"; - userName = "John Bowdre"; - extraConfig = { - init.defaultBranch = "main"; - pull.rebase = false; - }; - }; } diff --git a/nix/lib/vscode.nix b/nix/lib/vscode.nix index 00295f3..a2499b7 100644 --- a/nix/lib/vscode.nix +++ b/nix/lib/vscode.nix @@ -1,4 +1,10 @@ -{ pkgs, lib, ...}: { +{ pkgs, lib, config, ...}: { + + nixpkgs.config = { + allowUnfree = true; + allowUnfreePredicate = (_: true); + }; + programs.vscode = { enable = true; enableExtensionUpdateCheck = false; diff --git a/nix/machines/penguin-duet/home.nix b/nix/machines/penguin-duet/home.nix index 846e78a..7d9778d 100644 --- a/nix/machines/penguin-duet/home.nix +++ b/nix/machines/penguin-duet/home.nix @@ -3,6 +3,11 @@ ../../common/home.nix ]; + nixpkgs.config = { + allowUnfree = true; + allowUnfreePredicate = (_: true); + }; + # packages home.packages = with pkgs; [ obsidian diff --git a/nix/machines/penguin-fw/home.nix b/nix/machines/penguin-fw/home.nix index ac075b4..b4d7124 100644 --- a/nix/machines/penguin-fw/home.nix +++ b/nix/machines/penguin-fw/home.nix @@ -4,6 +4,11 @@ ../../lib/vscode.nix ]; + nixpkgs.config = { + allowUnfree = true; + allowUnfreePredicate = (_: true); + }; + # packages home.packages = with pkgs; [ firefox-esr diff --git a/nix/modules/home-manager/default.nix b/nix/modules/home-manager/default.nix new file mode 100644 index 0000000..b6d8e49 --- /dev/null +++ b/nix/modules/home-manager/default.nix @@ -0,0 +1,7 @@ +# Add your reusable home-manager modules to this directory, on their own file (https://nixos.wiki/wiki/Module). +# These should be stuff you would like to share with others, not your personal configurations. + +{ + # List your module files here + # my-module = import ./my-module.nix; +} \ No newline at end of file diff --git a/nix/modules/nixos/default.nix b/nix/modules/nixos/default.nix new file mode 100644 index 0000000..a638cfd --- /dev/null +++ b/nix/modules/nixos/default.nix @@ -0,0 +1,7 @@ +# Add your reusable NixOS modules to this directory, on their own file (https://nixos.wiki/wiki/Module). +# These should be stuff you would like to share with others, not your personal configurations. + +{ + # List your module files here + # my-module = import ./my-module.nix; +} \ No newline at end of file diff --git a/nix/overlays/default.nix b/nix/overlays/default.nix new file mode 100644 index 0000000..b143ce9 --- /dev/null +++ b/nix/overlays/default.nix @@ -0,0 +1,24 @@ +# This file defines overlays +{ inputs, ... }: +{ + # This one brings our custom packages from the 'pkgs' directory + additions = final: _prev: import ../pkgs { pkgs = final; }; + + # This one contains whatever you want to overlay + # You can change versions, add patches, set compilation flags, anything really. + # https://nixos.wiki/wiki/Overlays + modifications = final: prev: { + # example = prev.example.overrideAttrs (oldAttrs: rec { + # ... + # }); + }; + + # When applied, the unstable nixpkgs set (declared in the flake inputs) will + # be accessible through 'pkgs.unstable' + unstable-packages = final: _prev: { + unstable = import inputs.nixpkgs-unstable { + system = final.system; + config.allowUnfree = true; + }; + }; +} \ No newline at end of file diff --git a/nix/pkgs/default.nix b/nix/pkgs/default.nix new file mode 100644 index 0000000..d0f8674 --- /dev/null +++ b/nix/pkgs/default.nix @@ -0,0 +1,6 @@ +# Custom packages, that can be defined similarly to ones from nixpkgs +# You can build them using 'nix build .#example' or (legacy) 'nix-build -A example' + +{ pkgs ? (import ../nixpkgs.nix) { } }: { + # example = pkgs.callPackage ./example { }; +} \ No newline at end of file diff --git a/nix/shell.nix b/nix/shell.nix new file mode 100644 index 0000000..da61444 --- /dev/null +++ b/nix/shell.nix @@ -0,0 +1,10 @@ +# Shell for bootstrapping flake-enabled nix and home-manager +# You can enter it through 'nix develop' or (legacy) 'nix-shell' + +{ pkgs ? (import ./nixpkgs.nix) { } }: { + default = pkgs.mkShell { + # Enable experimental features without having to specify the argument + NIX_CONFIG = "experimental-features = nix-command flakes"; + nativeBuildInputs = with pkgs; [ nix home-manager git ]; + }; +} \ No newline at end of file diff --git a/nixpkgs.nix b/nixpkgs.nix new file mode 100644 index 0000000..cca12b3 --- /dev/null +++ b/nixpkgs.nix @@ -0,0 +1,8 @@ +# A nixpkgs instance that is grabbed from the pinned nixpkgs commit in the lock file +# This is useful to avoid using channels when using legacy nix commands +let lock = (builtins.fromJSON (builtins.readFile ./flake.lock)).nodes.nixpkgs.locked; +in +import (fetchTarball { + url = "https://github.com/nixos/nixpkgs/archive/${lock.rev}.tar.gz"; + sha256 = lock.narHash; +}) \ No newline at end of file