diff --git a/flake.lock b/flake.lock index b091626..ee03bd2 100644 --- a/flake.lock +++ b/flake.lock @@ -348,11 +348,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1704295289, - "narHash": "sha256-9WZDRfpMqCYL6g/HNWVvXF0hxdaAgwgIGeLYiOhmes8=", + "lastModified": 1704420045, + "narHash": "sha256-C36QmoJd5tdQ5R9MC1jM7fBkZW9zBUqbUCsgwS6j4QU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b0b2c5445c64191fd8d0b31f2b1a34e45a64547d", + "rev": "c1be43e8e837b8dbee2b3665a007e761680f0c3d", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 794f3d9..a594f80 100644 --- a/flake.nix +++ b/flake.nix @@ -42,7 +42,6 @@ { nixpkgs.overlays = sharedOverlays; home-manager.sharedModules = [ self.homeManagerModules.dotfiles ]; - system.nixos.tags = [ "flakes" ]; } ]; }; diff --git a/hm/common.nix b/hm/common.nix index dc06d05..9919561 100644 --- a/hm/common.nix +++ b/hm/common.nix @@ -22,7 +22,10 @@ in nixpkgs.config.allowUnfree = true; nix = { package = lib.mkDefault pkgs.nixFlakes; - settings.experimental-features = [ "nix-command" "flakes" ]; + settings = { + experimental-features = [ "nix-command" "flakes" ]; + warn-dirty = false; + }; }; programs = @@ -453,6 +456,7 @@ in ncdu jdupes duperemove + compsize # local monitoring htop diff --git a/hm/default.nix b/hm/default.nix index f53ecb5..ccf8775 100644 --- a/hm/default.nix +++ b/hm/default.nix @@ -7,6 +7,7 @@ ./dev.nix ./extra.nix ./gaming + ./rebuild ./ssh.nix ./style.nix ./usernix diff --git a/hm/rebuild/default.nix b/hm/rebuild/default.nix new file mode 100644 index 0000000..3c0751c --- /dev/null +++ b/hm/rebuild/default.nix @@ -0,0 +1,38 @@ +{ pkgs, config, ... }: +let + ulf = pkgs.writers.writePython3 "update-local-flakes" { + } (builtins.readFile ./update-local-flakes.py); +in +{ + home.packages = [ + (pkgs.writeShellApplication { + name = "rb"; + runtimeInputs = [ pkgs.brightnessctl ]; + text = '' + verb="switch" + if [ "$#" -ge 1 ] + then + verb="$1" + shift + fi + nixos_flake="/etc/nixos/flake.nix" + if [ -f "$nixos_flake" ] + then + sudo ${ulf} "$nixos_flake" + if [ "$verb" = "switch" ] || [ "$verb" = "test" ] + then + sudo nixos-rebuild "$verb" --specialisation ${config.frogeye.polarity} "$@" + else + sudo nixos-rebuild "$verb" "$@" + fi + fi + hm_flake="${config.xdg.configHome}/home-manager/flake.nix" + if [ -f "$hm_flake" ] + then + ${ulf} "$hm_flake" + home-manager "$verb" "$@" + fi + ''; + }) + ]; +} diff --git a/hm/rebuild/update-local-flakes.py b/hm/rebuild/update-local-flakes.py new file mode 100755 index 0000000..d009105 --- /dev/null +++ b/hm/rebuild/update-local-flakes.py @@ -0,0 +1,53 @@ +import argparse +import json +import os +import subprocess + +GET_INPUTS_CMD = [ + "nix-instantiate", + "--eval", + "--json", # This parser is stupid, better provide it with pre-eaten stuff + "--expr", + "builtins.fromJSON (builtins.toJSON (import ./flake.nix).inputs)", +] + + +def process_flake(flake: str) -> None: + # get full path + if not os.path.isfile(flake): + raise FileNotFoundError(f"Flake not found: {flake}") + dir = os.path.dirname(flake) + # import dependencies + p = subprocess.run(GET_INPUTS_CMD, cwd=dir, stdout=subprocess.PIPE) + deps = json.loads(p.stdout) + p.check_returncode() + # for each dependency + for dep_name, dep in deps.items(): + dep_url = dep["url"] + # if not local path, continue + if not ( + dep_url.startswith("path:") or dep_url.startswith("git+file:") + ): + continue + if dep.get("flake", True): + # get flake file corresponding + dep_path = dep_url.split(":")[1] + if not dep_path.startswith("/"): + dep_path = os.path.join(dir, dep_path) + dep_path = os.path.normpath(dep_path) + dep_flake = os.path.join(dep_path, "flake.nix") + # call this function with the flake file + process_flake(dep_flake) + # update lockfile + cmd = ["nix", "flake", "lock", "--update-input", dep_name] + subprocess.run(cmd, cwd=dir) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Recursively update lockfiles " + "of flakes located on the system" + ) + parser.add_argument("flake", help="Starting flake", default="flake.nix") + args = parser.parse_args() + process_flake(args.flake) diff --git a/hm/style.nix b/hm/style.nix index 77c7d9c..005dbea 100644 --- a/hm/style.nix +++ b/hm/style.nix @@ -1,9 +1,6 @@ { pkgs, config, lib, ... }: let # Currently last commit in https://github.com/danth/stylix/pull/194 - polarityFile = "${config.xdg.stateHome}/theme_polarity"; - polarityFromFile = if builtins.pathExists polarityFile then lib.strings.fileContents polarityFile else "light"; - polarity = if config.frogeye.polarity == "dynamic" then polarityFromFile else config.frogeye.polarity; phases = [ { command = "jour"; polarity = "light"; } { command = "crepuscule"; polarity = "dark"; } @@ -14,7 +11,7 @@ in { stylix = { - base16Scheme = "${pkgs.base16-schemes}/share/themes/solarized-${polarity}.yaml"; + base16Scheme = "${pkgs.base16-schemes}/share/themes/solarized-${config.frogeye.polarity}.yaml"; image = builtins.fetchurl { url = "https://get.wallhere.com/photo/sunlight-abstract-minimalism-green-simple-circle-light-leaf-wave-material-line-wing-computer-wallpaper-font-close-up-macro-photography-124350.png"; sha256 = "sha256:1zfq3f3v34i45mi72pkfqphm8kbhczsg260xjfl6dbydy91d7y93"; @@ -36,10 +33,6 @@ in }; }; - # Setting a custom base16 theme via nixvim: - # - Is required so nixvim works - # - For the rest only works on dark polarity, use the colorscheme otherwise... shrug - # programs.nixvim.colorschemes.base16.colorscheme = "solarized-${polarity}"; # Fix https://nix-community.github.io/home-manager/index.html#_why_do_i_get_an_error_message_about_literal_ca_desrt_dconf_literal_or_literal_dconf_service_literal # home.packages = [ pkgs.dconf ]; @@ -53,14 +46,12 @@ in text = (lib.optionalString cfg.enable '' brightnessctl set ${builtins.getAttr phase.command cfg} '') + '' - echo ${phase.polarity} > ${polarityFile} - if command -v home-manager + switch="/nix/var/nix/profiles/system/specialisation/${phase.polarity}/bin/switch-to-configuration" + if [ -x "$switch" ] then - home-manager switch - else # In two steps to get the visual changes slightly earlier - sudo /nix/var/nix/profiles/system/specialisation/${phase.polarity}/bin/switch-to-configuration test - sudo /nix/var/nix/profiles/system/specialisation/${phase.polarity}/bin/switch-to-configuration boot + sudo "$switch" test + sudo "$switch" boot fi ''; }) diff --git a/hm/vim.nix b/hm/vim.nix index 999c7d7..cb3aa11 100644 --- a/hm/vim.nix +++ b/hm/vim.nix @@ -27,6 +27,10 @@ in programs.nixvim = { enable = true; + # Setting a custom base16 theme via nixvim is required so feline works, and + # because stylix makes a config that otherwise only works with dark + # polarity. + colorschemes.base16.colorscheme = "solarized-${config.frogeye.polarity}"; options = { # From https://www.hillelwayne.com/post/intermediate-vim/ title = true; diff --git a/install_os.sh b/install_os.sh index 57cd442..ada3235 100755 --- a/install_os.sh +++ b/install_os.sh @@ -94,6 +94,19 @@ sudo nixos-generate-config --no-filesystems --root "$mountpoint" # Plug system configuration into this git repo sudo mkdir -p "${mountpoint}/etc/nixos" echo "{ ... }: { imports = [ ./hardware-configuration.nix ${nixos_config} ]; }" | sudo tee "${mountpoint}/etc/nixos/configuration.nix" > /dev/null +# EXAMPLE +# { +# description = "curacao system config"; +# +# inputs.dotfiles.url = "git+file:/home/geoffrey/.config/gdotfiles"; +# +# outputs = { self, dotfiles, ... }: +# { +# nixosConfigurations.curacao = dotfiles.nixosConfigurations.curacao.extendModules { +# modules = [ ./hardware-configuration.nix ]; +# }; +# }; +# } # Everything there should be covered by (and conflicts with) the repo anyways. # Install NixOS! Or create a new generation. diff --git a/options.nix b/options.nix index 0c240d7..176c699 100644 --- a/options.nix +++ b/options.nix @@ -5,9 +5,9 @@ gaming = lib.mkEnableOption "Games"; userNix = lib.mkEnableOption "Nix is \"installed\" in ~/.nix"; polarity = lib.mkOption { - default = "dynamic"; + default = "light"; description = "Whether to use light theme or dark theme."; - type = lib.types.enum [ "dynamic" "light" "dark" ]; + type = lib.types.enum [ "light" "dark" ]; }; desktop = { xorg = lib.mkEnableOption "Enable X11 support"; diff --git a/os/common.nix b/os/common.nix index 0a4d609..9a292b3 100644 --- a/os/common.nix +++ b/os/common.nix @@ -29,7 +29,10 @@ ]; nixpkgs.config.allowUnfree = true; - nix.settings.experimental-features = [ "nix-command" "flakes" ]; + nix.settings = { + experimental-features = [ "nix-command" "flakes" ]; + warn-dirty = false; + }; programs = { adb.enable = true; diff --git a/os/gaming/default.nix b/os/gaming/default.nix index d4284dd..9801491 100644 --- a/os/gaming/default.nix +++ b/os/gaming/default.nix @@ -1,7 +1,8 @@ { pkgs, lib, config, ... }: { - config = lib.mkIf config.frogeye.gaming { - programs.steam.enable = true; - hardware.opengl.driSupport32Bit = true; # Enables support for 32bit libs that steam uses - }; + config = lib.mkIf config.frogeye.gaming + { + programs.steam.enable = true; + hardware.opengl.driSupport32Bit = true; # Enables support for 32bit libs that steam uses + }; } diff --git a/result b/result deleted file mode 120000 index 51e26b2..0000000 --- a/result +++ /dev/null @@ -1 +0,0 @@ -/nix/store/gw0sb3b287fqdrwszimkffypb14w7yvv-nixos-system-curacao-flakes-23.11.20240103.b0b2c54 \ No newline at end of file