diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 00000000..fcdb025a --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,70 @@ +# TODO: Figure out desired directory structure. + +# --- Nix Config Component Classes --- +# TODO: Look at `divnix/std` to enumerate all classes. +# TODO: Look at `divnix/hive` to enumerate all classes. +# Environments: modules, profiles, suites, configurations +# Installables: packages, apps +# Runnables: scripts, +# Imports: libs, data, +"Type: Module": + - modules/**.nix + - common/modules/**.nix + - darwin/modules/**.nix + - hm/module/**.nix + - nixos/module/**.nix + - nixos/modules/**.nix + - nixvim/modules/**.nix + - wsl/modules/**.nix + - */modules/**.nix + +"Type: Profile": + - profiles/**.nix + - common/profiles/**.nix + - darwin/profiles/**.nix + - home/profiles/**.nix + - nixos/profiles/**.nix + - user/profiles/**.nix + - */profiles/**.nix + +"Type: Suite": + - */suites/**.nix + +"Type: Configuration": + - */configurations/**.nix + +"Type: Secret": + - */secret/**.nix + +"Type: Package": + - */packages/**.nix + - */pkgs/**.nix + +"Type: App": + - */apps/**.nix + - */apps.nix + +"Type: Overlay": + - */overlays/**.nix + +"Type: Snippet": + - snippets/** + +"Type: Documentation": + - docs/** + - **.md + + +"Arch: x86_64": + - **/x86_64*.nix + - **/x86_64*/**.nix + +"OS: Linux": + - **/*-linux/**.nix + - **/*-linux.nix + - **/linux/**.nix + - **/linux.nix + +"System: x86_64-linux": + - **/x86_64-linux/**.nix + - **/x86_64-linux*.nix diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml new file mode 100644 index 00000000..4a69a944 --- /dev/null +++ b/.github/workflows/check.yaml @@ -0,0 +1,34 @@ +# https://github.com/marketplace/actions/publish-nix-flakes-to-flakehub +# https://github.com/marketplace/actions/magic-nix-cache +name: Flake Check +on: + push: + paths-ignore: + - 'docs/**' + - '**.md' + - '.*' + - './**' + pull_request: + paths-ignore: + - 'docs/**' + - '**.md' + - '.*' + - './**' + +jobs: + check: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + - uses: DeterminateSystems/nix-installer-action@main + with: + diagnostic-endpoint: "" + # github-token: ${{ github.token }} + - uses: DeterminateSystems/magic-nix-cache-action@main + with: + diagnostic-endpoint: "" # Disables telemetry + upstream-cache: https://lehmanator.cachix.org # Uses binary cache + - uses: DeterminateSystems/flake-checker-action@main + with: + send-statistics: false + - run: nix flake check diff --git a/.github/workflows/editorconfig.yml b/.github/workflows/editorconfig.yml new file mode 100644 index 00000000..9462c544 --- /dev/null +++ b/.github/workflows/editorconfig.yml @@ -0,0 +1,40 @@ +name: "Checking EditorConfig" +permissions: read-all +on: + # avoids approving first time contributors + pull_request_target: + branches-ignore: + - 'release-**' + +jobs: + tests: + runs-on: ubuntu-latest + if: "github.repository_owner == 'Lehmanator' && !contains(github.event.pull_request.title, '[skip treewide]')" + steps: + - name: Get list of changed files from PR + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_FOR_UPDATE }} + #GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh api \ + repos/NixOS/nixpkgs/pulls/${{github.event.number}}/files --paginate \ + | jq '.[] | select(.status != "removed") | .filename' \ + > "$HOME/changed_files" + - name: print list of changed files + run: | + cat "$HOME/changed_files" + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + # pull_request_target checks out the base branch by default + ref: refs/pull/${{ github.event.pull_request.number }}/merge + - uses: cachix/install-nix-action@7ac1ec25491415c381d9b62f0657c7a028df52a7 # v24 + with: + # nixpkgs commit is pinned so that it doesn't break + # editorconfig-checker 2.4.0 + nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/c473cc8714710179df205b153f4e9fa007107ff9.tar.gz + - name: Checking EditorConfig + run: | + cat "$HOME/changed_files" | nix-shell -p editorconfig-checker --run 'xargs -r editorconfig-checker -disable-indent-size' + - if: ${{ failure() }} + run: | + echo "::error :: Hey! It looks like your changes don't follow our editorconfig settings. Read https://editorconfig.org/#download to configure your editor so you never see this error again." diff --git a/.github/workflows/update-flake.yml b/.github/workflows/update-flake.yml new file mode 100644 index 00000000..1ffcaf3c --- /dev/null +++ b/.github/workflows/update-flake.yml @@ -0,0 +1,26 @@ +name: update-flake-lock +on: + workflow_dispatch: # allows manual triggering + schedule: + - cron: '0 0 * * 1, 4' # Run twice a week + +jobs: + lockfile: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@main + - name: Update flake.lock + uses: DeterminateSystems/update-flake-lock@main + with: + pr-assignees: Lehmanator + pr-reviewers: Lehmanator + token: ${{ secrets.GH_TOKEN_FOR_UPDATES }} + #sign-commits: true + #gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + #gpg-fingerprint: ${{ secrets.GPG_FINGERPRINT }} # specify subkey fingerprint (optional) + #gpg-passphrase: ${{ secrets.GPG_PASSPHRASE }} + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..215d88ca --- /dev/null +++ b/.gitignore @@ -0,0 +1,61 @@ +# --- Build Artifacts --- +.direnv/ +**/result +result + +# --- Local NUR Repos --- +.nur/ + +# --- Keys --- +*.cacert +*.cert +*.crt +*.key +*.keyfile +*.luks +*.lukskey +*.privkey +*.pubkey +*.pub +*.p7 +*.p11 +*.pem +*.pks +*.pkcs +*.secret +id_rsa +id_ed25519 +id_rsa_* +id_ed25519_* +id_*_rsa* +id_*_ed25519* +ssh_*_key +**/private-keys*.d/ +**/pubring.kbx +**/random_seed +**/trustdb.gpg +**/keys +**/.keys + +# --- Private Info --- +hosts.nix +networks.nix +repo.nix +users.nix + +# --- Logging --- +**/logs +*.log + +# --- Cache --- +.*.cache +.cache/ +tags + +# --- Data --- +.data/ +.notes/ + +# --- Manual Exclude --- +excl/ +lib/shell/glyphs.nix diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..d77f5295 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,19 @@ +# https://pre-commit.com +repos: + # Find dead Nix code + # https://github.com/astro/deadnix + - repo: https://github.com/astro/deadnix + rev: v1.0.0 + #frozen: v1.0.0 + #rev: ID # frozen: VERSION + hooks: + - id: deadnix + #args: [--edit] # Uncomment to automatically modify files + stages: [commit] + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.3.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace diff --git a/.sops.yaml b/.sops.yaml new file mode 100644 index 00000000..8a0f94cc --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,108 @@ +# Also see https://github.com/Mic92/dotfiles/blob/master/nixos/.sops.yaml +# for a more complex example. +# +# TODO: Implement .sops.yaml in Nix: https://github.com/TUM-DSE/doctor-cluster-config/blob/master/sops.yaml.nix +# +# List GPG key fingerprints: $ gpg --list-secret-keys +# +keys: + # --- Host --- + - &age-host-fw-ssh-ed25519 age14ussjg6kmjawm6zhfkspnujndx48a8yzlg6sew0gzyu74gpr8amq9g9udd + - &gpg-host-fw-ssh-rsa 68ee228d57b5b97c7f88dd33188b0095248cb8a0 + #- &age-host-wyse-ssh-ed25519 age14ussjg6kmjawm6zhfkspnujndx48a8yzlg6sew0gzyu74gpr8amq9g9udd + - &age-host-wyse-ssh-ed25519 age1rlx8p27kd9tr4sft5zym6h2fwyu54gkce4q7c2t5nrtxd64jvd3qntk7f6 + - &gpg-host-wyse-ssh-rsa 144323cfbd2f70139cd36059da23379472614d6c + # --- User --- + - &age-user-sam-ssh-ed25519 age18v7nxk3e5p2xjtpe7uxv2jz9zz624tkscpkcr6fepc0k6vvvfdgq5mduj8 + - &gpg-user-sam-ssh-rsa 23e6e50809065aed145adb5aa4b65f3430feef6c + - &gpg-user-sam-primary DC1962D6560FF66BB16F99E0C47C146240410561 + - &age-backup age19exrq2t6lkchn08mhmxvywcsq2eur6h0jpz4zqrtvkvume37c3ysx8usjq +creation_rules: + # --- Host Secrets: Shared ----------------------------------------- + # Decrypt with all host keys (user keys optional) + # - /profiles/**/secrets.yaml + # - /secrets/**/*.yaml + - path_regex: (common|darwin|droid|nixos|robotnix|wsl)/profiles/([^/]+/)+secrets\.(ya?ml|json|env|ini|bin|key|privkey|luks|lukskey)$ + key_groups: + - age: + - *age-host-fw-ssh-ed25519 + - *age-host-wyse-ssh-ed25519 + #- *age-host-fajita-ssh-ed25519 + - *age-user-sam-ssh-ed25519 + - *age-backup + - path_regex: (common|darwin|droid|nixos|robotnix|wsl)/secrets/([^/]+/)*[^/]+\.(ya?ml|json|env|ini|bin|key|privkey|luks|lukskey)$ + key_groups: + - age: + - *age-host-fw-ssh-ed25519 + - *age-host-wyse-ssh-ed25519 + #- *age-host-fajita-ssh-ed25519 + - *age-user-sam-ssh-ed25519 + - *age-backup + # --- Host Secrets: Per-Host --------------------------------------- + - path_regex: (nixos/)?hosts/fw/secrets/[^/]+\.(ya?ml|json|env|ini|bin|key|privkey|luks|lukskey)$ + key_groups: + - age: + - *age-host-fw-ssh-ed25519 + - *age-user-sam-ssh-ed25519 + - *age-backup + #pgp: + #- *age-host-fw-ssh-ed25519 + #- *gpg-host-fw-ssh-rsa + #- *gpg-user-sam-primary + - path_regex: nixos/hosts/wyse/secrets/[^/]+\.(ya?ml|json|env|ini|bin|key|privkey|luks|lukskey)$ + key_groups: + - age: + - *age-host-wyse-ssh-ed25519 + #- *age-host-fw-ssh-ed25519 + - *age-user-sam-ssh-ed25519 + - *age-backup + - path_regex: nixos/hosts/[^/]+/secrets/[^/]+\.(ya?ml|json|env|ini|bin|key|privkey|luks|lukskey)$ + key_groups: + - age: + - *age-host-fw-ssh-ed25519 + - *age-host-wyse-ssh-ed25519 + - *age-user-sam-ssh-ed25519 + - *age-backup + #pgp: + #- *age-host-fw-ssh-ed25519 + #- *gpg-host-fw-ssh-rsa + #- *gpg-user-sam-primary + # --- User Secrets: Shared ----------------------------------------- + # Decrypt with all user keys + # - hm/profiles/**/secrets.yaml + # - hm/secrets/**/*.yaml + - path_regex: hm/profiles/([^/]+/)+secrets\.(ya?ml|json|env|ini|bin|key|privkey|luks|lukskey)$ + key_groups: + - age: + - *age-user-sam-ssh-ed25519 + #- *age-user-sammy-ssh-ed25519 + #- *age-user-guest-ssh-ed25519 + - *age-backup + - path_regex: hm/secrets/([^/]+/)*[^/]+\.(ya?ml|json|env|ini|bin|key|privkey|luks|lukskey)$ + key_groups: + - age: + - *age-user-sam-ssh-ed25519 + #- *age-user-sammy-ssh-ed25519 + #- *age-user-guest-ssh-ed25519 + - *age-backup + # --- User Secrets: Per-User --------------------------------------- + - path_regex: hm/users/sam/secrets/[^/]+\.(ya?ml|json|env|ini|bin|key|privkey|luks|lukskey)$ + key_groups: + - age: + - *age-host-fw-ssh-ed25519 + - *age-user-sam-ssh-ed25519 + - *age-backup + #pgp: + #- *age-host-fw-ssh-ed25519 + #- *gpg-host-fw-ssh-rsa + #- *gpg-user-sam-primary + - path_regex: hm/users/[^/]+/secrets/[^/]+\.(ya?ml|json|env|ini|bin|key|privkey|luks|lukskey)$ + key_groups: + - age: + - *age-host-fw-ssh-ed25519 + - *age-user-sam-ssh-ed25519 + - *age-backup + #pgp: + #- *age-host-fw-ssh-ed25519 + #- *gpg-host-fw-ssh-rsa + #- *gpg-user-sam-primary diff --git a/README.md b/README.md new file mode 100644 index 00000000..28a6d0e8 --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ +# Nix / NixOS Configs + +❄️ Welcome! ❄️ + +*What do we have here?* + +- Work-in-progress set of NixOS configs. +- Extremely bloated `flake.nix` stuffed with every input flake repo I have ever come across. +- Many NixOS & home-manager profiles having varying degrees of maintainence. +- A couple of fully working NixOS configurations. +- A living document of my learning process with Nix and the many tragedies overcome. + +There's probably a lot of useful stuff here. You'll have to dig through the rest to find it. + +Right now, nothing is exported with intent of external use. Eventually, that will change. + +I have been going back-and-forth between using several Nix libs to organize my stuff. Still haven't decided. +If you have any insight on these, lemme know: + +- `snowfallorg/lib` +- `divnix/std` & `divnix/hive` +- `GTrunSec/omnibus` +- `numtide/flake-parts` + + +## Planned Additions + +### Near-future + +- Start adding secrets encrypted with `sops-nix`. +- Disko-ify my existing machines. +- Secure Boot on everything via `lanzaboote`. +- Ephemeral configs via `impermanence`. +- Custom NixOS installer with: + - `experimental-features` enabled by default: `nix-command`, `flakes`, `repl-flake`, `recursive-nix`, `ca-derivations`. + - Disko pre-loaded. devShell to select from `diskoConfigurations` & format disks before install. + - Ready for full-disk-encryption & secure boot with resume from hibernate out of the box. + +### Configuration Types + +- `robotnixConfigurations` +- `nix-on-droid-Configurations` +- `openwrtConfigurations` +- `nixvimConfigurations` +- `diskoConfigurations` + +### Infrastructure + +- Kubernetes cluster from various machines. +- Migration of my Kubernetes manifests & Helm charts to Nix +- Netboot server & config images +- Binary cache & remote builders +- NUR repo & overlays +- Terranix configs + +### Modules + +- Flakify `NixOS/mobile-nixos` +- Genericize configuration options between Chromium & Firefox. +- LDAP directory trees as Nix config. + +### Packages + +- GNOME apps missing from `nixpkgs` + +### Ideas n stuff + +- `homeConfigurations` as a composition of `devShells` +- `nixvimConfigurations` but modularized like NixOS. +- `nixvimConfigurations` but for VSCode & Helix. Possibly a conversion util. Abstract away the editor. + diff --git a/common/lib/compat/default.nix b/common/lib/compat/default.nix new file mode 100644 index 00000000..51c427c9 --- /dev/null +++ b/common/lib/compat/default.nix @@ -0,0 +1,21 @@ +let + lock = builtins.fromJSON (builtins.readFile (builtins.path { + path = ../../flake.lock; + name = "lockPath"; + })); + flake = + import + ( + fetchTarball { + url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } + ) + { + src = builtins.path { + path = ../../.; + name = "projectRoot"; + }; + }; +in + flake diff --git a/common/lib/compat/nixos/default.nix b/common/lib/compat/nixos/default.nix new file mode 100644 index 00000000..c7040a60 --- /dev/null +++ b/common/lib/compat/nixos/default.nix @@ -0,0 +1,9 @@ +{...}: let + inherit (default.inputs.nixos) lib; + + host = configs.${hostname} or configs.NixOS; + configs = default.nixosConfigurations; + default = (import ../.).defaultNix; + hostname = lib.fileContents /etc/hostname; +in + host diff --git a/common/lib/default.nix b/common/lib/default.nix new file mode 100644 index 00000000..37dbb5f9 --- /dev/null +++ b/common/lib/default.nix @@ -0,0 +1,13 @@ +{lib}: +lib.makeExtensible (self: +let + callLibs = file: import file { lib = self; }; +in rec { + # Define library functions here + #id = x: x; + + # Or add libs from files containing functions that take {lib} + #foo = callLibs ./foo.nix + + # In configs, they can be used under "lib.our"; +}) diff --git a/common/lib/nixos.nix b/common/lib/nixos.nix new file mode 100644 index 00000000..cce110ce --- /dev/null +++ b/common/lib/nixos.nix @@ -0,0 +1,16 @@ +{ inputs +, config, lib, pkgs +, ... +}: +{ + isWayland = ( + (config.services.xserver.windowManager.qtile.backend == "wayland") + || config.services.xserver.displayManager.gdm.wayland + || config.sway.enable + || config.hyprland.enable + || config.miriway.enable + || config.programs.xwayland.enable + || config.programs.wshowkeys.enable + ); + +} diff --git a/common/lib/write-sops-config.nix b/common/lib/write-sops-config.nix new file mode 100644 index 00000000..f29c0c64 --- /dev/null +++ b/common/lib/write-sops-config.nix @@ -0,0 +1,77 @@ +{lib, ...}: { + generate-host-rules = { + config, + user, + ... + }: + lib.generators.toYAML { + # sops decryption key list + keys = [ + # HostKey: SSH RSA -> GPG key (ssh-to-pgg) -> GPG fingerprint + # HostKey: SSH ed25519 -> age key pair (ssh-to-age) -> age public key + ]; + creation_rules = let + configuration-types = [ + "common" + "darwin" + "droid" + "liminix" + "linux" + "nixos" + "robotnix" + "wsl" + ]; + # Illegal paths: + # + # Paths words can only have one dot in a row: `file..name.ext`, `..filename.ext`, `filename..ext` + # Paths words must have at least one alnum char: `../filename.ext`, `./filename.ext`, `parent/./filename.ext` + # Paths words must end with alnum char: `filename.ext.`, `a/filename.ext-`, `filename./` + # Paths cannot have two consec forward-slashes: `a//filename.ext`, + # + # Legal Paths: + # Path words can start with a dot if len>1: `.hidden.file` + # + regex-filename-prefix = "(.?(([a-z]|[A-Z]|[0-9])+[|.-_]?)+)?"; + configurations-regex = "(${lib.lists.concatStringsSep "|" configuration-types})"; + file-extensions = [ + "asc" + "auth.*" + "bin" + "ce?rt" + "cfg" + "co?nf(ig)?" + "creds?" + "env" + "ini" + "json" + ".*keys?" + "luks" + "pass(w(or)?d)?" + "pwd" + "priv.*" + "pub" + "secrets?" + "toml" + "yaml" + ]; + #regex-extension = "(" + (lib.lists.concatStringsSep "|" file-extensions) + ")$"; + #regex-path-word = "[^/]+"; + #regex-filename = regex-path-word + "\." + regex-extension; + #regex-nested-dirs = "(" + regex-path-word + "/)+"; + #regex-filepath-flat = regex-path-word + "/" + regex-filename; + #regex-filepath-nested = regex-nested-dirs + "/" + regex-filename; + #path-filename-regex = regex-path-word + "/" + regex-path-word + "\." + regex-extension; + #path-subdir-regex = "(" + path-word-regex + "/)+"; + #path-nested-file-regex = path-subdir-regex + "/" + path-filename-regex; + #path-single-dir-file-regex = "path"; + #file-path-subdir-regex = "(" + path-word-regex + "/)+"; + #file-path-regex = file-path-subdir-regex + path-word-regex + "\." + file-extensions-regex + "$"; + #secret-path-host-shared = configurations-regex + "/secrets/" + file-path-regex; + #secret-path-host-profile = configurations-regex + "/(profiles|suites)/" + file-path-regex; + in [ + { + path_regex = "(common|darwin|droid|nixos|robotnix|wsl)/secrets(/[^/]+)+.(ya?ml|json|env|ini|bin|.*key|luks|asc|pem|.*ce?rt)$"; + } + ]; + }; +} diff --git a/common/profiles/default.nix b/common/profiles/default.nix new file mode 100644 index 00000000..9821f844 --- /dev/null +++ b/common/profiles/default.nix @@ -0,0 +1,8 @@ +{ inputs, lib, config, pkgs, user, ... }: +{ + imports = [ + ./editor + ./nix + ./shell + ]; +} diff --git a/common/profiles/editor/default.nix b/common/profiles/editor/default.nix new file mode 100644 index 00000000..2f915111 --- /dev/null +++ b/common/profiles/editor/default.nix @@ -0,0 +1,19 @@ +{ inputs +, config +, lib +, pkgs +, editor ? "nixvim" +, ... +}: +{ + imports = [ + ./neovim.nix + ]; + + # --- Default Editor --- + #programs.neovim.defaultEditor = editor == "neovim"; + #programs.nixvim.defaultEditor = editor == "nixvim"; + #programs.vim.defaultEditor = editor == "vim"; + #services.emacs.defaultEditor = editor == "emacs"; + +} diff --git a/common/profiles/editor/neovim.nix b/common/profiles/editor/neovim.nix new file mode 100644 index 00000000..3bf997a2 --- /dev/null +++ b/common/profiles/editor/neovim.nix @@ -0,0 +1,46 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + #inputs.nixvim.nixosModules.nixvim + #inputs.neovim-nightly.nixosModules. + ]; + + #environment.sessionVariables."EDITOR" = "nvim"; + + nixpkgs.overlays = [ + #inputs.neovim-nightly.overlays.default + ]; + + programs.neovim = { + withNodeJs = lib.mkDefault true; + withPython3 = lib.mkDefault true; + withRuby = lib.mkDefault true; + configure = { + packages.all.start = with pkgs.vimPlugins; + [ nvim-treesitter.withAllGrammars ]; # Install all treesitter grammars + # -- OR -- + #[(nvim-treesitter.withPlugins (ps: [ps.nix])]; # Specific grammar pkgs + }; + }; + + programs.nixvim = { + enable = true; + options = { + number = true; + relativeNumber = true; + shiftwidth = 2; + }; + plugins = { + lsp.enable = true; + lualine.enable = true; + }; + viAlias = true; + vimAlias = true; + }; + +} diff --git a/common/profiles/nix/access-tokens.nix b/common/profiles/nix/access-tokens.nix new file mode 100644 index 00000000..473b4088 --- /dev/null +++ b/common/profiles/nix/access-tokens.nix @@ -0,0 +1,25 @@ +{ config, ... }: +# Notes: +# - Git access tokens are stored in encrypted sops-nix secrets. +# - No easy way to set this via `nix.settings` without string interpolation. +# - String interpolation of sops-nix secrets isn't possible. (can use templates) +# - `nix.conf` option syntax: `access-tokens = "="` +# - Option `nix.extraOptions` +# This config stores git access tokens in sops-nix secrets. +{ + sops.secrets.github-token = {}; + + #nix.settings.access-tokens = [config.sops.secrets.github-token.path]; + nix.extraOptions = '' + !include ${config.sops.secrets.github-token.path} + ''; + + # Write key text to `/etc/nix/access-token-.key` + environment = { + #sessionVariables.NIX_USER_CONF_FILES = "$XDG_CONFIG_HOME/nix/nix.conf.local"; + etc = { + "nix/access-token-github.key".source = config.sops.secrets.github-token.path; + #"nix/access-token-github-2.key".source = config.sops.secrets.github-token-2.path; + }; + }; +} diff --git a/common/profiles/nix/cache/binary-caches.nix b/common/profiles/nix/cache/binary-caches.nix new file mode 100644 index 00000000..6f55c8a1 --- /dev/null +++ b/common/profiles/nix/cache/binary-caches.nix @@ -0,0 +1,118 @@ +{ + lib, + pkgs, + ... +}: { + # TODO: Rename file `./substituters.nix` + # TODO: Questions + # - How does `nix.settings.substituters`, etc. interact with flake attr: `nixConfig.extra-substituters`? + # - What is the difference between `substituters` & `trusted-substituters`? + # - Do you need items in `trusted-substituters` to be in `substituters` also? + # - Does home-manager use substituters from NixOS? + nix.settings = { + builders-use-substitutes = true; # Allow builders to use binary caches + substitute = true; + + substituters = [ + "https://cache.nixos.org/" + "https://nix-community.cachix.org/" + "https://nix-on-droid.cachix.org/" + "https://robotnix.cachix.org/" + "https://nrdxp.cachix.org/" + "https://numtide.cachix.org/" + "https://snowflakeos.cachix.org/" + "https://lehmanator.cachix.org/" + "https://cachix.cachix.org/" + "https://nixpkgs-wayland.cachix.org/" + "https://nixpkgs-update.cachix.org/" + #"https://cache.thalheim.io/" + #"https://hyprland.cachix.org/" + #"https://wasmcloud.cachix.org/" + #"https://gvolpe-nixos.cachix.org/" + #"https://wire-server.cachix.org/" + #"https://tweag-nickel.cachix.org/" + #"https://colemickens.cachix.org/" + #"https://cross-armed.cachix.org" + #"https://r-ryantm.cachix.org/" + #"https://rycee.cachix.org/" + #"https://all-hies.cachix.org/" + #"https://iohk.cachix.org/" + #"https://arm.cachix.org/" + #"https://static-haskell-nix.cachix.org/" + ]; + + trusted-substituters = [ + "https://cache.nixos.org/" + "https://hydra.nixos.org/" + "https://nix-community.cachix.org/" + "https://nix-on-droid.cachix.org/" + "https://robotnix.cachix.org/" + "https://nrdxp.cachix.org/" + "https://numtide.cachix.org/" + "https://snowflakeos.cachix.org/" + "https://lehmanator.cachix.org/" + "https://nixpkgs-update.cachix.org" + "https://nixpkgs-wayland.cachix.org" + ]; + + # TODO: Get public keys for missing caches + trusted-public-keys = [ + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + "hydra.nixos.org-1:CNHJZBh9K4tP3EKF6FkkgeVYsS3ohTl+oS0Qa8bezVs=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + "nix-on-droid.cachix.org-1:56snoMJTXmDRC1Ei24CmKoUqvHJ9XCp+nidK7qkMQrU=" + "nrdxp.cachix.org-1:Fc5PSqY2Jm1TrWfm88l6cvGWwz3s93c6IOifQWnhNW4=" + "numtide.cachix.org-1:2ps1kLBUWjxIneOy1Ik6cQjb41X0iXVXeHigGmycPPE=" + "snowflakeos.cachix.org-1:gXb32BL86r9bw1kBiw9AJuIkqN49xBvPd1ZW8YlqO70=" + "lehmanator.cachix.org-1:kT+TO3tnSoz+lxk2YZSsMOtVRZ7Gc57jaKWL57ox1wU=" + "cachix.cachix.org-1:eWNHQldwUO7G2VkjpnjDbWwy4KQ/HNxht7H4SSoMckM=" + "nixpkgs-update.cachix.org-1:6y6Z2JdoL3APdu6/+Iy8eZX2ajf09e4EE9SnxSML1W8=" + "hercules-ci.cachix.org-1:ZZeDl9Va+xe9j+KqdzoBZMFJHVQ42Uu/c/1/KMC5Lw0=" + "nixpkgs-unfree.cachix.org-1:hqvoInulhbV4nJ9yJOEr+4wxhDV4xq2d1DK7S6Nj6rs=" + "neovim-nightly.cachix.org-1:feIoInHRevVEplgdZvQDjhp11kYASYCE2NGY9hNrwxY=" + #"cache.thalheim.io-1:R7msbosLEZKrxk/lKxf9BTjOOH7Ax3H0Qj0/6wiHOgc=" + #"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + #"wasmcloud.cachix.org-1:9gRBzsKh+x2HbVVspreFg/6iFRiD4aOcUQfXVDl3hiM=" + #"gvolpe-nixos.cachix.org-1:0MPlBIMwYmrNqoEaYTox15Ds2t1+3R+6Ycj0hZWMcL0=" + #"wire-server.cachix.org-1:fVWmRcvdsqzKek3X5Ad8nYNsBSjKZ9Um2NMLfMLS77Y=" + #"tweag-nickel.cachix.org-1:GIthuiK4LRgnW64ALYEoioVUQBWs0jexyoYVeLDBwRA=" + #"colemickens.cachix.org-1:bNrJ6FfMREB4bd4BOjEN85Niu8VcPdQe4F4KxVsb/I4=" + #"cross-armed.cachix.org-1:v+RBneV2nKPSKRe3/qUFhOG6/9GE+o0lw9/NW/wX9Hk=" + #"r-ryantm.cachix.org-1:gkUbLkouDAyvBdpBX0JOdIiD2/DP1ldF3Z3Y6Gqcc4c=" + #"nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA=" + #"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=" + #"all-hies.cachix.org-1:JjrzAOEUsD9ZMt8fdFbzo3jNAyEWlPAwdVuHw4RD43k=" + #"iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo=" + #"arm.cachix.org-1:fGqEJIhp5zM7hxe/Dzt9l9Ene9SY27PUyx3hT9Vvei0=" + #"static-haskell-nix.cachix.org-1:Q17HawmAwaM1/BfIxaEDKAxwTOyRVhPG5Ji9K3+FvUU=" + #"qyliss-x220:bZQtoCyr68idLFb8UQeDjnjitO/xAj52gOo9GoKZuog=" + #"cole-h.cachix.org-1:qmEJ4uAe5tWwFxU/U5T/Nf2+wzXM3/rCP0SIGbK0dgU=" + #"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E=" + #"tartavull.cachix.org-1:xxmUheA3nzwan59bFhfKEShnPeDXMeii+sWHnbq8PsQ=" + #"rewine.cachix.org-1:aOIg9PvwuSefg59gVXXxGIInHQI9fMpskdyya2xO+7I=" + #"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" + #"coq.cachix.org-1:5QW/wwEnD+l2jvN6QRbRRsa4hBHG3QiQQ26cxu1F5tI=" + #"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E=" + #"hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" + #"pandoc-crossref.cachix.org-1:LI9ABFTkGpPCTkUTzoopVSSpb1a26RSTJNMsqVbDtPM=" + #"rycee.cachix.org-1:TiiXyeSk0iRlzlys4c7HiXLkP3idRf20oQ/roEUAh/A=" + #"copier.cachix.org-1:sVkdQyyNXrgc53qXPCH9zuS91zpt5eBYcg7JQSmTBG4=" + #"nixjs.cachix.org-1:3v2zgxvA0y7kmoD1/oIXfVRnDWZA+F3ysfT9TbBBg/E=" + #"nammayatri.cachix.org-1:PiVlgB8hKyYwVtCAGpzTh2z9RsFPhIES6UKs0YB662I=" + #"ryan4yin.cachix.org-1:Gbk27ZU5AYpGS9i3ssoLlwdvMIh0NxG0w8it/cv9kbU=" + #"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" + #"bbigras-nix-config.cachix.org-1:aXL6Q9Oi0jyF79YAKRu17iVNk9HY0p23OZX7FA8ulhU=" + #"fufexan.cachix.org-1:LwCDjCJNJQf5XD2BV+yamQIMZfcKWR9ISIFy5curUsY=" + #"helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs=" + #"veloren-nix.cachix.org-1:zokfKJqVsNV6kI/oJdLF6TYBdNPYGSb+diMVQPn/5Rc=" + #"sandkasten.cachix.org-1:Pa7qfdlx7bZkko+ojaaEG9pyziZkaru9v4TfcioqNZw=" + #"matrix.cachix.org-1:h2ZM1LtvJBQhCb7a2Z/UpO8PKKIUlIvifvrFKfnHkro=" + #"hie-nix.cachix.org-1:EjBSHzF6VmDnzqlldGXbi0RM3HdjfTU3yDRi9Pd0jTY=" + #"ryantrinkle.com-1:JJiAKaRv9mWgpVAz8dwewnZe0AzzEAzPkagE9SP5NWI=" + #"viperml.cachix.org-1:qZhKBMTfmcLL+OG6fj/hzsMEedgKvZVFRRAhq7j8Vh8=" + #"toonn-nur.cachix.org-1:aeZ38ZZXR12hNBHKmb9sFQwiouA2HGKBdekzxVpd+9c=" + #"zeek.cachix.org-1:Jv0hB/P5eF7RQUZgSQiVqzqzgweP29YIwpSiukGlDWQ=" + #"nix-gaming.cachix.org-1:vn/szRSrx1j0IA/oqLAokr/kktKQzsDgDPQzkLFR9Cg=" + ]; + }; +} diff --git a/common/profiles/nix/cache/ccache.nix b/common/profiles/nix/cache/ccache.nix new file mode 100644 index 00000000..ea54ef95 --- /dev/null +++ b/common/profiles/nix/cache/ccache.nix @@ -0,0 +1,94 @@ +{ inputs +, config +, lib +, pkgs +, user +, ... +}: +#let +# # TODO: Accept a list of package names +# overlay-package-stdenv = pname: (self: super: { "${pname}" = super.${pname}.override {stdenv = super.ccacheStdenv;}; }); +#in +{ + imports = [ ]; + + # Monitor with: $ nix-ccache --show-stats + + programs.ccache = { + enable = true; + #cacheDir = "/var/cache/ccache"; + cacheDir = "/nix/var/cache/ccache"; + packageNames = [ + #"ffmpeg" + #"phoc" + "mutter" + "mutter-devel" + "gnome-shell" + "gnome-shell-devel" + "linux" + #"bitwarden" + "iplan" + "nixos-conf-editor" + "nix-software-center" + ]; + }; + + nix.settings.extra-sandbox-paths = [ config.programs.ccache.cacheDir ]; + nixpkgs.config.packageOverrides = pkgs: { + ccacheWrapper = pkgs.ccacheWrapper.override { + extraConfig = '' + export CCACHE_COMPRESS=1 + export CCACHE_DIR="${config.programs.ccache.cacheDir}" + export CCACHE_UMASK=007 + if [ ! -d "$CCACHE_DIR" ]; then + echo "=====" + echo "Directory '$CCACHE_DIR' does not exist" + echo "Please create it with:" + echo " sudo mkdir -m0770 '$CCACHE_DIR'" + echo " sudo chown root:nixbld '$CCACHE_DIR'" + echo "=====" + exit 1 + fi + if [ ! -w "$CCACHE_DIR" ]; then + echo "=====" + echo "Directory '$CCACHE_DIR' is not accessible for user $(whoami)" + echo "Please verify its access permissions" + echo "=====" + exit 1 + fi + ''; + }; + }; + environment.systemPackages = [ pkgs.ccache pkgs.ccacheWrapper ]; + users.users.root.extraGroups = [ "nixbld" ]; + users.users.${user}.extraGroups = [ "nixbld" ]; + + #nixpkgs.overlays = [ + # (self: super: { + # ccacheWrapper = super.ccacheWrapper.override { + # extraConfig = '' + # export CCACHE_COMPRESS=1 + # export CCACHE_DIR="${config.programs.ccache.cacheDir}" + # export CCACHE_UMASK=007 + # if [ ! -d "$CCACHE_DIR" ]; then + # echo "=====" + # echo "Directory '$CCACHE_DIR' does not exist" + # echo "Please create it with:" + # echo " sudo mkdir -m0770 '$CCACHE_DIR'" + # echo " sudo chown root:nixbld '$CCACHE_DIR'" + # echo "=====" + # exit 1 + # fi + # if [ ! -w "$CCACHE_DIR" ]; then + # echo "=====" + # echo "Directory '$CCACHE_DIR' is not accessible for user $(whoami)" + # echo "Please verify its access permissions" + # echo "=====" + # exit 1 + # fi + # ''; + # }; + # }) + #]; + +} diff --git a/common/profiles/nix/cache/default.nix b/common/profiles/nix/cache/default.nix new file mode 100644 index 00000000..d0d31759 --- /dev/null +++ b/common/profiles/nix/cache/default.nix @@ -0,0 +1,9 @@ +{ inputs, config, lib, pkgs, ... }: { + imports = [ + ./binary-caches.nix + ./ccache.nix + #./cachix.nix + #./distcc.nix + #./sccache.nix + ]; +} diff --git a/common/profiles/nix/default.nix b/common/profiles/nix/default.nix new file mode 100644 index 00000000..2a098fe4 --- /dev/null +++ b/common/profiles/nix/default.nix @@ -0,0 +1,79 @@ +{ + lib, + pkgs, + user, + ... +}: { + # TODO: Move NixOS-specific config to `../../nixos/nix/` + imports = [ + ./cache + ./features + ./access-tokens.nix + ./diff.nix + ./documentation.nix + ./gc.nix + ./nixpkgs.nix + ./optimize.nix + ./overlays.nix + ./registry.nix + ./sandbox.nix + ./shell.nix + + #./aliases.nix + + #./build/content-addressed.nix + #./build/cross-compile.nix + #./build/extra-outputs.nix + #./build/logging.nix + #./build/remote-builders.nix + #./build/sandbox.nix + + #./cache/binary/personal.nix + #./cache/binary/ssh-serve-store.nix + #./cache/binary/upstream.nix + #./cache/cachix/personal.nix + #./cache/cachix/local-server.nix + #./cache/compile/ccache.nix + #./cache/compile/sccache.nix + #./cache/compile/distccache.nix + + #./features/channel-disable.nix + #./features/command.nix + #./features/flakes.nix + #./features/plugins.nix + #./features/registry.nix + #./features/repl.nix + #./features/recursive.nix + + #./nixpkgs/allow-broken.nix + #./nixpkgs/allow-unfree.nix + #./nixpkgs/overlays + + #./optimize/dedup.nix + #./optimize/garbage-collection.nix + + #./shell/alias.nix + #./shell/completion.nix + #./shell/nix-path.nix + #./shell/linters.nix + #./shell/updaters.nix + ]; + + nix = { + channel.enable = false; + package = pkgs.nixUnstable; + settings = { + allow-import-from-derivation = true; + use-xdg-base-directories = true; + + allowed-users = ["*"]; + trusted-users = ["root" "@wheel" "@builders" user]; + build-users-group = lib.mkDefault "nixbld"; + + keep-build-log = lib.mkDefault true; + log-lines = lib.mkDefault 25; + connect-timeout = lib.mkDefault 10; + warn-dirty = lib.mkDefault false; + }; + }; +} diff --git a/common/profiles/nix/diff.nix b/common/profiles/nix/diff.nix new file mode 100644 index 00000000..cd41f676 --- /dev/null +++ b/common/profiles/nix/diff.nix @@ -0,0 +1,80 @@ +{ + config, + lib, + pkgs, + ... +}: let + # TODO: Wrap all diff commands in pretty tables with `column` command. + # TODO: Enforce all columns same width. + # + # --- Diff Hook -------------------------------- + # Runs on every activation/build? + # TODO: Fix build failure to encode character \9472 + #diffHook = pkgs.writeShellApplication { + # name = "pretty-nix-diff-hook"; + # runtimeInputs = []; + # text = mkWrapper "nix-diff" "${ + # lib.getExe pkgs.nix-diff + # } --color always --skip-already-compared --word-oriented --environment --squash-text-diff"; + #}; + # + # Wrap commands in pretty box using unicode box chars. + mkWrapper = import ../../../lib/shell/wrap-command-box.nix {inherit pkgs;}; +in { + system.activationScripts = { + diff-closures = { + supportsDryActivation = true; + text = mkWrapper "nix store diff-closures" '' + ${ + lib.getExe config.nix.package + } store diff-closures /run/current-system "$systemConfig" | ${ + lib.getExe pkgs.ripgrep + } --color=always -w "→" | ${ + lib.getExe pkgs.ripgrep + } --color=always -w "KiB" | column --table --separator " ,:" | "${pkgs.choose}/bin/choose" 0:1 -4:-1 | ${ + lib.getExe pkgs.gawk + } '{s=$0; gsub(/\0 33\[[ -?]*[@-~]/,"",s); print s "\t" $0}' | sort -k5,5gr | "${pkgs.choose}/bin/choose" 6:-1 | column --table | ${ + lib.getExe pkgs.gnused + } 's/^/│ /' + ''; + }; + + # https://github.com/nix-community/srvos/blob/main/nixos/common/upgrade-diff.nix + diff-versions = { + supportsDryActivation = true; + text = mkWrapper "nvd diff" '' + ${ + lib.getExe pkgs.nvd + } --color always --nix-bin-dir ${config.nix.package}/bin diff /run/current-system "$systemConfig" | ${ + lib.getExe pkgs.gnused + } 's/^/│ /' + ''; + }; + + #diff-derivations = { + # supportsDryActivation = true; + # text = mkWrapper "nix-diff" '' + # ${ + # lib.getExe pkgs.nix-diff + # } /run/current-system "$systemConfig" --skip-already-compared --word-oriented --squash-text-diff --color always + # ''; + #}; + }; + + # TODO: Split activationScripts b/w system & user? + # TODO: Diff system environment & home-manager environment separately? + #system.userActivationScripts.nix-diff = {}; + + # TODO: Save state of flake config dir from last build/activation, then diff the file tree. + # TODO: pkgs.writeShellApplication ? + #nix.settings = { + # run-diff-hook = true; + # diff-hook = diffHook; + # # mkWrapper "nix-diff" + # #'' + # # ${lib.getExe pkgs.nix-diff} --color always --skip-already-compared --word-oriented --environment --squash-text-diff + # #''; + #}; + + #environment.systemPackages = [diffHook]; +} diff --git a/common/profiles/nix/documentation.nix b/common/profiles/nix/documentation.nix new file mode 100644 index 00000000..0f2badf1 --- /dev/null +++ b/common/profiles/nix/documentation.nix @@ -0,0 +1,29 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ ]; + documentation = { + dev.enable = lib.mkDefault false; + doc.enable = lib.mkDefault false; + info.enable = lib.mkForce true; + man = { + enable = true; + generateCaches = true; + man-db.enable = false; + mandoc.enable = true; # Note: man-db & mandoc cannot both be enabled simultaneously + }; + nixos = { + enable = true; # Include dev docs if documentation.man.enable=true (`devman`,`devinfo`,`devdoc` outputs) + options.splitBuild = lib.mkForce true; # Split opt docs into cacheable/not. Faster build. Some user modules may break. Default=true + #includeAllModules = true; # Gen docs for options in NixOS config. Default=false (Ignores options outside baseModules) + #extraModuleSources = [ pkgs.customModule ]; # Extra NixOS module paths gen'd documentation should strip from options. Default=[] + #extraModules = []; # Modules to show options even when not imported. Default=[] + #options.warningsAreErrors = true; # Warning during option docs build (eg: missing option desc) treated as err. Default=true + }; + }; + +} diff --git a/common/profiles/nix/features/auto-allocate-uids.nix b/common/profiles/nix/features/auto-allocate-uids.nix new file mode 100644 index 00000000..0236ef94 --- /dev/null +++ b/common/profiles/nix/features/auto-allocate-uids.nix @@ -0,0 +1,10 @@ +{ + lib, + pkgs, + ... +}: { + nix.settings = lib.mkIf pkgs.stdenv.isLinux { + auto-allocate-uids = true; + experimental-features = ["auto-allocate-uids"]; + }; +} diff --git a/common/profiles/nix/features/ca-derivations.nix b/common/profiles/nix/features/ca-derivations.nix new file mode 100644 index 00000000..b64281f8 --- /dev/null +++ b/common/profiles/nix/features/ca-derivations.nix @@ -0,0 +1,27 @@ +{ + inputs, + config, + lib, + pkgs, + ... +}: { + # https://nixos.wiki/wiki/Ca-derivations + # https://www.tweag.io/blog/2020-09-10-nix-cas/ + # https://edolstra.github.io/pubs/phd-thesis.pdf#page=143 + # https://discourse.nixos.org/t/tweag-nix-dev-update-12/13185/3 + nixpkgs.config.contentAddressedByDefault = lib.mkDefault false; + nix = { + settings = { + experimental-features = [ + "ca-derivations" + #"git-hashing" # Not enabled until Nix version v? + ]; + # Enable content-addressed binary cache + substituters = ["https://cache.ngi0.nixos.org/"]; + trusted-substituters = ["https://cache.ngi0.nixos.org/"]; + trusted-public-keys = [ + "cache.ngi0.nixos.org-1:KqH5CBLNSyX184S9BKZJo1LxrxJ9ltnY2uAs5c/f1MA=" + ]; + }; + }; +} diff --git a/common/profiles/nix/features/cgroups.nix b/common/profiles/nix/features/cgroups.nix new file mode 100644 index 00000000..0e5af519 --- /dev/null +++ b/common/profiles/nix/features/cgroups.nix @@ -0,0 +1,10 @@ +{ + lib, + pkgs, + ... +}: { + nix.settings = lib.mkIf pkgs.stdenv.isLinux { + use-cgroups = true; + experimental-features = ["cgroups"]; + }; +} diff --git a/common/profiles/nix/features/default.nix b/common/profiles/nix/features/default.nix new file mode 100644 index 00000000..c6d4e143 --- /dev/null +++ b/common/profiles/nix/features/default.nix @@ -0,0 +1,40 @@ +{ + lib, + config, + pkgs, + ... +}: { + imports = [ + ./auto-allocate-uids.nix + ./ca-derivations.nix + ./cgroups.nix + #./dynamic-derivations.nix + ./flakes.nix + ./impure-derivations.nix + ./recursive-nix.nix + ]; + + nix.settings = { + extra-experimental-features = ["fetch-closure" "parse-toml-timestamps" "read-only-local-store"]; + }; + + # --- Experimental Features --- + # See: https://nixos.org/manual/nix/stable/contributing/experimental-features#xp-feature-auto-allocate-uids + # auto-allocate-uids = true; # # Allow Nix to automatically pick builder UIDs, rather than creating `nixbld*` user accounts + # ca-derivations = true; # # Allow content-addressed derivations. Prevent rebuild if derivation changes dont affect output (https://nixos.org/manual/nix/stable/language/advanced-attributes#adv-attr-__contentAddressed) + # cgroups = true; # # Allow Nix to execute builds inside cgroups. See setting: `use-cgroups` (https://nixos.org/manual/nix/stable/contributing/experimental-features#conf-use-cgroups) + # daemon-trust-override = false; # # Allow forcing trusting/not-trusting clients w/ nix-daemon. + # dynamic-derivations = true; # # Allow "text hashing" derivation outputs, to build `.drv` files. Deps in derivations on the outputs of derivations that are themselves derivations outputs + # fetch-closure = true; # # Allow use of the `fetchClosure` builtin function in the Nix language. + # flakes = true; # # Enable flakes + # git-hashing = true; # # Allow creating (content-addressed) store objects hashed via Git's hashing algo. + # impure-derivations = false; # # Allow derivations to produce non-fixed outputs by setting derivation attr: `__impure=true` + # mounted-ssh-store = false; # # Allow use of the mounted SSH store (https://nixos.org/manual/nix/unstable/command-ref/new-cli/nix3-help-stores#experimental-ssh-store-with-filesytem-mounted)kj + # nix-command = true; # # Enable new `nix` subcommands. + # no-url-literals = false; # # Disallow unquoted URLs as part of Nix language syntax. + # parse-toml-timestamps = true; # # Allow parsing of timestamps in `builtins.fromTOML` + # read-only-local-store = true; # # Allow the use of the `read-only` parameter in local store URIs. + # recursive-nix = true; # # Allow derivation builders to call Nix, thus building derivations recursively. + # repl-flake = true; # # Allow passing installables to `nix repl`, makes interface consistent w/ other nix commands. + # verified-fetches = true; # # Enables verification of git commit signatures through the fetchGit built-in. +} diff --git a/common/profiles/nix/features/dynamic-derivations.nix b/common/profiles/nix/features/dynamic-derivations.nix new file mode 100644 index 00000000..31c585e7 --- /dev/null +++ b/common/profiles/nix/features/dynamic-derivations.nix @@ -0,0 +1,4 @@ +{ config, lib, pkgs, ... }: +{ + nix.settings.extra-experimental-features = [ "dynamic-derivations" ]; +} diff --git a/common/profiles/nix/features/flakes.nix b/common/profiles/nix/features/flakes.nix new file mode 100644 index 00000000..0fd6bb3b --- /dev/null +++ b/common/profiles/nix/features/flakes.nix @@ -0,0 +1,52 @@ +{ config, lib, pkgs, ... }: +# Use Nix package manager package with builtin flakes support +{ + nix = { + package = lib.mkDefault pkgs.nixUnstable; + settings = { + accept-flake-config = true; + experimental-features = [ "nix-command" "flakes" ]; + #use-flake-registry = true; #config.nix.settings.use-registries; + }; + }; + + environment = { + sessionVariables = + let flakeDir = "$HOME/.config/nixos"; + in { + NIX_BIN_DIR = "${config.nix.package}/bin"; + FLAKE_SYSTEM = lib.mkDefault flakeDir; + FLAKE_HOME = lib.mkDefault flakeDir; + }; + + shellAliases = { + n-flake = "nix flake"; + flake = "nix flake"; + nf = "nix flake"; + nf-help = "nix flake --help"; + nf-archive = "nix flake archive"; + nf-check = "nix flake check"; + nf-clone = "nix flake clone"; + nf-info = "nix flake info"; + nf-init = "nix flake init"; + nf-lock = "nix flake lock"; + nf-metadata = "nix flake metadata"; + nf-new = "nix flake new"; + nf-prefetch = "nix flake prefetch"; + nf-show = "nix flake show"; + nf-update = "nix flake update"; + + # --- Flake Dirs --- + cfgd = "cd $FLAKE_SYSTEM"; + flakeDir = "echo $FLAKE_SYSTEM"; + flake-dir-system = "echo $FLAKE_SYSTEM"; + flake-dir-home = "echo $FLAKE_HOME"; + flake-cd-system = "cd $FLAKE_SYSTEM"; + flake-cd-home = "cd $FLAKE_HOME"; + nf-dir-system = "echo $FLAKE_SYSTEM"; + nf-dir-home = "echo $FLAKE_HOME"; + nf-cd-system = "cd $FLAKE_SYSTEM"; + nf-cd-home = "cd $FLAKE_HOME"; + }; + }; +} diff --git a/common/profiles/nix/features/impure-derivations.nix b/common/profiles/nix/features/impure-derivations.nix new file mode 100644 index 00000000..49ac45fa --- /dev/null +++ b/common/profiles/nix/features/impure-derivations.nix @@ -0,0 +1,11 @@ +{ + config, + lib, + pkgs, + ... +}: { + nix.settings.extra-experimental-features = [ + "impure-derivations" + #"configurable-impure-env" # Not enabled until version v? + ]; +} diff --git a/common/profiles/nix/features/recursive-nix.nix b/common/profiles/nix/features/recursive-nix.nix new file mode 100644 index 00000000..b7c6a272 --- /dev/null +++ b/common/profiles/nix/features/recursive-nix.nix @@ -0,0 +1,4 @@ +{ config, lib, pkgs, ... }: +{ + nix.settings.extra-experimental-features = [ "recursive-nix" ]; +} diff --git a/common/profiles/nix/gc.nix b/common/profiles/nix/gc.nix new file mode 100644 index 00000000..8352a502 --- /dev/null +++ b/common/profiles/nix/gc.nix @@ -0,0 +1,21 @@ +{ config, lib, pkgs, ... }: +{ + nix = { + gc = { + automatic = true; # Collect garbage + options = "--cores 1 --max-freed 100G --max-jobs 1 --timeout 30 --delete-older-than 30d"; # Limit garbage collection to 100GB using 1 concurrent job on 1 core, & 30 seconds of runtime + dates = "weekly"; + }; + optimise.automatic = true; # Store optimizer + settings = { + auto-optimise-store = lib.mkDefault true; # Dedup store files + min-free = lib.mkDefault 128000000; + max-free = lib.mkDefault 1000000000; + keep-derivations = lib.mkDefault true; + keep-env-derivations = lib.mkDefault false; + keep-going = lib.mkDefault false; + keep-outputs = lib.mkDefault true; + preallocate-contents = lib.mkDefault true; + }; + }; +} diff --git a/common/profiles/nix/nixpkgs.nix b/common/profiles/nix/nixpkgs.nix new file mode 100644 index 00000000..1f7aca9a --- /dev/null +++ b/common/profiles/nix/nixpkgs.nix @@ -0,0 +1,20 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + nixpkgs.config = { + allowBroken = true; + allowUnfree = true; + allowUnsupportedSystem = true; + + packageOverrides = pkgs: { + electron_24 = pkgs.electron_26; # Electron v24 is end-of-life, forcing upgrade + electron_25 = pkgs.electron_26; # Electron v25 is end-of-life, forcing upgrade + }; + }; + + #environment.sessionVariables.NIXPKGS_ALLOW_UNFREE = lib.mkIf config.nixpkgs.config.allowUnfree "1" ; +} diff --git a/common/profiles/nix/optimize.nix b/common/profiles/nix/optimize.nix new file mode 100644 index 00000000..7ba502dc --- /dev/null +++ b/common/profiles/nix/optimize.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ... }: +{ + nix = { + optimise = { + automatic = true; # Store optimizer + dates = [ "03:45" ]; + }; + settings = { + auto-optimise-store = true; # Dedup + min-free = 128000000; + max-free = 1000000000; + keep-derivations = true; + keep-env-derivations = false; + keep-going = lib.mkDefault false; + keep-outputs = lib.mkDefault true; + preallocate-contents = lib.mkDefault true; + }; + }; +} diff --git a/common/profiles/nix/overlays.nix b/common/profiles/nix/overlays.nix new file mode 100644 index 00000000..45ff296e --- /dev/null +++ b/common/profiles/nix/overlays.nix @@ -0,0 +1,33 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + nixpkgs = { + overlays = with inputs; [ + fenix.overlays.default + lanzaboote.overlays.default + nix-alien.overlays.default + nixpkgs-gnome-apps.overlays.default + nur.overlay + ssbm-nix.overlay + + #nvfetcher.overlays.default # nvfetcher included in nixpkgs now + + # --- Overlaying Alternative Package Sets --- + #(final: prev: { stable = flake-utils.lib.eachDefaultSystem (system: nixos-stable.legacyPackages.${system}); }) + #(final: prev: { unstable = flake-utils.lib.eachDefaultSystem (system: nixos-unstable.legacyPackages.${system}); }) + #(final: prev: { master = flake-utils.lib.eachDefaultSystem (system: nixos-master.legacyPackages.${system}); }) + #(final: prev: { staging = flake-utils.lib.eachDefaultSystem (system: nixos-staging.legacyPackages.${system}); }) + #(final: prev: { gnome-latest = flake-utils.lib.eachDefaultSystem (system: nixpkgs-gnome.legacyPackages.${system}); }) + #(final: prev: { wayland-pkgs = flake-utils.lib.eachDefaultSystem (system: nixpkgs-wayland.legacyPackages.${system}); }) + #(final: prev: { android-sdk = flake-utils.lib.eachDefaultSystem (system: nixpkgs-android.legacyPackages.${system}); }) + #(final: prev: { nur = flake-utils.lib.eachDefaultSystem (system: nur.legacyPackages.${system}); }) + ]; + }; + + #environment.sessionVariables.NIXPKGS_ALLOW_UNFREE = lib.mkIf config.nixpkgs.config.allowUnfree "1" ; + +} diff --git a/common/profiles/nix/registry.nix b/common/profiles/nix/registry.nix new file mode 100644 index 00000000..351d0b61 --- /dev/null +++ b/common/profiles/nix/registry.nix @@ -0,0 +1,22 @@ +{ inputs, config, lib, pkgs, ... }: +{ + imports = [ + #inputs.nix-quick-registry.nixosModules.local-registry + #inputs.flake-utils-plus.nixosModules.autoGenFromInputs + ]; + + nix = { + generateNixPathFromInputs = true; + generateRegistryFromInputs = true; + linkInputs = true; + #localRegistry = { + # enable = true; + # cacheGlobalRegistry = true; + # noGlobalRegistry = false; + #}; + settings = { + use-registries = true; + flake-registry = lib.mkDefault "https://channels.nixos.org/flake-registry.json"; + }; + }; +} diff --git a/common/profiles/nix/sandbox.nix b/common/profiles/nix/sandbox.nix new file mode 100644 index 00000000..997b2a35 --- /dev/null +++ b/common/profiles/nix/sandbox.nix @@ -0,0 +1,11 @@ +{ inputs, config, lib, pkgs, ... }: +{ + # --- Sandboxing --------------------- + nix.settings = { + sandbox = true; # Sandbox Nix builds + fallback = true; # Fallback to local build if substitute fails + # Expose extra system paths to Nix build sandbox + extra-sandbox-paths = [ + ]; + }; +} diff --git a/common/profiles/nix/shell.nix b/common/profiles/nix/shell.nix new file mode 100644 index 00000000..551ee6f9 --- /dev/null +++ b/common/profiles/nix/shell.nix @@ -0,0 +1,45 @@ +{ config, lib, pkgs, ... }: +{ + imports = [ ./utils ]; + + # TODO: Remove pkgs that are imported elsewhere + environment.shellAliases = { + # --- Nix-Command --- + n = "nix"; + + n-build = "nix build"; + nb = "nix build"; + build = "nix build"; + + n-conf = "nix show-config"; + + n-develop = "nix develop"; + develop = "nix develop"; + + n-eval = "nix eval"; + neval = "nix eval"; + + n-profile = "nix profile"; + profile = "nix profile"; + + n-realization = "nix realisation"; + realization = "nix realisation"; + + n-registry = "nix registry"; + registry = "nix registry"; + + n-repl = "nix repl"; + repl = "nix repl"; + + n-run = "nix run"; + run = "nix} run"; + nr = "nix run"; + + n-search = "nix search"; + nixpkgs = "nix search nixpkgs"; + + n-store = "nix store"; + store = "nix store"; + + }; +} diff --git a/common/profiles/nix/utils/cachix.nix b/common/profiles/nix/utils/cachix.nix new file mode 100644 index 00000000..41a858e3 --- /dev/null +++ b/common/profiles/nix/utils/cachix.nix @@ -0,0 +1,10 @@ +{ config, lib, pkgs, ... }: +{ + # CLI for cachix binary caches + environment.systemPackages = [ pkgs.cachix ]; + + # TODO: Cachix env vars? + # TODO: Nix configuration to use cachix? + + #sops.secrets.cachix-token = {}; +} diff --git a/common/profiles/nix/utils/default.nix b/common/profiles/nix/utils/default.nix new file mode 100644 index 00000000..6b8c69b5 --- /dev/null +++ b/common/profiles/nix/utils/default.nix @@ -0,0 +1,21 @@ +{ inputs, config, lib, pkgs, ... }: +{ + imports = [ + ./cachix.nix + ./linters.nix + ./manix.nix + ./updaters.nix + ]; + + environment.systemPackages = [ + pkgs.nix-doc # Search docs & Generate tags + plugin + pkgs.nix-plugins # Misc Nix plugins + pkgs.nix-du # Show sizes of Nix store paths + pkgs.nix-init # Generate packages from URLs + pkgs.nix-output-monitor + pkgs.nix-tree # Interactively view dep graphs of Nix derivations + pkgs.nix-query-tree-viewer # GUI to view Nix store path deps + pkgs.pre-commit # Git pre-commit hooks + inputs.nix-fast-build.packages.${pkgs.system}.nix-fast-build + ]; +} diff --git a/common/profiles/nix/utils/linters.nix b/common/profiles/nix/utils/linters.nix new file mode 100644 index 00000000..b9281554 --- /dev/null +++ b/common/profiles/nix/utils/linters.nix @@ -0,0 +1,9 @@ +{ config, lib, pkgs, ... }: +{ + environment.systemPackages = [ + pkgs.alejandra # Nix linter + pkgs.deadnix # Find dead code in Nix configs + pkgs.vulnix # Nix(OS) vulnerability scanner + #pkgs.rnix + ]; +} diff --git a/common/profiles/nix/utils/manix.nix b/common/profiles/nix/utils/manix.nix new file mode 100644 index 00000000..8d205d36 --- /dev/null +++ b/common/profiles/nix/utils/manix.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ... }: +{ + environment = { + + # TODO: Use ripgrep instead of grep + # TODO: Use binary path to manix + # TODO: Other manix aliases? + shellAliases = { + nix-manix = "manix \"\" | grep '^# ' | sed 's/^# \(.*\) (.*/\1/;s/ (.*//;s/^# //' | fzf --preview=\"manix '{}'\" | xargs manix"; + n-manix = "manix \"\" | grep '^# ' | sed 's/^# \(.*\) (.*/\1/;s/ (.*//;s/^# //' | fzf --preview=\"manix '{}'\" | xargs manix"; + n-doc = "manix \"\" | grep '^# ' | sed 's/^# \(.*\) (.*/\1/;s/ (.*//;s/^# //' | fzf --preview=\"manix '{}'\" | xargs manix"; + }; + systemPackages = [ pkgs.manix ]; + }; +} diff --git a/common/profiles/nix/utils/updaters.nix b/common/profiles/nix/utils/updaters.nix new file mode 100644 index 00000000..ba45085a --- /dev/null +++ b/common/profiles/nix/utils/updaters.nix @@ -0,0 +1,18 @@ +{ config, lib, pkgs, ... }: +{ + environment = { + shellAliases = { + nix-nurl = "nurl"; + n-nurl = "nurl"; + + nix-nvfetcher = "nvfetcher"; + n-nvfetch = "nvfetcher"; + }; + + systemPackages = [ + pkgs.nix-update # Update Nix packages + pkgs.nurl # Automatically generate fetcher expressions from URLs + pkgs.nvfetcher # Update package commits & hashes + ]; + }; +} diff --git a/common/profiles/shell/default.nix b/common/profiles/shell/default.nix new file mode 100644 index 00000000..e3b5402d --- /dev/null +++ b/common/profiles/shell/default.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ... }: +{ + environment.shellAliases = { + c = "cat"; + + # Clear terminal output + cl = "clear"; + + # Editor + e = "$EDITOR"; + v = "$VISUAL"; + + # Reload the shell + #she = "$SHELL"; + + # Paths + w = "which -a"; + }; +} diff --git a/common/profiles/shell/scripts/terminal-helpers.nix b/common/profiles/shell/scripts/terminal-helpers.nix new file mode 100644 index 00000000..4efdc543 --- /dev/null +++ b/common/profiles/shell/scripts/terminal-helpers.nix @@ -0,0 +1,28 @@ +{ + config, + lib, + pkgs, + ... +}: { + # TODO: Test terminal features (bold, underlines, italics, strikethrough, blinking, etc.) + # TODO: Test terminal colors + # TODO: Test terminal fonts + # - Powerline Symbols + # - Ligatures + # - Emoji + # - Unicode special chars used for UI + # - Box-drawing + # - Hard-to-distinguish characters + # - o / O / 0 / Q + # - o / a + # - L / l / 1 / i / I / | + # - . / , + + # TODO: Clear terminal + # TODO: Pretty print `$PATH`, `$fpath`, `$NIX_PATH`, etc. + # TODO: Pretty print all `$XDG_*` variables + # TODO: Show shell keybindings + # TODO: Show shell zstyles + # TODO: Show shell completions + +} diff --git a/configuration.nix b/configuration.nix deleted file mode 100644 index 5c02a4be..00000000 --- a/configuration.nix +++ /dev/null @@ -1,127 +0,0 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page -# and in the NixOS manual (accessible by running ‘nixos-help’). -{ - self, - system, - userPrimary, - inputs, - config, lib, pkgs, - ... -}: - -{ - imports = [ - # Include the results of the hardware scan. - ./hardware-configuration.nix - ./profiles/active-directory-admin.nix - ./profiles/adb.nix - ./profiles/emu-windows.nix - ./profiles/flatpak.nix - ./profiles/fprintd.nix - ./profiles/gnome.nix - ./profiles/locale-est.nix - ./profiles/nix.nix - ./profiles/pipewire.nix - ./profiles/polkit.nix - ./profiles/shell-zsh.nix - ./profiles/tpm2.nix - ./profiles/virt-vm-host.nix - ]; - - # --- Bootloader --- - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - boot.loader.efi.efiSysMountPoint = "/boot/efi"; - - # --- Network --- - # Define your hostname. - networking.hostName = "fw"; - - # --- Mail --- - services.davmail.enable = true; - services.davmail.url = "https://outlook.office365.com/EWS/Exchange.asmx"; - console.useXkbConfig = true; - - # Enable CUPS to print documents. - services.printing.enable = true; - - # --- Users --- - # Define a user account. Don't forget to set a password with ‘passwd’. - users.users."sam" = { - isNormalUser = true; - description = "Sam Lehman"; - extraGroups = [ "wheel" "users" "dialout" ]; - }; - programs.fuse.userAllowOther = true; - - hardware.enableAllFirmware = true; - hardware.opengl.driSupport32Bit = true; - - # List packages installed in system profile. - environment.systemPackages = with pkgs; [ - bat - exa - firefox - gcc - lsd - neofetch - ripgrep - tealdeer - - gnumake - - # --- Security --- - lynis - - ]; #) [ pkgs.gnome-decoder ]; - - # This value determines the NixOS release from which the default - # settings for stateful data, like file locations and database versions - # on your system were taken. It‘s perfectly fine and recommended to leave - # this value at the release version of the first install of this system. - # Before changing this value read the documentation for this option - # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). - system.stateVersion = "23.05"; # Did you read the comment? - - # --- Docs --- - documentation.doc.enable = true; - documentation.dev.enable = true; - documentation.man.generateCaches = true; - documentation.info.enable = true; - documentation.nixos.enable = true; - #documentation.nixos.includeAllModules = true; - - #programs.home-manager.enable = true; - - # --- Shell --- - programs.command-not-found.enable = false; - programs.git.enable = true; - programs.git.package = pkgs.gitFull; - programs.fzf.fuzzyCompletion = true; - programs.fzf.keybindings = true; - programs.less.enable = true; - programs.less.lessopen = "|${pkgs.lesspipe}/bin/lesspipe.sh %s"; - programs.starship.enable = true; - programs.traceroute.enable = true; - - # --- Browsers --- - programs.chromium.enable = true; - programs.chromium.defaultSearchProviderEnabled = true; - programs.firefox.enable = true; - - # --- Keys --- - programs.gnupg.dirmngr.enable = true; - programs.gnupg.agent.enableExtraSocket = true; - programs.gnupg.agent.enableBrowserSocket = true; - - - # --- Theme --- - qt.enable = true; - - # --- Nix --- - nix.settings.trusted-public-keys = [ - "hydra.nixos.org-1:CNHJZBh9K4tP3EKF6FkkgeVYsS3ohTl+oS0Qa8bezVs=" - "snowflakeos.cachix.org-1:gXb32BL86r9bw1kBiw9AJuIkqN49xBvPd1ZW8YlqO70=" - ]; -} diff --git a/darwin/profiles/default.nix b/darwin/profiles/default.nix new file mode 100644 index 00000000..f8854c85 --- /dev/null +++ b/darwin/profiles/default.nix @@ -0,0 +1,52 @@ +{ inputs +, config +, lib +, pkgs +, user +, ... +}: +# TODO: Move all config that isn't MacOS-specific stuff to common file +{ + imports = [ + #inputs.srvos.nixosModules.common + #inputs.srvos.nixosModules.mixins-nix-experimental + #inputs.srvos.nixosModules.mixins-trusted-nix-caches + #inputs.nix-data.nixosModules.nix-data + #inputs.nix-index.nixosModules.nix-index + #{ programs.nix-index-database.comma.enable = true; } + #./activate.nix + ./alias.nix + #./homed.nix + #./home-manager.nix + #./normalize.nix + #../boot + #../hardware + ../locale + #../network + ../nix + ../shell + ../users + ../nixos/sshd.nix + ]; + + appstream.enable = true; + + # --- Shell Environment ---------------------------------- + # FIXME: Correctly set NIX_PATH + #nix.nixPath = [ "nixos=${inputs.nixos}" ]; #"nixos=${inputs.nixpkgs}" + #nix.nixPath = ["nixos=/etc/nix/inputs/nixos:nixpkgs=/etc/nix/inputs/nixpkgs:home-manager=/etc/nix/inputs/home-manager"]; + #nix.registry = { + # nixos.flake = inputs.nixos; + # nixpkgs.flake = inputs.nixpkgs; + # home-manager.flake = inputs.home; + #}; + # + ## Place flake source in /etc/nixos + ## TODO: Convert to divnix/hive first + ##etc.nixos.source = inputs.self; + #environment.etc = { + # "nix/inputs/nixos".source = inputs.nixos.outPath; + # "nix/inputs/home-manager".source = inputs.home.outPath; + #}; + +} diff --git a/darwin/profiles/modules/agenix.nix b/darwin/profiles/modules/agenix.nix new file mode 100644 index 00000000..182c4ba9 --- /dev/null +++ b/darwin/profiles/modules/agenix.nix @@ -0,0 +1,18 @@ +{ inputs, config, lib, pkgs, user, ... }: +{ + imports = [ inputs.agenix.darwinModules.age ]; + age = { + ageBin = lib.mkDefault "${pkgs.age}/bin/age"; + identityPaths = lib.mkDefault [ + ]; + secretsDir = lib.mkDefault "/run/agenix"; + secretsMountPoint = lib.mkDefault "/run/agenix.d"; + }; + + home-manager.sharedModules = [ + inputs.agenix.homeManagerModules.age + # --- OR --- + #../../../hm/profiles/modules/agenix.nix + ]; + +} diff --git a/darwin/profiles/modules/flake-utils-plus.nix b/darwin/profiles/modules/flake-utils-plus.nix new file mode 100644 index 00000000..84d74eb8 --- /dev/null +++ b/darwin/profiles/modules/flake-utils-plus.nix @@ -0,0 +1,4 @@ +{ inputs, config, lib, pkgs, ... }: +{ + imports = [ inputs.flake-utils-plus.darwinModules.autoGenFromInputs ]; +} diff --git a/darwin/profiles/modules/nixvim.nix b/darwin/profiles/modules/nixvim.nix new file mode 100644 index 00000000..f731df4d --- /dev/null +++ b/darwin/profiles/modules/nixvim.nix @@ -0,0 +1,16 @@ +{ inputs, config, lib, pkgs, user, ... }: +{ + # https://github.com/nix-community/nixvim + imports = [ inputs.nixvim.nixDarwinModules.nixvim ]; + + # TODO: Default system config + + home-manager.sharedModules = [ + inputs.nixvim.homemManagerModules.nixvim + # --- OR --- + #../../../hm/profiles/modules/nixvim.nix + ]; + + # TODO: Learn about `lib.extendModules` + +} diff --git a/default.nix b/default.nix new file mode 100644 index 00000000..2cccff28 --- /dev/null +++ b/default.nix @@ -0,0 +1,10 @@ +(import + ( + let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in + fetchTarball { + url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } + ) + { src = ./.; } +).defaultNix diff --git a/docs/configs/todo-libs.md b/docs/configs/todo-libs.md new file mode 100644 index 00000000..d8d4820e --- /dev/null +++ b/docs/configs/todo-libs.md @@ -0,0 +1,14 @@ +# To-Dos: Create Nix Library Functions + +## Host Information + +- [ ] `isAndroid`: Test if host is using Termux on Android +- [ ] `isDarwin`: Test if host is using MacOS +- [ ] `isLinux`: Test if host is using Linux (non-NixOS) +- [ ] `isNixOS`: Test if host is using NixOS +- [ ] `isWindows`: Test if host is using Windows Subsystem for Linux + +- [ ] `hasPrivilegeEscalation`: Test if host has program for running commands with elevated privileges (sudo, doas, please) +- [ ] `mkAliasSU`: Create an alias string prefixed by the privilege escalation program + + diff --git a/docs/configs/todo-modules.md b/docs/configs/todo-modules.md new file mode 100644 index 00000000..f191aee7 --- /dev/null +++ b/docs/configs/todo-modules.md @@ -0,0 +1,29 @@ +# To-Do: Create modules + +- [ ] Are there other types of modules that can be made? (`wslModules`) + +## Home-Manager + +### NixOS & Home-Manager + +These modules will have to create both `nixosModules` & `homeManagerModules` + +- [ ] Flatpak + - [ ] Configure remotes & their permissions + - [ ] Configure runtimes + - [ ] Configure apps & their permissions, configs, & data + - [ ] Configure local flatpak repo + +- [ ] KeePassXC - Configure KeePass v4 database + +- [ ] Librewolf + - [ ] Copy Firefox's NixOS module & Home-Manager module + - [ ] Change Firefox names & paths to Librewolf + + +## NixOS + +## Darwin +## Nix-on-Droid +## Robotnix + diff --git a/docs/configs/todo-nixos.md b/docs/configs/todo-nixos.md new file mode 100644 index 00000000..3c7c6468 --- /dev/null +++ b/docs/configs/todo-nixos.md @@ -0,0 +1,127 @@ +# NixOS Configurations To-Dos: + +See also: + +- [`docs/todo-cloud.md`](../todo-cloud.md) +- [`docs/config/todo-nixvim.md`)(../configs/todo-nixvim.md) +- [`docs/config/todo-shell.md`)(../configs/todo-shell.md) + +## NixOS Configurations: Workstations + +- [ ] TODO: Disable auto-login +- [ ] TODO: Limit maximum NixOS generations available as boot entries to save boot partition space +- [ ] TODO: Configure `sudo` logging to send email to `admin@piwine.com` +- [ ] TODO: ElectronJS apps: override packages to use `ozone` platform for light/dark mode support +- [ ] TODO: Configure PAM to support login with: + - [ ] LDAP + - [ ] Kerberos + - [ ] OIDC / OAuth2 + - [ ] SAML + - [ ] SSH Certificates + - [ ] GPG / PGP authentication keys + +- [ ] TODO: Configure PAM to support 2-Factor authentication using: + - [ ] `SMS` + - [ ] `TOTP` (authenticator apps / codes) + - [ ] Email + - [ ] YubiKey / NitroKey / OnlyKey + +- [ ] TODO: Configure PAM to make 2-factor authentication mandatory + +- [ ] TODO: Configure purple/pidgin plugins for: + - [ ] TODO: `XMPP` + - [ ] TODO: Matrix + - [ ] TODO: Microsoft Teams + - [ ] TODO: Facebook Messenger + - [ ] TODO: Instagram Messenger + +- [ ] TODO: Migrate apps from Flatpak to native nixpkgs + - [ ] TODO: Get list of all installed flatpaks + - [ ] TODO: Find equivalent packages in `nixpkgs` for flatpak apps + - [ ] TODO: Use `nix-` to sandbox native packages in `nixpkgs` with `bubblewrap` + +## NixOS Configurations: Servers + +- [ ] TODO: Re-organize `homeManagerConfigurations`: + - [ ] TODO: Move hmProfiles to `profiles/home-manager/{default,common}.nix` + - [ ] TODO: Move hmProfiles to `profiles/home-manager/{nixos,darwin,nixondroid,wsl,system/{common,arch,debian,fedora}}/{default,common}.nix` + - [ ] TODO: Move hmProfiles to `profiles/home-manager//{nixos,darwin,nixondroid,wsl,system/{common,arch,debian,fedora}}/{default,common}.nix` + - [ ] TODO: Only use `users/` for user-specific configurations + - [ ] TODO: Create user configs: `users/{default,guest,root}/{default,common}.nix` + +- [ ] TODO: Re-organize Nix configs to use libs: + - [ ] TODO: `nix-community/haumea` + - [ ] TODO: `paisano/paisano-core` + - [ ] TODO: `divnix/std` + - [ ] TODO: `divnix/hive` + - [ ] TODO: `flake-parts` + +- [ ] TODO: Re-organize profiles: + - [ ] `profiles/{,common,nixos,darwin,wsl,nixondroid,system/{common,arch,debian,fedora}}/default.nix` + +- [ ] TODO: Setup Nix secrets: + - [ ] TODO: Configure `sops-nix` / `agenix` with keys that **are not** host-specific + - [ ] TODO: Create domain-specific secret configs? + - [ ] `profiles/domains//secrets.yaml` + - [ ] `profiles/servers//secrets.yaml` + - [ ] TODO: Configure `sops-nix` / `agenix` with keys that **are** host-specific + - Hosts: `hosts//secrets.yaml` ? + - Users: `users//secrets.yaml` ? + + +- [ ] TODO: Modify existing server profiles to accept arguments: + - [ ] `domain` + - [ ] `subdomain` + + +- [ ] TODO: Configure NixOS profiles for servers: + + - `profiles/servers/auth/{default,common}.nix` + - `profiles/servers/auth/idp/{default,common,keycloak,ldap}.nix` + - `profiles/servers/auth/kerberos/{default,common}.nix` + - `profiles/servers/auth/ldap/{default,common,openldap,lldap,radius,bridge/{default,active-directory},active-directory}.nix` + - `profiles/servers/auth/proxy/{default,common,oauth2proxy,vouch}.nix` + + - `profiles/servers/builder/{default,common}.nix` + + - `profiles/servers/certificate-authority/{default,common,tls}.nix` + - `profiles/servers/certificate-authority/ssh/{default,common,keys,certs}.nix` + - `profiles/servers/certificate-authority/gpg/{default,common,openpgp,gpg}.nix` + + - `profiles/servers/fileserver/{default,ftp,ftps,sftp,nfs}.nix` + + - `profiles/servers/mail/{default,common}.nix` + - `profiles/servers/mail/bridge/{default,common,ews}.nix` + - `profiles/servers/mail/webmail/{default,common,rainloop}.nix` + - `profiles/servers/mail/protocols/{default,common,smtp,imap}.nix` + + - `profiles/servers/netboot/{default,common,tft,ipxe,pxe}.nix` + + - `profiles/servers/networking/{default,common}.nix` + - `profiles/servers/networking/dns/{default,common,powerdns,avahi,pdns}.nix` + + - `profiles/servers/matrix/{default,common}.nix` + - `profiles/servers/matrix/admin/{default,common}.nix` + - `profiles/servers/matrix/bots/{default,common}.nix` + - `profiles/servers/matrix/bridges/{default,common}.nix` + - `profiles/servers/matrix/bridges/{appservice,}/{default,common}.nix` + - `profiles/servers/matrix/calls/{default,common}.nix` + - `profiles/servers/matrix/calls/frontend/{default,common,jitsi,jitsi-meet}.nix` + - `profiles/servers/matrix/calls/nat/{default,common,coturn,stun,turn}.nix` + - `profiles/servers/matrix/calls/protocols/{default,common,sip}.nix` + - `profiles/servers/matrix/frontend/{default,common,element,hydrogen,schlidi}.nix` + - `profiles/servers/matrix/homeserver/{default,common,synapse,dendrite,conduit}.nix` + - `profiles/servers/matrix/integration/{default,common}.nix` + - `profiles/servers/matrix/media/{default,common,ma1sd}.nix` + - `profiles/servers/matrix/moderation/{default,common}.nix` + + - `profiles/servers/vpn/{default,common,{headscale,openvpn}/{default,common}}.nix` + + - `profiles/servers/webserver/{default,common,base,well-known}.nix` + - `profiles/servers/webserver//{default,common,base,well-known.nix` (domains: `piwine.com`, `pi.wine`) + + - [ ] Matrix AppServices / Bridges: + - [ ] `XMPP` + - [ ] Microsoft Teams + - [ ] Facebook Messenger + - [ ] Instagram Messenger diff --git a/docs/configs/todo-nixvim.md b/docs/configs/todo-nixvim.md new file mode 100644 index 00000000..c8aae196 --- /dev/null +++ b/docs/configs/todo-nixvim.md @@ -0,0 +1,6 @@ +# Nixvim To-Dos + +- [ ] TODO: Add `background_color` option to set `notify.nvim` highlight (make complaint notification go away) +- [ ] TODO: Fix tab completion behavior in `nvim-cmp` configuration +- [ ] TODO: Fix `lightbulb.nvim` duplicate lightbulb with `dap` + diff --git a/docs/configs/todo-overlays.md b/docs/configs/todo-overlays.md new file mode 100644 index 00000000..a9287132 --- /dev/null +++ b/docs/configs/todo-overlays.md @@ -0,0 +1,8 @@ +# To-Dos: Overlays + +- [ ] Move overlays.gnome-decoder from profiles.nix -> profiles.gnome +- [ ] Add overlays.mutter -> profiles.gnome +- [ ] Add overlays.gnome-settings-center -> profiles.gnome +- [ ] Check AUR packages mutter-performance & gnome-shell-performance for useful patches +- [ ] Build & test gnome-settings-center patches +- [ ] Build & test mutter patches diff --git a/docs/configs/todo-shell.md b/docs/configs/todo-shell.md new file mode 100644 index 00000000..58510427 --- /dev/null +++ b/docs/configs/todo-shell.md @@ -0,0 +1,26 @@ +# To-Dos: Configure Shell + +Tasks to perform for configuring the shell + +## Generic + +Applies to all shells (or multiple) + +## Bash +## Fish + +## ZSH + +- FIXME: Zsh set terminal tab title (on prompt redraw?) +- FIXME: Zsh cursor highlight unreadable +- FIXME: Zsh history file not respecting `programs.zsh.history.path = "$XDG_DATA_HOME/zsh/history";` +- FIXME: Zsh cd hook not executing +- FIXME: Missing shell aliases +- FIXME: Neovim set terminal tab title + +- TODO: Append flag `--commit-lock-file` to `nix flake update` alias +- TODO: Remove unnecessary config for NixOS shells (home-manager should take care of this) + +## Nushell + +- TODO: Install Nushell diff --git a/docs/customModules/apps-install.md b/docs/customModules/apps-install.md new file mode 100644 index 00000000..07c4ed23 --- /dev/null +++ b/docs/customModules/apps-install.md @@ -0,0 +1,134 @@ +# App Installation Modules for NixOS, Home-Manager, & nix-darwin + +## Package Manager App Name Mapping + +Goals: + +1. Associate all desktop applications in `nixpkgs` with their + equivalent names in `flatpak` and other package managers. + +2. Assoicate all server packages in `nixpkgs` with their + equivalent Docker images. + +3. Create list of apps unpackaged in `nixpkgs`. + +4. Abstract away package installation method. + User specifies app they want installed, and that app will be installed. + +Package Managers: + +- `nixpkgs` +- `flatpak` (for desktop apps) +- `docker` (for server programs) +- programming language package managers +- cross-distro package managers + +Implementation Possibilities: + +- Override package's derivation with new attrs: + + - `meta.packageType = "lib|app|pkg|server|assets|other"` + - `meta.packageChannel = "stable|lts|beta|alpha|nightly|rc|master| + - `meta.packageNames. = { name = ""; channel="stable|lts|beta|alpha|nightly|rc|master|latest"; }` + - `meta.packageNames.flatpak = { name = ""; appId = ""; repo = ""; branch = "stable|beta|nightly|master||..."; };` + +- Try to infer as much information as possible from `AppStream` data. + - See if `repology` has another method of association app/package names. + +## Options + +### Shared + +```(nix) +let cfg = config.apps; in { +imports = []; +options = { + global = { + installationPreference = mkOption { + type = listOf str; + description = "List of installation methods in order of preference"; + default = ["nix" "flatpak" "other"]; + }; + shareUserInstalls = mkOption { + type = bool; + description = "Whether to elevate user installations to a single system installation when multiple users install the same app in their home environment."; + default = false; + + }; + shareSystemInstall = mkOption { + type = bool; + description = "Whether to skip installing an app via a more-preferred method when app is already configured to be in environment via a less-preferred method. This avoids duplicate installations at the expense of using a less-preferred installation method for an app."; + default = false; + # Examples: + # - NixOS `environment.systemPackages=[]` => `home.packages=[]`, NixOS + Home `services.flatpak.packages=[]` + # - NixOS `services.flatpak.packages=[]` => `environment.systemPackages=[]`, `home.packages=[]`, & Home `services.flatpak.packages=[]` + # - Home `home.packages=[]` => Home `services.flatpak.packages=[]` + }; + + allowMultipleInstalls = mkOption { + type = bool; + description = "Whether to allow multiple duplicate installations of the same package. If false, less preferred installation(s) will be removed unless determined otherwise by config."; + default = true; + }; + + nixpkgs = { + fallbackBrokenPackages = mkOption { + type = bool; + description = "Whether to fallback to less-preferred installation methods when a package in `nixpkgs` sets `meta.broken = true`"; + default = true; + }; + }; + + flatpak = { + uninstallUnspecified = mkOption { + type = bool; + description = "Whether to remove flatpak installations not specified declaratively in the NixOS / home-manager configuration."; + default = false; + }; + fallbackRuntimeEOL = mkOption { + type = bool; + description = "Whether to fallback to less-preferred installation methods when a flatpak app is using an end-of-life runtime."; + default = true; + }; + }; + }; + + # Individual Apps + = { + + installationPreference = mkOption { + type = listOf str; + description = "List of installation methods in order of preference. Overrides the global setting for this package."; + default = ["nix" "flatpak" "other"]; + }; + + forceInstall = mkOption { + type = oneOf bool str; + description = "Whether to force installation of the package. Can specify the installation method to force installing via a specific method. If `true`, app will be forcibly installed via method determined by other options. If false, the app will only be installed if declared elsewhere in configuration."; + default = false; + }; + + # TODO: Add priority field for each package manager + packageName = { + nixpkgs = mkPackageOption "nixpkgs"; + flatpak = mkOption { + type = nullOr oneOf str attrs {repoName=str; type="app"|"runtime"; appId=str; branch=str;}; + description = "Attrset with repoName, type, appId, branch, or an equivalent string in the format `////`. System type will be inferred from the system."; + }; + # ... + }; + + }; + +}; +``` + +- [ ] Extend `GermanBread/declarative-flatpak` with options: + - `services.flatpak.removeUndeclared = true | false` + - `services.flatpak.removeUnusedRuntimes = true | false` + +### Home-Manager + +- `services.flatpak.shareInstalls = true` + +### NixOS / nix-darwin diff --git a/examples/nur-homemanager-use-modules.nix b/docs/examples/nur-homemanager-use-modules.nix similarity index 100% rename from examples/nur-homemanager-use-modules.nix rename to docs/examples/nur-homemanager-use-modules.nix diff --git a/examples/nur-nixos-use-modules-overlays-libs.nix b/docs/examples/nur-nixos-use-modules-overlays-libs.nix similarity index 100% rename from examples/nur-nixos-use-modules-overlays-libs.nix rename to docs/examples/nur-nixos-use-modules-overlays-libs.nix diff --git a/docs/features/browser-profile-on-ram.md b/docs/features/browser-profile-on-ram.md new file mode 100644 index 00000000..49e4b96c --- /dev/null +++ b/docs/features/browser-profile-on-ram.md @@ -0,0 +1,12 @@ +# Browser Profile Data in RAM + +## Firefox + +See Also: + +- [Arch Wiki: Firefox/Profile on RAM](https://wiki.archlinux.org/title/Firefox/Profile_on_RAM) + +## Chromium + +See Also: + diff --git a/docs/features/firefox-autoconfig.md b/docs/features/firefox-autoconfig.md new file mode 100644 index 00000000..641f786b --- /dev/null +++ b/docs/features/firefox-autoconfig.md @@ -0,0 +1,4 @@ +# Firefox Autoconfig + +[Arch Wiki: Firefox](https://wiki.archlinux.org/title/Firefox#Settings_storage) +[Mozilla Support: Autoconfig](https://support.mozilla.org/en-US/kb/customizing-firefox-using-autoconfig) diff --git a/docs/features/firefox-gnome-search-provider.md b/docs/features/firefox-gnome-search-provider.md new file mode 100644 index 00000000..6136a275 --- /dev/null +++ b/docs/features/firefox-gnome-search-provider.md @@ -0,0 +1,8 @@ +# Firefox GNOME Search Provider + +[Arch Wiki: Firefox](https://wiki.archlinux.org/title/Firefox) + +1. Set Firefox flag: TODO: Show NixOS/home-manager config + `browser.gnome-search-provider.enabled = true` + +2. Install package `pkgs.gnomeExtensions.firefox-search-provider` ? Correct packge name? diff --git a/docs/features/tts.md b/docs/features/tts.md new file mode 100644 index 00000000..9ae3c999 --- /dev/null +++ b/docs/features/tts.md @@ -0,0 +1,25 @@ +# Text-to-Speech + +## TTS Engines + +### eSpeak + +1. Install package: `pkgs.espeak-ng` +2. Write config: `~/.config/speech-dispatcher/speechd.conf` + ``` + AddModule "espeak-ng" "sd_espeak-ng" "espeak-ng.conf" + DefaultModule espeak-ng + ``` + +### Hunspell + +1. Install package: `pkgs.hunspell`, `pkgs.hunspellDicts.en_US`, ... +## Use TTS on system + +### Firefox + +1. Enable Speech Synthesis: + Set flag: `media.webspeech.synth.enabled = true` + +2. Disable Fingerprinting Protection: (WARNING: privacy downgrade) + Set flag: `privacy.resistFingerprinting = false` diff --git a/docs/fixes/flatpak-dbus-broker.nix b/docs/fixes/flatpak-dbus-broker.nix new file mode 100644 index 00000000..9334d53f --- /dev/null +++ b/docs/fixes/flatpak-dbus-broker.nix @@ -0,0 +1,14 @@ +{ pkgs, ... }: + +{ + systemd.packages = [ + (pkgs.writeTextFile { + name = "flatpak-dbus-overrides"; + destination = "/etc/systemd/user/dbus-.service.d/flatpak.conf"; + text = '' + [Service] + ExecSearchPath=${cfg.package}/bin + ''; # Package: dbus-broker + }) + ]; +} diff --git a/docs/fixes/flatpak-dbus.patch b/docs/fixes/flatpak-dbus.patch new file mode 100644 index 00000000..bf0c8eff --- /dev/null +++ b/docs/fixes/flatpak-dbus.patch @@ -0,0 +1,96 @@ +diff --git a/nixos/modules/services/desktops/flatpak.nix b/nixos/modules/services/desktops/flatpak.nix +index 7da92cc9f26..868714ce603 100644 +--- a/nixos/modules/services/desktops/flatpak.nix ++++ b/nixos/modules/services/desktops/flatpak.nix +@@ -28,11 +28,59 @@ in { + } + ]; + +- environment.systemPackages = [ pkgs.flatpak ]; ++ environment.systemPackages = [ pkgs.flatpak pkgs.xdg-dbus-proxy pkgs.dbus-broker ]; + +- services.dbus.packages = [ pkgs.flatpak ]; ++ services.dbus.packages = [ pkgs.flatpak /*"/var/lib/flatpak/exports"*/ ]; + +- systemd.packages = [ pkgs.flatpak ]; ++ systemd.services.dbus-broker = { ++ path = [ pkgs.flatpak ]; ++ enable = true; ++ aliases = [ "dbus.service" ]; ++ # Don't restart dbus-daemon. Bad things tend to happen if we do. ++ reloadIfChanged = true; ++ restartTriggers = [ "/etc/dbus-1" ]; ++ environment = { LD_LIBRARY_PATH = config.system.nssModules.path; }; ++ }; ++ systemd.user.services.dbus-broker = { ++ path = [ pkgs.flatpak ]; ++ enable = true; ++ wantedBy = [ "default.target" ]; ++ aliases = [ "dbus.service" ]; ++ # Don't restart dbus-daemon. Bad things tend to happen if we do. ++ reloadIfChanged = true; ++ restartTriggers = [ "/etc/dbus-1" ]; ++ environment = { LD_LIBRARY_PATH = config.system.nssModules.path; }; ++ }; ++ ++ #systemd.services.dbus = { ++ # enable = true; ++ # aliases = [ "dbus.service" ]; ++ #}; ++ #systemd.user.services.dbus = { ++ # enable = true; ++ # aliases = [ "dbus.service" ]; ++ #}; ++ ++ systemd.sockets.dbus = { ++ description = "D-Bus System Message Bus Socket"; ++ wantedBy = [ "sockets.target" ]; ++ socketConfig = { ++ ListenStream = "/run/dbus/system_bus_socket"; ++ }; ++ }; ++ ++ systemd.user.sockets.dbus = { ++ description = "D-Bus System Message Bus Socket"; ++ wantedBy = [ "sockets.target" ]; ++ socketConfig = { ++ ListenStream = "%t/bus"; ++ ExecStartPost = "-/run/current-system/systemd/bin/systemctl --user set-environment DBUS_SESSION_BUS_ADDRESS=unix:path=%t/bus"; ++ }; ++ }; ++ #systemd.services.dbus.enable = false; ++ #systemd.user.services.dbus.enable = false; ++ ++ systemd.packages = [ pkgs.flatpak pkgs.dbus-broker ]; + + environment.profiles = [ + "$HOME/.local/share/flatpak/exports" +diff --git a/nixos/modules/services/system/dbus.nix b/nixos/modules/services/system/dbus.nix +index d4cacb85694..85eb4350f73 100644 +--- a/nixos/modules/services/system/dbus.nix ++++ b/nixos/modules/services/system/dbus.nix +@@ -102,7 +102,7 @@ in + + users.groups.messagebus.gid = config.ids.gids.messagebus; + +- systemd.packages = [ pkgs.dbus.daemon ]; ++ #systemd.packages = [ pkgs.dbus.daemon ]; + + security.wrappers.dbus-daemon-launch-helper = { + source = "${pkgs.dbus.daemon}/libexec/dbus-daemon-launch-helper"; +diff --git a/pkgs/os-specific/linux/dbus-broker/default.nix b/pkgs/os-specific/linux/dbus-broker/default.nix +index b7e0a6b6158..631c173e1ed 100644 +--- a/pkgs/os-specific/linux/dbus-broker/default.nix ++++ b/pkgs/os-specific/linux/dbus-broker/default.nix +@@ -23,6 +23,11 @@ stdenv.mkDerivation rec { + PKG_CONFIG_SYSTEMD_SYSTEMDUSERUNITDIR = "${placeholder "out"}/lib/systemd/user"; + PKG_CONFIG_SYSTEMD_CATALOGDIR = "${placeholder "out"}/lib/systemd/catalog"; + ++ postPatch = '' ++ substituteInPlace src/launch/launcher.c \ ++ --replace "/usr/share/dbus-1" "${dbus.daemon}/share/dbus-1" ++ ''; ++ + postInstall = '' + install -Dm644 $src/README.md $out/share/doc/dbus-broker/README + diff --git a/docs/flakes/list.md b/docs/flakes/list.md new file mode 100644 index 00000000..4736e9e3 --- /dev/null +++ b/docs/flakes/list.md @@ -0,0 +1,59 @@ +# Flake List + +## GitHub + +divnix/std +divnix/hive +divnix/yants +divnix/digga +nix-community/nixago - Multi-format config file generator +nix-community/home-manager +nix-community/disko +nix-community/nx-eval-jobs +nix-community/nix-vscode-extensions +nix-community/nixos-generators +nix-community/nixpkgs-terraform-providers-bin +nix-community/dream2nix +nix-community/nur-search +nix-community/comma +nix-community/haumea +nix-community/nixpkgs-wayland +nix-community/nurl +nix-community/aarch64-build-box +nix-community/patsh +nix-community/neovim-nightly-overlay +nix-community/fenix +nix-community/bundix +nix-community/lanzaboote +nix-community/queued-build-hook +nix-community/harmonia +nix-community/naersk - Rust package builder +nix-community/bundix +nix-community/bundix +nix-community/bundix +nix-community/bundix +nix-community/bundix + +DeterminateSystems/nix-installer + +juliosueiras-nix/nix-security - Kali Linux tools for Nix + +- [nmatthewbauer/nix-bundle](https://github.com/matthewbauer/nix-bundle) - Bundle packages from Nixpkgs into single executable +- [io12/nix-flatpak](https://github.com/io12/nix-flatpak) - Build flatpaks [**WIP**, **Possibly abandoned**, **No flake**] + +## GitLab +### Main Instance +### Other Instance + + +## SourceHut +### Main Instance + +- [nix-freeze-tree](https://git.sr.ht/~jack/nix-freeze-tree) - Generate Nix expressions to rebuild some directory tree. + + +### Other Instance + + + +## Other Git Hosts diff --git a/docs/flakes/outputs-digga.md b/docs/flakes/outputs-digga.md new file mode 100644 index 00000000..f3ae03d4 --- /dev/null +++ b/docs/flakes/outputs-digga.md @@ -0,0 +1,32 @@ +github:divnix/digga/0595ae70cdb5ccf1ab031199fe98551c4b378bd9 +├───checks +│ ├───aarch64-darwin +│ │ └───libTests: derivation 'devos-lib-tests' +│ ├───aarch64-linux +│ │ └───libTests: derivation 'devos-lib-tests' +│ ├───x86_64-darwin +│ │ └───libTests: derivation 'devos-lib-tests' +│ └───x86_64-linux +│ └───libTests: derivation 'devos-lib-tests' +├───darwinModules: unknown +├───defaultTemplate: template: an awesome template for NixOS users, with consideration for common tools like home-manager, devshell, and more. + +├───devShell +│ ├───aarch64-darwin: development environment 'digga' +│ ├───aarch64-linux: development environment 'digga' +│ ├───x86_64-darwin: development environment 'digga' +│ └───x86_64-linux: development environment 'digga' +├───formatter +│ ├───aarch64-darwin: package 'treefmt-0.4.1' +│ ├───aarch64-linux: package 'treefmt-0.4.1' +│ ├───x86_64-darwin: package 'treefmt-0.4.1' +│ └───x86_64-linux: package 'treefmt-0.4.1' +├───jobs: unknown +├───lib: unknown +├───nixosModules +│ ├───bootstrapIso: NixOS module +│ └───nixConfig: NixOS module +├───overlays +└───templates + └───devos: template: an awesome template for NixOS users, with consideration for common tools like home-manager, devshell, and more. + diff --git a/docs/flakes/outputs-hive.md b/docs/flakes/outputs-hive.md new file mode 100644 index 00000000..d596e62e --- /dev/null +++ b/docs/flakes/outputs-hive.md @@ -0,0 +1,11 @@ +# Flake Outputs: divnix/hive + +github:divnix/hive/f412bca98a5ed47578062494bb90754581df0a46 +├───blockTypes: unknown +├───collect: unknown +├───grow: unknown +├───growOn: unknown +├───harvest: unknown +├───pick: unknown +└───winnow: unknown + diff --git a/docs/flakes/outputs-paisano.md b/docs/flakes/outputs-paisano.md new file mode 100644 index 00000000..237cdb6c --- /dev/null +++ b/docs/flakes/outputs-paisano.md @@ -0,0 +1,6 @@ +github:paisano-nix/core/88f2aff10a5064551d1d4cb86800d17084489ce3 +├───grow: unknown +├───growOn: unknown +├───harvest: unknown +├───pick: unknown +└───winnow: unknown diff --git a/docs/flakes/outputs-std.md b/docs/flakes/outputs-std.md new file mode 100644 index 00000000..471dd92a --- /dev/null +++ b/docs/flakes/outputs-std.md @@ -0,0 +1,81 @@ +# Flake Outputs: divnix/std + +├───__functor: unknown +├───__std: unknown +├───aarch64-darwin: unknown +├───aarch64-linux: unknown +├───blockTypes: unknown +├───containers: unknown +├───data: unknown +├───dataWith: unknown +├───devShells +│ ├───aarch64-darwin +│ │ ├───book: development environment 'devshell' +│ │ ├───checks: development environment 'checks' +│ │ └───default: development environment 'Standard' +│ ├───aarch64-linux +│ │ ├───book: development environment 'devshell' +│ │ ├───checks: development environment 'checks' +│ │ └───default: development environment 'Standard' +│ ├───x86_64-darwin +│ │ ├───book: development environment 'devshell' +│ │ ├───checks: development environment 'checks' +│ │ └───default: development environment 'Standard' +│ └───x86_64-linux +│ ├───book: development environment 'devshell' +│ ├───checks: development environment 'checks' +│ └───default: development environment 'Standard' +├───devshells: unknown +├───dmerge: unknown +├───files: unknown +├───flakeModule: unknown +├───functions: unknown +├───grow: unknown +├───growOn: unknown +├───harvest: unknown +├───incl: unknown +├───installables: unknown +├───microvms: unknown +├───nixago: unknown +├───nomadJobManifests: unknown +├───packages +│ ├───aarch64-darwin +│ │ ├───adrgen: package 'adrgen-2022-08-08' +│ │ ├───default: package 'std-0.20.5' +│ │ ├───mdbook: package 'mdbook-0.4.25' +│ │ ├───mdbook-kroki-preprocessor: package 'mdbook-kroki-preprocessor-0.1.2' +│ │ ├───mdbook-paisano-preprocessor: package 'mdbook-paisano-preprocessor-0.4.0' +│ │ └───std: package 'std-0.20.5' +│ ├───aarch64-linux +│ │ ├───adrgen: package 'adrgen-2022-08-08' +│ │ ├───default: package 'std-0.20.5' +│ │ ├───mdbook: package 'mdbook-0.4.25' +│ │ ├───mdbook-kroki-preprocessor: package 'mdbook-kroki-preprocessor-0.1.2' +│ │ ├───mdbook-paisano-preprocessor: package 'mdbook-paisano-preprocessor-0.4.0' +│ │ └───std: package 'std-0.20.5' +│ ├───x86_64-darwin +│ │ ├───adrgen: package 'adrgen-2022-08-08' +│ │ ├───default: package 'std-0.20.5' +│ │ ├───mdbook: package 'mdbook-0.4.25' +│ │ ├───mdbook-kroki-preprocessor: package 'mdbook-kroki-preprocessor-0.1.2' +│ │ ├───mdbook-paisano-preprocessor: package 'mdbook-paisano-preprocessor-0.4.0' +│ │ └───std: package 'std-0.20.5' +│ └───x86_64-linux +│ ├───adrgen: package 'adrgen-2022-08-08' +│ ├───default: package 'std-0.20.5' +│ ├───mdbook: package 'mdbook-0.4.25' +│ ├───mdbook-kroki-preprocessor: package 'mdbook-kroki-preprocessor-0.1.2' +│ ├───mdbook-paisano-preprocessor: package 'mdbook-paisano-preprocessor-0.4.0' +│ └───std: package 'std-0.20.5' +├───pick: unknown +├───runnables: unknown +├───sharedActions: unknown +├───systems: unknown +├───templates +│ ├───minimal: template: Get started with a minimal, documented Standard project +│ └───rust: template: Sane Defaults for Nix-centric Rust Development +├───winnow: unknown +├───x86_64-darwin: unknown +├───x86_64-linux: unknown +└───yants: unknown + diff --git a/docs/flakes/outputs-yants.md b/docs/flakes/outputs-yants.md new file mode 100644 index 00000000..6ab2db70 --- /dev/null +++ b/docs/flakes/outputs-yants.md @@ -0,0 +1,25 @@ +github:divnix/yants/9eab24b273ce021406c852166c216b86e2bb4ec4 +├───__functor: unknown +├───__unfix__: unknown +├───any: unknown +├───attrs: unknown +├───bool: unknown +├───defun: unknown +├───drv: unknown +├───either: unknown +├───eitherN: unknown +├───enum: unknown +├───float: unknown +├───function: unknown +├───functionWithArgs: unknown +├───int: unknown +├───list: unknown +├───openStruct: unknown +├───option: unknown +├───path: unknown +├───restrict: unknown +├───string: unknown +├───struct: unknown +├───sum: unknown +├───type: unknown +└───unit: unknown diff --git a/docs/hosts/fw-improve-battery.md b/docs/hosts/fw-improve-battery.md new file mode 100644 index 00000000..a23b5b85 --- /dev/null +++ b/docs/hosts/fw-improve-battery.md @@ -0,0 +1,38 @@ +# Framework Laptop (12th Gen i7): Improve Battery Life + +- Enable Panel Self-Refresh: + 1. [X] Add kernel cmdline parameter: `i915.enable_psr=1` + +- Improve suspend power usage: + 1. Enable hibernation + 2. Use `deep` sleep instead of `s2idle` + 3. Add kernel cmdline parameter: `nvme.noacpi=1` + +- Enable GPU rendering in Firefox + See More: + - [Arch Wiki: Firefox](https://wiki.archlinux.org/title/Firefox#Hardware_video_acceleration) + - [Arch Wiki: Hardware Video Acceleration](https://wiki.archlinux.org/title/Hardware_video_acceleration) + - [ArchLinux Forums](https://bbs.archlinux.org/viewtopic.php?id=244031) + 1. Check: `about:support` field: `Compositing = WebRender` + 2. Set Firefox `about:config` flags: + - `media.rdd-ffmpeg.enabled = true` + - `media.navigator.mediadatadecoder_vpx_enabled = true` + - Enable VAAPI: `media.ffmpeg.vaapi.enabled = true` + - Force hardware WebRender: `gfx.webrender.all = true` + 3. Set Firefox wayland environment variable: ` [[ "${XDG_SESSION_TYPE}" = "wayland" ]] && export MOZ_ENABLE_WAYLAND=1` + +- Enable GPU rendering in Chromium + See More: + - [Arch Wiki: Chromium](https://wiki.archlinux.org/index.php/Chromium#Hardware_video_acceleration) + - [Arch Wiki: Hardware Video Acceleration](https://wiki.archlinux.org/title/Hardware_video_acceleration) + - [ArchLinux Forums](https://bbs.archlinux.org/viewtopic.php?id=244031) + 0. Check: + - `chrome://media-internals` field: `video_decoder` + - `chrome://gpu` field: `Video Decode: Hardware accelerated` + 1. Install packages: + - `intel-media-driver` + - `intel-gpu-tools` + 2. Set Chromium flags in either `~/.config/chromium-flags.conf` or `chrome://flags`: + - `--enable-gpu-rasterization` + - `--ignore-gpu-blacklist` + - `--disable-gpu-driver-workarounds` diff --git a/docs/packages/list.md b/docs/packages/list.md new file mode 100644 index 00000000..fd42d64a --- /dev/null +++ b/docs/packages/list.md @@ -0,0 +1,81 @@ +# List of interesting packages + +## Nix User Repositories (NUR) + +Prefix: `pkgs.nur.repos.` + +- [ldap-sshkp](https://github.com/CRTified/ldap-sshkp) `crtified.ldap-sshkp` - Retrieve OpenSSH keys from LDAP for sshd. +- `mic92.vaultwarden_ldap` - LDAP connector for Vaultwarden + + +- `linyinfeng.matrix-chatgpt-bot` +- `linyinfeng.matrix-media-repo` +- `linyinfeng.matrix-qq` +- `linyinfeng.matrix-wechat` +- `linyinfeng.mstickereditor` +- `linyinfeng.synapse-s3-storage-provider` +- `linyinfeng.telegram-send` +- `linyinfeng.mstickereditor` +- `linyinfeng.mstickereditor` +- `meain.mmm` - Matrix media manager +- `meain.nn` - Quick bot to run shell commands on servers via Matrix +- `meain.chatgpt-cli` +- `splintah.giph` + +- `dukzcry.homer` - Static homepage for your server +- `fedx.searxng` +- `milahu.yacy` - P2P distributed web search engine & intranet search appliance +xddxdd.phpmyadmin +xddxdd.phppgadmin + +- `milahu.pocketsphinx` - Speech recognition engine + +- `fliegendewurst.q` - CLI DNS client w support for UDP, TCP, DoT, DoH, DoQ, ODoH +- `lourkeur.garlicshare` - Anonymously share files on .onion service over TOR +thaumy.dup-img-finder + +- `dschrempf.codeium` - Language model code completion +- `minion3665.codeium-vim` - Vim plugin for Codeium + +- `dukzcry.gitupdate` +- `lykos153.git-rstash` - Transfer git stashes to/from remotes easily +- `liyangau.act` - Run GitHub Actions locally +- `meain.dbui` - Universal DB TUI/CLI for MySQL, PostgreSQL, SQLite +- `meain.prosemd-lsp` - Proofreading/linting language server for Markdown files +- `meain.tojson` - Convert b/w YAML, TOML, JSON +- `meain.gloc` - Run shell command in all the git repos in a directory +- `mic92.cntr` - Container debugging tool based on FUSE +- `mic92.python3Packages.jupyterthemes` - Custom Jupyter Notebook themes +- `milahu.rpl` - Replace strings in files +- `minion3665.git-conflict-nvim` - Neovim plugin to visualize & resolve merge conflicts +- `nagy.schemaorg` - Interact with schema.org, schemas, & supporting software + +- `shados.tagsistant` - Semantic filesystem for Linux, with relation reasoner, autotagging plugins and a deduplication service +- `sikmir.capture2text` - Quickly OCR captured portion of screen w/ keyboard shortcut +tokudan.disk-utilities + +- `grafcube.antidot` - Cleans up $HOME from pesky dotfiles +- `Freed-Wu.manpager` - Colorized man page viewer +- `meain.spaceman-diff` - Diff images from the command line +- `misterio.shellcolord` - Daemon that themes your shell remotely +- `misterio.rgbdaemon` - Daemon that interacts with ckb-next & openrgb +- `lykos153.dotool` - Simulate input anywhere +- [simp1e-cursors](https://github.com/zoli111/simp1e) `nur.repos.dan4ik605743.simp1e-cursors` - Pretty & simple cursor theme + + +milahu.archive-org-downloader # DL books from archive.org +ifd3f.pleroma-ebooks # Pleroma with extra features for eBooks +jo1gi.audiobook-dl-git # CLI to download audiobooks from online sources +jo1gi.audible-cli +jo1gi.AAXtoMP3 # Convert Audible's .aax filetype to MP3, FLAC, M4A, OPUS +jo1gi.zspotify # Spotify search & download +milahu.surge-filesharing # P2P filesharing w/ 100% anonymous file transfers +xeals.spotify-ripper + + +tinybeachthor.operator-sdk + + +### Find user repo + +- `wikit` - Dictionary & translation CLI & GUI app in Tauri & Yew diff --git a/docs/packages/packagers.md b/docs/packages/packagers.md new file mode 100644 index 00000000..7d152771 --- /dev/null +++ b/docs/packages/packagers.md @@ -0,0 +1,26 @@ +# To-Do: Packager Libs/Packages + +1. `flatpak2nix` - Flatpaks +2. `snap2nix` - Ubuntu Snaps +3. `deb2nix` - Debian +4. `rpm2nix` - Fedora +5. `pkgbuild2nix` - Arch Linux +6. `apkbuild2nix` - Alpine + +Find some way to allow packages to specify dependency version constraints, +like in Rust via `Cargo.toml` or Node.js via `package.json`. + +Find some way to create development branch package variants for all packages in `nixpkgs`. + +Existing Variants: + +- `nodePackages` (current stable) +- `nodePackages_latest` (next stable?) +- `python311Packages` & `python312Packages` + +- Automatically update revisions and hashes to latest from source repo on set schedule. +- Automatically test each package upon update, and find some mechanism to track: + - Failures on each version/revision. + - Last-known-working version/revision with respect to `` package. + - Last-known-working version/revision with respect to **all** packages. + - diff --git a/docs/packages/todo-configure.md b/docs/packages/todo-configure.md new file mode 100644 index 00000000..4c76f9e2 --- /dev/null +++ b/docs/packages/todo-configure.md @@ -0,0 +1,26 @@ +# To-Dos: Configure Packages + +## GNOME Shell Extensions + +- [ ] Sync colors in `gnomeExtensions.forge` with system and/or wallpaper +- [ ] Sync keymap config file for `gnomeExtensions.shortcuts` with shortcuts from: + - `gnome.gnome-shell` + - `gnomeExtensions.forge` + - `gnomeExtensions.ddterm` + +## Editors + +- [ ] Add flake input: `pta2002/nixvim` +- [ ] Configure neovim + +## CLI Utils + +- [ ] Run dconf2nix on home-manager activation + +## GNOME Apps + +- [ ] Set location of `configuration.nix` & `flake.nix` in `nix-software-center` +- [ ] Set location of `configuration.nix` & `flake.nix` in `nixos-conf-editor` + - [ ] Enable option: `system.copyConfiguration` + + diff --git a/docs/packages/todo-create.md b/docs/packages/todo-create.md new file mode 100644 index 00000000..7d2a2654 --- /dev/null +++ b/docs/packages/todo-create.md @@ -0,0 +1,59 @@ +# To-Dos: Create Packages + +More Packages: + +- [`nvfetcher.toml`](../../pkgs/nvfetcher.toml) + +See Also: + +- [Docs: nix-init]() +- [Docs: nurl]() +- [Docs: nvfetcher]() + +## Themes + +- [ ] Check if package for `firefox-gnome-theme` exists, else create + +## GNOME Shell Extensions + +- [X] [andyholmes/gnome-shell-extension-valent](https://github.com/andyholmes/gnome-shell-extension-valent) + +## GNOME Apps + +- [ ] Flatseal +- [ ] Foliate (gtk4 branch) +- [ ] Gradience (latest) +- [ ] Hackgregator + + +## Foreign Systems + +### Android Apps + +- [ ] Go thru apps in Obtainium to find more apps + +- [ ] NeoLauncher +- [ ] NeoFeed +- [ ] NeoWellbeing +- [ ] Lawnchair +- [ ] Lawnfeed +- [ ] Lawnicons +- [ ] Kaevsito +- [ ] Kaevsito Icons + +### Archives + +- [ ] Flashable zips for Android + - [ ] GrapheneOS for flame + - [ ] GrapheneOS for fajita + - [ ] GrapheneOS+NixOS for fajita + +### Disk Images + +- [ ] NixOS mobile for fajita +- [ ] NixOS mobile + GrapheneOS for fajita + +- [ ] Nintendo Switch SD Card image + +- [ ] Ventoy image with latest NixOS installer + diff --git a/docs/questions/hive.md b/docs/questions/hive.md new file mode 100644 index 00000000..961913e6 --- /dev/null +++ b/docs/questions/hive.md @@ -0,0 +1,34 @@ +# Questions about new Nix Flake Standard structure + + +1. What is the relationship between the following?: + +- std +- hive +- paisano +- haumea +- + +2. Is this new schema going to have the ability to define the following between cells?: + +- common (shared config for all/subsets) +- default (common + small set of config to apply by default) + + +3. Are there any resources for learning? i.e.: +- Documentation +- Tutorials +- Example configs +- Dotfile repos (besides [dar/home-nix](https://gitlab.com/dar/hive-nix)) + +4. Is there going to be a way to define a network? + +5. Is there going to be a way to define machines & their hardware? +- Alter profiles based on them (e.g. gnome profile on laptop loads laptop-specific configuration for GNOME) + +6. How can you add packages from other flakes? +- nixGL +- nixpkgs-wayland +- packages defined in flakes + + diff --git a/docs/questions/packaging.md b/docs/questions/packaging.md new file mode 100644 index 00000000..ad72e5a3 --- /dev/null +++ b/docs/questions/packaging.md @@ -0,0 +1,10 @@ +# Nix Packaging Questions + +1. How to package projects from source repo +- for inclusion in `nixpkgs`? +- for overriding `nixpkgs`? +- for NUR? + +2. How to overlay packages for all systems? + + diff --git a/docs/todo-apps.md b/docs/todo-apps.md new file mode 100644 index 00000000..1f9d00b7 --- /dev/null +++ b/docs/todo-apps.md @@ -0,0 +1,174 @@ +# To-Dos: Apps + +## Apps to Install via Nix + +### Nixpkgs + +- [ ] TODO: Swap w/ flatpak + +```(nix) +home.packages = with pkgs; [ +amberol # Music player +celeste # File synchronization app supporting Google Drive, Dropbox, Nextcloud, OwnCloud, WebDAV. (Future: OneDrive, Amazon S3) +contrast # Check contrast & colorscheme accessibility (WCAG requirements) +emulsion-palette # Store color palettes +eyedropper # Color picker & formatter +obs-studio # Streaming & video recording suite + obs-studio-plugins.obs-3d-effect wlrobs obs-ndi obs-vaapi obs-nvfbc obs-teleport obs-hyperion droidcam-obs obs-vkcapture obs-gstreamer input-overlay multi-rtmp obs-source-clone obs-shaderfilter obs-source-record obs-livesplit-one looking-glass-obs obs-vintage-filter obs-command-source obs-move-transition obs-backgroundremoval advanced-scene-switcher obs-pipewire-audio-capture +paleta # Generate color paletes +pods # Podman desktop application +sticky # Sticky Notes app +]; +``` + +- [ ] TODO: Install nixpkgs package + +```(nix) +home.packages = with pkgs; [ +authenticator +aviator # Merge JSON/YAML files +boatswain # Control Elgato Stream Deck devices +cambalache # Rapid Application Development for GTK4 / GTK3 +cavalier # Audio visualizer +cawbird # Twitter client (deprecated?) +curtail # Compress images +denaro # Personal finance manager +dialect # Translator +dino # Jabber/XMPP client + dynamic-wallpaper # Create dynamic wallpapers for GNOME + eartag # Music tag editor + elastic # Design spring animations + emblem # Generate project icons & avatars from a symbolic icon + endeavour # Personal task manager for GNOME + flare-signal # Unofficial Signal client + formiko # reStructuredText editor & live preview + fragments # Torrent client + gaphor # Simple modeling tool + gnome-builder # IDE for GNOME + gnome-extension-manager # Manage GNOME Shell extensions w/ search & install functionality + gnome-secrets # Password manager for GNOME using KeePass v4 format + gradience # App to theme GNOME, GTK, & various apps according to palettes or wallpapers + halftone # Give images pixel-art style + icon-library # Symbolic icon catalog + identity # Compare multiple versions of an image or video + livecaptions # Provides live captioning + gnomeExtensions.live-captions-assistant # Extension to provide better desktop integration with GNOME + mousai # Identify playing music + pika-backup # Backup application + portfolio-filemanager # Mobile-first file manager + rnote # Handwritten notes + schemes # Create / edit syntax highlighting style-schemes for GtkSourceView + symbolic-preview # Create, preview, export symbolic icons easily + tagger # Music tag editor + tangram # Run web apps in tabbed app-like client + tuba # Fediverse / Mastodon client + video-trimmer # Trim videos + warp # QR code file transfer + wike # Wikipedia client +]; +``` + +- Installed package w/ nixpkgs + +```(nix) +home.packages = with pkgs; [ + blackbox-terminal + bottles #bottles-unwrapped + imaginer # Stable Diffusion models & APIs for generating images from text description +]; + +``` + +## Flatpak-only (not in nixpkgs yet) + +### GTK4 & Libadwaita + +Find Apps Here: [This Week in GNOME](https://thisweek.gnome.org) + +- - Wordle game +- - Telegram Client (Beta-only: 6/6/23) +- - Puzzle game using multiplication +- - Wallabag client for saving articles to read for later +- - Password generator +- - Multi-touch gestures for touchpads & touchscreens via Touchegg +- - Flatpak Sandbox/Permissions manager +- - Git merge +- - Test social media cards locally +- - Client for YouTube, LBRY, & PeerTube +- - Prompt for Large Language Models (LLMs). Supports APIs & local custom models. +- - Find info about an IP address +- - HTTP API testing app +- - PDF Metadata Editor +- - Create desktop launcher files (`.desktop`) +- - Run task after timer +- - Create ASCII art from images +- - Fancy, stylized ASCII text generator +- - Live video wallpaper for Linux desktops +- - Generate color pairings from selected colors according to rules +- - SQL query runner +- - Configure GDM settings +- - Simple media player +- - pkgs.dynamic-wallpaper +- - Life & project planner +- - Color palette manager +- - Tool to view GNOME color palette as defined by the design guidelines +- - New webcam app for GNOME +- - Download Video/Audio from YouTube & more w/ yt-dlp +- - Plot equations on graph +- - 2D CAD application +- - Encrypted folder mounts + +- +- +- - Editor for structured data +- eu.nimmerfort.blackbody - Thermogram viewer + +- +- - Sticky Notes application. Notes stay on desktop +- - ImageMagick photo manipulations w/ filters, transformations +- - Rust music player supporting coloring UI to match cover art, playlists, MPRIS, Discord Rich Presence, Last.fm scrobbling, Mutagen tag import +- - Collection of development utils + +- - Morse code app +- - Game Launcher for Steam, Lutris, Heroic, & more +- - Metronome for keeping tempo +- - Crossword puzzle game & creator +- - New image viewer for GNOME +- - Stop clock for chess +- - Design tool for icons targeting GNOME desktop + +- - Prayer times +- - Playground for HTML, CSS, JS +- - App sandbox to learn & prototype w/ GNOME technologies +- - GUI for tractor, a package to provide a connection thru the onion proxy & sets up proxy in user session. Tor, but without the need to manually configure. TODO: Package for Nix + +- `flatpak remote-add flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo && flatpak install io.github.alainm23.planify` - To-Dos, Tasks, & Time Planner + +- collision +- workbench +- shotcut # nixpkgs version out-of-date + +- +- +- +- +- +- +- +- +- +- +- +- + +- +- +- +- - app.drey.MeetingPoint +- +- +- +- +- + +- diff --git a/docs/todo-cloud.md b/docs/todo-cloud.md new file mode 100644 index 00000000..6989b9ab --- /dev/null +++ b/docs/todo-cloud.md @@ -0,0 +1,32 @@ +# NixOS Configurations To-Dos: + +## Tools + +- `terranix` - Nix config to use Hashicorp Terraform to declaratively provision cloud resources. + +## NixOS Configurations + +### Local Cluster + +- [ ] TODO: Create configurations for Kubernetes nodes +- [ ] TODO: Create configurations for Kubernetes master node(s) + +## Kubernetes + +- [ ] TODO: Configure `terranix` to provision resources on Microsoft Azure + +#### Kubernetes Operators + +- [ ] TODO: Create terranix configurations for Kubernetes operators + - [ ] TODO: OpenLDAP operator + - [ ] TODO: PostgreSQL operator + - [ ] TODO: Keycloak operator + - [ ] TODO: Hashicorp Vault operator + - [ ] TODO: Rook-Ceph operator + +## Microsoft Azure + +- [ ] TODO: Remove iPad Mini from 2-Factor authentication for Microsoft account +- [ ] TODO: Add app `Aegis` on phone as 2-Factor authentication for Microsoft account +- [ ] TODO: Add app `Authenticator` on laptop as 2-Factor authentication for Microsoft account + diff --git a/docs/todo-hive.md b/docs/todo-hive.md new file mode 100644 index 00000000..235bd324 --- /dev/null +++ b/docs/todo-hive.md @@ -0,0 +1,22 @@ +# To-Dos: Hive / std + +- [X] Add inputs +- [X] Create directory `/cells` +- [X] Spread attrs from inputs `std` & `hive` in `outputs = { ... }@inputs` line +- [X] Create flake output attrset passed as 1st arg to `std.growOn` to describe project directory structure + - [X] Add attr `cellsFrom = ./cells;` + - [X] Add attr `cellBlocks = [ ... ];` +- [X] Create flake output attrset passed as 2nd arg to `std.growOn` to describe desired output structure. +- [X] Recursively merge `std.growOn` outputs with outputs of existing config + +- [ ] Convert **NixOS** profiles to `paisano` / `std` / `hive` structure using args: `{ self, inputs, cell }` +- [ ] Convert **home-manager** profiles to `paisano` / `std` / `hive` structure using args: `{ self, inputs, cell }` + +- [ ] Create generic **home-manager** profiles for various employee roles + - [ ] common + - [ ] accounting + - [ ] guest + - [ ] manager + - [ ] shipping + - [ ] sysadmin + - [ ] webdev diff --git a/docs/todo-learn.md b/docs/todo-learn.md new file mode 100644 index 00000000..e0a09558 --- /dev/null +++ b/docs/todo-learn.md @@ -0,0 +1,10 @@ +# To-Dos: Learning + +- [ ] TODO: Learn how to use Hashicorp Terraform + - [ ] TODO: Learn how to use `terranix` to create Terraform resources in Nix + +- [ ] TODO: Learn about Microsoft Azure + - [ ] TODO: Learn how Microsoft Azure Active Directory works + - [ ] TODO: Learn how to provision Microsoft Azure using Terraform + + diff --git a/docs/todo-people.md b/docs/todo-people.md new file mode 100644 index 00000000..badb7f53 --- /dev/null +++ b/docs/todo-people.md @@ -0,0 +1,10 @@ +# To-Dos: People, Communication, & External Resources + +- [ ] TODO: Forward LEFCON ticket requesting admin access for Azure, domain controller, & internal systems + +- [ ] TODO: Get Ethernet recepticle for bottling facility + - [ ] TODO: Learn how to splice Ethernet cables + - [ ] TODO: Splice Ethernet cable & insert into recepticle + - [ ] TODO: Get power strip for bottling facility + - [ ] TODO: Get Ethernet cable for printer in bottling facility + diff --git a/docs/todo-security.md b/docs/todo-security.md new file mode 100644 index 00000000..bdf3c8f2 --- /dev/null +++ b/docs/todo-security.md @@ -0,0 +1,10 @@ +# To-Do: Security Hardening + +- [ ] Enable Full Disk Encryption + - [ ] Configure Plymouth to use graphical disk unlock +- [ ] Enable Secure Boot +- [ ] Follow as many recommendations from `lynis` as possible +- [ ] Write system-wide script that notifies primary user upon SSH login. + `sudo -u USERNAME DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user//bus notify-send` + - [ ] Configure PAM to run this script on remote login + diff --git a/flake.lock b/flake.lock index decaab50..4413dea2 100644 --- a/flake.lock +++ b/flake.lock @@ -1,418 +1,12469 @@ { "nodes": { - "flake-compat": { - "flake": false, + "POP": { + "inputs": { + "flake-compat": [ + "omnibus", + "flops" + ], + "nixlib": [ + "omnibus", + "flops", + "nixlib" + ], + "nixpkgs": [ + "omnibus", + "flops" + ] + }, "locked": { - "lastModified": 1668681692, - "narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "009399224d5e398d03b22badca40a37ac85412a1", + "lastModified": 1655410953, + "narHash": "sha256-Er0zdhu7QwpWvVKfauqZqTnxDz6THTWOTVWLoz+Opmw=", + "owner": "divnix", + "repo": "POP", + "rev": "8babe4c9126298d05ebb5ab04727d741b51c022e", "type": "github" }, "original": { - "owner": "edolstra", - "repo": "flake-compat", + "owner": "divnix", + "repo": "POP", "type": "github" } }, - "flake-utils": { + "agenix": { + "inputs": { + "darwin": "darwin", + "home-manager": "home-manager", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems" + }, "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "lastModified": 1714136352, + "narHash": "sha256-BtWQ2Th/jamO1SlD+2ASSW5Jaf7JhA/JLpQHk0Goqpg=", + "owner": "ryantm", + "repo": "agenix", + "rev": "24a7ea390564ccd5b39b7884f597cfc8d7f6f44e", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "ryantm", + "repo": "agenix", "type": "github" } }, - "home": { + "agenix-shell": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ], - "utils": "utils" + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1680249941, - "narHash": "sha256-7Ylr0NAr8msd3YVaYBw6uyJIRbtOq5l6aLrmrYA5qTw=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "67b97020b6970d39b4126a7870063d11337ecb80", + "lastModified": 1713442813, + "narHash": "sha256-9Oxc+PA/Es/eRn6+dQx/DnyohrmmbvHrPxcfeSuA884=", + "owner": "aciceri", + "repo": "agenix-shell", + "rev": "eee60a60173bc3401e8dcc11469dce488a7e2b0c", "type": "github" }, "original": { - "owner": "nix-community", - "repo": "home-manager", + "owner": "aciceri", + "repo": "agenix-shell", "type": "github" } }, - "icicle": { + "agenix-shell_2": { "inputs": { - "nixpkgs": "nixpkgs", - "utils": "utils_2" + "flake-parts": "flake-parts_10", + "nixpkgs": "nixpkgs_12" }, "locked": { - "lastModified": 1677861349, - "narHash": "sha256-zHpRe5XaAeWvSppGv5xCWP2nE40bAE+DAWVWWYLp/eA=", - "owner": "snowflakelinux", - "repo": "icicle", - "rev": "b974ebe231670523e9abf0f76fcce4ee178a608f", + "lastModified": 1713442813, + "narHash": "sha256-9Oxc+PA/Es/eRn6+dQx/DnyohrmmbvHrPxcfeSuA884=", + "owner": "aciceri", + "repo": "agenix-shell", + "rev": "eee60a60173bc3401e8dcc11469dce488a7e2b0c", "type": "github" }, "original": { - "owner": "snowflakelinux", - "repo": "icicle", + "owner": "aciceri", + "repo": "agenix-shell", "type": "github" } }, - "naersk": { - "inputs": { - "nixpkgs": "nixpkgs_2" - }, + "all-cabal-json": { + "flake": false, "locked": { - "lastModified": 1671096816, - "narHash": "sha256-ezQCsNgmpUHdZANDCILm3RvtO1xH8uujk/+EqNvzIOg=", + "lastModified": 1665552503, + "narHash": "sha256-r14RmRSwzv5c+bWKUDaze6pXM7nOsiz1H8nvFHJvufc=", "owner": "nix-community", - "repo": "naersk", - "rev": "d998160d6a076cfe8f9741e56aeec7e267e3e114", + "repo": "all-cabal-json", + "rev": "d7c0434eebffb305071404edcf9d5cd99703878e", "type": "github" }, "original": { "owner": "nix-community", - "repo": "naersk", + "ref": "hackage", + "repo": "all-cabal-json", "type": "github" } }, - "nix-data": { + "arion": { + "inputs": { + "flake-parts": "flake-parts_2", + "haskell-flake": "haskell-flake", + "hercules-ci-effects": "hercules-ci-effects", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713728172, + "narHash": "sha256-rac5WwUyZGxVqcNh2PIOxXJFGPXBSFPfkox1AdqwVgk=", + "owner": "hercules-ci", + "repo": "arion", + "rev": "add0e67d2b83814667490985ea4ef1226d3b4511", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "arion", + "type": "github" + } + }, + "arkenfox": { "inputs": { "flake-compat": "flake-compat", "flake-utils": "flake-utils", - "naersk": "naersk", - "nixpkgs": "nixpkgs_3" + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit": "pre-commit" }, "locked": { - "lastModified": 1675401998, - "narHash": "sha256-yts2bkp9cn4SuYPYjgTNbOwTtpFxps3TU8zmS/ftN/Q=", - "owner": "snowflakelinux", - "repo": "nix-data", - "rev": "36fb938713742aa0efefa78d34825c148a844990", + "lastModified": 1708283120, + "narHash": "sha256-IgJe5xhssW199zGQq4Q81stGdVDJH7nFHm3yu62I75E=", + "owner": "dwarfmaster", + "repo": "arkenfox-nixos", + "rev": "05e7e0996493f47bbc15228895c4e31ce24616f0", "type": "github" }, "original": { - "owner": "snowflakelinux", - "repo": "nix-data", + "owner": "dwarfmaster", + "repo": "arkenfox-nixos", "type": "github" } }, - "nix-software-center": { + "base16": { "inputs": { - "nixpkgs": "nixpkgs_4", - "utils": "utils_3" + "fromYaml": "fromYaml" }, "locked": { - "lastModified": 1678759647, - "narHash": "sha256-F1WIPB+8u1QIv1FKDlfCxf4trktwnvtywFHdRuQXgZs=", - "owner": "vlinkz", - "repo": "nix-software-center", - "rev": "0ba4ad447567626e66a5729d64e0e5eb751d40c0", + "lastModified": 1708890466, + "narHash": "sha256-LlrC09LoPi8OPYOGPXegD72v+//VapgAqhbOFS3i8sc=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "665b3c6748534eb766c777298721cece9453fdae", "type": "github" }, "original": { - "owner": "vlinkz", - "repo": "nix-software-center", + "owner": "SenchoPens", + "repo": "base16.nix", "type": "github" } }, - "nixos-conf-editor": { - "inputs": { - "nixpkgs": "nixpkgs_5", - "utils": "utils_4" + "base16-fish": { + "flake": false, + "locked": { + "lastModified": 1622559957, + "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", + "owner": "tomyun", + "repo": "base16-fish", + "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", + "type": "github" }, + "original": { + "owner": "tomyun", + "repo": "base16-fish", + "type": "github" + } + }, + "base16-foot": { + "flake": false, "locked": { - "lastModified": 1678759636, - "narHash": "sha256-O9CZ7Nk1K5caVVFszDdLC7d1oSTZq8Q+gU5+vX5uQcU=", - "owner": "vlinkz", - "repo": "nixos-conf-editor", - "rev": "d0507cfbf24bbd6c6a2961c6db67ac4c2ebbdf50", + "lastModified": 1696725948, + "narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=", + "owner": "tinted-theming", + "repo": "base16-foot", + "rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce", "type": "github" }, "original": { - "owner": "vlinkz", - "repo": "nixos-conf-editor", + "owner": "tinted-theming", + "repo": "base16-foot", "type": "github" } }, - "nixos-hardware": { + "base16-helix": { + "flake": false, "locked": { - "lastModified": 1680070330, - "narHash": "sha256-aoT2YZCd9LEtiEULFLIF0ykKydgE72X8gw/k9/pRS5I=", - "owner": "NixOS", - "repo": "nixos-hardware", - "rev": "a6aa8174fa61e55bd7e62d35464d3092aefe0421", + "lastModified": 1696727917, + "narHash": "sha256-FVrbPk+NtMra0jtlC5oxyNchbm8FosmvXIatkRbYy1g=", + "owner": "tinted-theming", + "repo": "base16-helix", + "rev": "dbe1480d99fe80f08df7970e471fac24c05f2ddb", "type": "github" }, "original": { - "owner": "NixOS", - "repo": "nixos-hardware", + "owner": "tinted-theming", + "repo": "base16-helix", "type": "github" } }, - "nixpkgs": { + "base16-kitty": { + "flake": false, "locked": { - "lastModified": 1673226411, - "narHash": "sha256-b6cGb5Ln7Zy80YO66+cbTyGdjZKtkoqB/iIIhDX9gRA=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "aa1d74709f5dac623adb4d48fdfb27cc2c92a4d4", + "lastModified": 1665001328, + "narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=", + "owner": "kdrag0n", + "repo": "base16-kitty", + "rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", + "owner": "kdrag0n", + "repo": "base16-kitty", "type": "github" } }, - "nixpkgs_2": { + "base16-tmux": { + "flake": false, "locked": { - "lastModified": 1671200928, - "narHash": "sha256-mZfzDyzojwj6I0wyooIjGIn81WtGVnx6+avU5Wv+VKU=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "757b82211463dd5ba1475b6851d3731dfe14d377", + "lastModified": 1696725902, + "narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=", + "owner": "tinted-theming", + "repo": "base16-tmux", + "rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7", "type": "github" }, "original": { - "id": "nixpkgs", - "type": "indirect" + "owner": "tinted-theming", + "repo": "base16-tmux", + "type": "github" } }, - "nixpkgs_3": { + "base16-vim": { + "flake": false, "locked": { - "lastModified": 1671200928, - "narHash": "sha256-mZfzDyzojwj6I0wyooIjGIn81WtGVnx6+avU5Wv+VKU=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "757b82211463dd5ba1475b6851d3731dfe14d377", + "lastModified": 1663659192, + "narHash": "sha256-uJvaYYDMXvoo0fhBZUhN8WBXeJ87SRgof6GEK2efFT0=", + "owner": "chriskempson", + "repo": "base16-vim", + "rev": "3be3cd82cd31acfcab9a41bad853d9c68d30478d", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", + "owner": "chriskempson", + "repo": "base16-vim", "type": "github" } }, - "nixpkgs_4": { + "blank": { "locked": { - "lastModified": 1676721149, - "narHash": "sha256-mN2EpTGxxVNnFZLoLWRwh6f7UWhXy4qE+wO2CZyrXps=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "5f4e07deb7c44f27d498f8df9c5f34750acf52d2", + "lastModified": 1625557891, + "narHash": "sha256-O8/MWsPBGhhyPoPLHZAuoZiiHo9q6FLlEeIDEXuj6T4=", + "owner": "divnix", + "repo": "blank", + "rev": "5a5d2684073d9f563072ed07c871d577a6c614a8", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", + "owner": "divnix", + "repo": "blank", "type": "github" } }, - "nixpkgs_5": { + "blank_2": { "locked": { - "lastModified": 1673796341, - "narHash": "sha256-1kZi9OkukpNmOaPY7S5/+SlCDOuYnP3HkXHvNDyLQcc=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "6dccdc458512abce8d19f74195bb20fdb067df50", + "lastModified": 1625557891, + "narHash": "sha256-O8/MWsPBGhhyPoPLHZAuoZiiHo9q6FLlEeIDEXuj6T4=", + "owner": "divnix", + "repo": "blank", + "rev": "5a5d2684073d9f563072ed07c871d577a6c614a8", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", + "owner": "divnix", + "repo": "blank", "type": "github" } }, - "nixpkgs_6": { + "blank_3": { "locked": { - "lastModified": 1680125544, - "narHash": "sha256-mlqo1r+TZUOuypWdrZHluxWL+E5WzXlUXNZ9Y0WLDFU=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "9a6aabc4740790ef3bbb246b86d029ccf6759658", + "lastModified": 1625557891, + "narHash": "sha256-O8/MWsPBGhhyPoPLHZAuoZiiHo9q6FLlEeIDEXuj6T4=", + "owner": "divnix", + "repo": "blank", + "rev": "5a5d2684073d9f563072ed07c871d577a6c614a8", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", + "owner": "divnix", + "repo": "blank", "type": "github" } }, - "nixpkgs_7": { + "blank_4": { "locked": { - "lastModified": 1675673983, - "narHash": "sha256-8hzNh1jtiPxL5r3ICNzSmpSzV7kGb3KwX+FS5BWJUTo=", + "lastModified": 1625557891, + "narHash": "sha256-O8/MWsPBGhhyPoPLHZAuoZiiHo9q6FLlEeIDEXuj6T4=", + "owner": "divnix", + "repo": "blank", + "rev": "5a5d2684073d9f563072ed07c871d577a6c614a8", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "blank", + "type": "github" + } + }, + "cachix": { + "inputs": { + "devenv": "devenv_2", + "flake-compat": [ + "devenv", + "flake-compat" + ], + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "pre-commit-hooks": [ + "devenv", + "pre-commit-hooks" + ] + }, + "locked": { + "lastModified": 1712055811, + "narHash": "sha256-7FcfMm5A/f02yyzuavJe06zLa9hcMHsagE28ADcmQvk=", + "owner": "cachix", + "repo": "cachix", + "rev": "02e38da89851ec7fec3356a5c04bc8349cae0e30", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "cachix", + "type": "github" + } + }, + "cachix_2": { + "locked": { + "lastModified": 1635350005, + "narHash": "sha256-tAMJnUwfaDEB2aa31jGcu7R7bzGELM9noc91L2PbVjg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5a350a8f31bb7ef0c6e79aea3795a890cf7743d4", + "rev": "1c1f5649bb9c1b0d98637c8c365228f57126f361", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-unstable", + "ref": "nixos-20.09", "repo": "nixpkgs", "type": "github" } }, - "nur": { + "call-flake": { "locked": { - "lastModified": 1680262333, - "narHash": "sha256-5/U8eGL+H8qS4XsJHt3pnvMFS2j5p0Uy0F3VEJsnZzU=", - "owner": "nix-community", - "repo": "NUR", - "rev": "98e4e284278bf7160ee47d3e7feef3a45a84fbc0", + "lastModified": 1703380979, + "narHash": "sha256-bmhE1TmrJG4ba93l9WQTLuYM53kwGQAjYHRvHOeuxWU=", + "owner": "divnix", + "repo": "call-flake", + "rev": "29c4dca91e589694b8395ac3cdce259ba6024da3", "type": "github" }, "original": { - "owner": "nix-community", - "repo": "NUR", + "owner": "divnix", + "repo": "call-flake", "type": "github" } }, - "root": { - "inputs": { - "home": "home", - "icicle": "icicle", - "nix-data": "nix-data", - "nix-software-center": "nix-software-center", - "nixos-conf-editor": "nixos-conf-editor", - "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs_6", - "nur": "nur", - "snow": "snow", - "snowflake": "snowflake" + "call-flake_2": { + "locked": { + "lastModified": 1687380775, + "narHash": "sha256-bmhE1TmrJG4ba93l9WQTLuYM53kwGQAjYHRvHOeuxWU=", + "owner": "divnix", + "repo": "call-flake", + "rev": "74061f6c241227cd05e79b702db9a300a2e4131a", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "call-flake", + "type": "github" } }, - "snow": { - "inputs": { - "nixpkgs": "nixpkgs_7", - "utils": "utils_5" + "call-flake_3": { + "locked": { + "lastModified": 1687380775, + "narHash": "sha256-bmhE1TmrJG4ba93l9WQTLuYM53kwGQAjYHRvHOeuxWU=", + "owner": "divnix", + "repo": "call-flake", + "rev": "74061f6c241227cd05e79b702db9a300a2e4131a", + "type": "github" }, + "original": { + "owner": "divnix", + "repo": "call-flake", + "type": "github" + } + }, + "call-flake_4": { "locked": { - "lastModified": 1676244040, - "narHash": "sha256-tOncW45ZOpsWnCc5DzCKrmAWAjKW3Sj5OFlVuWbBxsg=", - "owner": "snowflakelinux", - "repo": "snow", - "rev": "6be11b1dd0ed56af9785b920353e9474a111a732", + "lastModified": 1712452916, + "narHash": "sha256-B9uOqvhDhHnK+kwW/mfI/rAtlXuYlipdOss/L7gBOjs=", + "owner": "divnix", + "repo": "call-flake", + "rev": "9da1222f5227ff549642c159096c3dc9bbc73dcb", "type": "github" }, "original": { - "owner": "snowflakelinux", - "repo": "snow", + "owner": "divnix", + "repo": "call-flake", "type": "github" } }, - "snowflake": { + "call-flake_5": { + "locked": { + "lastModified": 1687380775, + "narHash": "sha256-bmhE1TmrJG4ba93l9WQTLuYM53kwGQAjYHRvHOeuxWU=", + "owner": "divnix", + "repo": "call-flake", + "rev": "74061f6c241227cd05e79b702db9a300a2e4131a", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "call-flake", + "type": "github" + } + }, + "colmena": { "inputs": { + "flake-compat": "flake-compat_3", + "flake-utils": "flake-utils_3", "nixpkgs": [ "nixpkgs" - ] + ], + "stable": "stable" }, "locked": { - "lastModified": 1674669719, - "narHash": "sha256-x3sFlFuWjHynInxXe4OTyes6dRYvmEAmp3viyzfCPQg=", - "owner": "snowflakelinux", - "repo": "snowflake-modules", - "rev": "239baddf62d28711a4900983305d9ba19b7f5c05", + "lastModified": 1711386353, + "narHash": "sha256-gWEpb8Hybnoqb4O4tmpohGZk6+aerAbJpywKcFIiMlg=", + "owner": "zhaofengli", + "repo": "colmena", + "rev": "cd65ef7a25cdc75052fbd04b120aeb066c3881db", "type": "github" }, "original": { - "owner": "snowflakelinux", - "repo": "snowflake-modules", + "owner": "zhaofengli", + "repo": "colmena", "type": "github" } }, - "utils": { + "colmena_2": { "locked": { - "lastModified": 1676283394, - "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", + "lastModified": 1625557891, + "narHash": "sha256-O8/MWsPBGhhyPoPLHZAuoZiiHo9q6FLlEeIDEXuj6T4=", + "owner": "divnix", + "repo": "blank", + "rev": "5a5d2684073d9f563072ed07c871d577a6c614a8", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "divnix", + "repo": "blank", "type": "github" } }, - "utils_2": { + "commonmark-simple": { + "flake": false, "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "lastModified": 1707333942, + "narHash": "sha256-o1am93UXviPVdwwPPL5DcD8M4gwFple8SKw/lVmixa8=", + "owner": "srid", + "repo": "commonmark-simple", + "rev": "0308362957d77eea462c2c99d110820fbf30b4b8", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "srid", + "repo": "commonmark-simple", "type": "github" } }, - "utils_3": { + "commonmark-simple_2": { + "flake": false, "locked": { - "lastModified": 1676283394, - "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", + "lastModified": 1705078713, + "narHash": "sha256-YgDHJG8M47ZXGLWu8o7MhXbIrgQ0Ai32Gr8nKvZGGw8=", + "owner": "srid", + "repo": "commonmark-simple", + "rev": "fc106c94f781f6a35ef66900880edc08cbe3b034", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "srid", + "repo": "commonmark-simple", "type": "github" } }, - "utils_4": { + "commonmark-simple_3": { + "flake": false, "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "lastModified": 1707333942, + "narHash": "sha256-o1am93UXviPVdwwPPL5DcD8M4gwFple8SKw/lVmixa8=", + "owner": "srid", + "repo": "commonmark-simple", + "rev": "0308362957d77eea462c2c99d110820fbf30b4b8", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "srid", + "repo": "commonmark-simple", "type": "github" } }, - "utils_5": { + "commonmark-simple_4": { + "flake": false, "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "lastModified": 1705078713, + "narHash": "sha256-YgDHJG8M47ZXGLWu8o7MhXbIrgQ0Ai32Gr8nKvZGGw8=", + "owner": "srid", + "repo": "commonmark-simple", + "rev": "fc106c94f781f6a35ef66900880edc08cbe3b034", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "srid", + "repo": "commonmark-simple", + "type": "github" + } + }, + "commonmark-wikilink": { + "flake": false, + "locked": { + "lastModified": 1711394028, + "narHash": "sha256-eu5gMmgRz6Y51TBCaB26uJKNN3z1LRfUcTV4+PMy5Gw=", + "owner": "srid", + "repo": "commonmark-wikilink", + "rev": "57dcf665082ffc1b6f35a427e203ed115821b15c", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "commonmark-wikilink", + "type": "github" + } + }, + "commonmark-wikilink_2": { + "flake": false, + "locked": { + "lastModified": 1705502834, + "narHash": "sha256-79fzI4fPhCkfusDXctQwwmjIcWMrLfTvUtKBY32asuM=", + "owner": "srid", + "repo": "commonmark-wikilink", + "rev": "f6d7bdf7f1fce09ba2a4259b0306b0eef24c0cf7", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "commonmark-wikilink", + "type": "github" + } + }, + "commonmark-wikilink_3": { + "flake": false, + "locked": { + "lastModified": 1711394028, + "narHash": "sha256-eu5gMmgRz6Y51TBCaB26uJKNN3z1LRfUcTV4+PMy5Gw=", + "owner": "srid", + "repo": "commonmark-wikilink", + "rev": "57dcf665082ffc1b6f35a427e203ed115821b15c", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "commonmark-wikilink", + "type": "github" + } + }, + "commonmark-wikilink_4": { + "flake": false, + "locked": { + "lastModified": 1705502834, + "narHash": "sha256-79fzI4fPhCkfusDXctQwwmjIcWMrLfTvUtKBY32asuM=", + "owner": "srid", + "repo": "commonmark-wikilink", + "rev": "f6d7bdf7f1fce09ba2a4259b0306b0eef24c0cf7", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "commonmark-wikilink", + "type": "github" + } + }, + "crane": { + "flake": false, + "locked": { + "lastModified": 1681175776, + "narHash": "sha256-7SsUy9114fryHAZ8p1L6G6YSu7jjz55FddEwa2U8XZc=", + "owner": "ipetkov", + "repo": "crane", + "rev": "445a3d222947632b5593112bb817850e8a9cf737", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "ref": "v0.12.1", + "repo": "crane", + "type": "github" + } + }, + "crane_2": { + "flake": false, + "locked": { + "lastModified": 1699217310, + "narHash": "sha256-xpW3VFUG7yE6UE6Wl0dhqencuENSkV7qpnpe9I8VbPw=", + "owner": "ipetkov", + "repo": "crane", + "rev": "d535642bbe6f377077f7c23f0febb78b1463f449", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "ref": "v0.15.0", + "repo": "crane", + "type": "github" + } + }, + "crane_3": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711299236, + "narHash": "sha256-6/JsyozOMKN8LUGqWMopKTSiK8N79T8Q+hcxu2KkTXg=", + "owner": "ipetkov", + "repo": "crane", + "rev": "880573f80d09e18a11713f402b9e6172a085449f", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "crane_4": { + "flake": false, + "locked": { + "lastModified": 1699217310, + "narHash": "sha256-xpW3VFUG7yE6UE6Wl0dhqencuENSkV7qpnpe9I8VbPw=", + "owner": "ipetkov", + "repo": "crane", + "rev": "d535642bbe6f377077f7c23f0febb78b1463f449", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "ref": "v0.15.0", + "repo": "crane", + "type": "github" + } + }, + "crane_5": { + "inputs": { + "nixpkgs": [ + "nix-init", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1707685877, + "narHash": "sha256-XoXRS+5whotelr1rHiZle5t5hDg9kpguS5yk8c8qzOc=", + "owner": "ipetkov", + "repo": "crane", + "rev": "2c653e4478476a52c6aa3ac0495e4dea7449ea0e", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "crane_6": { + "inputs": { + "flake-compat": "flake-compat_30", + "flake-utils": "flake-utils_48", + "nixpkgs": [ + "nixt", + "std", + "paisano-mdbook-preprocessor", + "nixpkgs" + ], + "rust-overlay": "rust-overlay_6" + }, + "locked": { + "lastModified": 1676162383, + "narHash": "sha256-krUCKdz7ebHlFYm/A7IbKDnj2ZmMMm3yIEQcooqm7+E=", + "owner": "ipetkov", + "repo": "crane", + "rev": "6fb400ec631b22ccdbc7090b38207f7fb5cfb5f2", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "crane_7": { + "inputs": { + "flake-compat": [ + "patsh" + ], + "flake-utils": "flake-utils_53", + "nixpkgs": [ + "patsh", + "nixpkgs" + ], + "rust-overlay": [ + "patsh" + ] + }, + "locked": { + "lastModified": 1691803597, + "narHash": "sha256-khWW1Owzselq5o816Lb7x624d6QGnv+kpronK3ndkr4=", + "owner": "ipetkov", + "repo": "crane", + "rev": "7809d369710abb17767b624f9e72b500373580bc", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "crane_8": { + "inputs": { + "nixpkgs": [ + "system-manager", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712513517, + "narHash": "sha256-VuLm5tTMqfS82NZAsNfsW7U+pTZ1+GcOU7gYR/Fb1Z4=", + "owner": "ipetkov", + "repo": "crane", + "rev": "9caad1eb0c69a13ee6467035353b71a76c85ea53", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "crate2nix": { + "flake": false, + "locked": { + "lastModified": 1708135620, + "narHash": "sha256-O8FgwfMR8LgJjIX1RjEmme67sLscMUlmkJLlkb83RyY=", + "owner": "kolloch", + "repo": "crate2nix", + "rev": "7eb26c517fa5b4b2056cc5e2e288e0117306e600", + "type": "github" + }, + "original": { + "owner": "kolloch", + "repo": "crate2nix", + "type": "github" + } + }, + "darwin": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1700795494, + "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", + "type": "github" + }, + "original": { + "owner": "lnl7", + "ref": "master", + "repo": "nix-darwin", + "type": "github" + } + }, + "darwin_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713946171, + "narHash": "sha256-lc75rgRQLdp4Dzogv5cfqOg6qYc5Rp83oedF2t0kDp8=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "230a197063de9287128e2c68a7a4b0cd7d0b50a7", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, + "debnix": { + "inputs": { + "crate2nix": "crate2nix", + "flake-compat": "flake-compat_4", + "flake-utils": "flake-utils_4", + "nixpkgs": "nixpkgs_3", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1713537939, + "narHash": "sha256-IlBZcNafi3iNt/HFx7dCf1B24HF9WXgP7RVyKrWCW40=", + "owner": "ngi-nix", + "repo": "debnix", + "rev": "951c5836415cd51b950127412d2cd0de8893c12e", + "type": "github" + }, + "original": { + "owner": "ngi-nix", + "repo": "debnix", + "type": "github" + } + }, + "declarative-flatpak": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "utils": "utils" + }, + "locked": { + "lastModified": 1707326266, + "narHash": "sha256-vRVih6iltuyLdj305Pj236BfhzFaOkAbHg3r5VsFdxs=", + "owner": "GermanBread", + "repo": "declarative-flatpak", + "rev": "efe7897ddcfbca085fba0690b3094e7f8e8911dd", + "type": "github" + }, + "original": { + "owner": "GermanBread", + "repo": "declarative-flatpak", + "type": "github" + } + }, + "defaultChannel": { + "locked": { + "lastModified": 1713895582, + "narHash": "sha256-cfh1hi+6muQMbi9acOlju3V1gl8BEaZBXBR9jQfQi4U=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "572af610f6151fd41c212f897c71f7056e3fb518", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "devenv": { + "inputs": { + "cachix": "cachix", + "flake-compat": "flake-compat_6", + "nix": "nix_2", + "nixpkgs": "nixpkgs_5", + "pre-commit-hooks": "pre-commit-hooks" + }, + "locked": { + "lastModified": 1713968789, + "narHash": "sha256-Gue8iwW3ZtCQs3EZKhk/i0uLaoUDfW1dpnaZ67MH64o=", + "owner": "cachix", + "repo": "devenv", + "rev": "b26b52a4dac68bdc305f6b9df948c97f49b2c3ee", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "devenv", + "type": "github" + } + }, + "devenv_2": { + "inputs": { + "flake-compat": [ + "devenv", + "cachix", + "flake-compat" + ], + "nix": "nix", + "nixpkgs": "nixpkgs_4", + "poetry2nix": "poetry2nix", + "pre-commit-hooks": [ + "devenv", + "cachix", + "pre-commit-hooks" + ] + }, + "locked": { + "lastModified": 1708704632, + "narHash": "sha256-w+dOIW60FKMaHI1q5714CSibk99JfYxm0CzTinYWr+Q=", + "owner": "cachix", + "repo": "devenv", + "rev": "2ee4450b0f4b95a1b90f2eb5ffea98b90e48c196", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "python-rewrite", + "repo": "devenv", + "type": "github" + } + }, + "devenv_3": { + "inputs": { + "flake-compat": "flake-compat_9", + "nix": "nix_3", + "nixpkgs": "nixpkgs_13", + "pre-commit-hooks": "pre-commit-hooks_2" + }, + "locked": { + "lastModified": 1679065685, + "narHash": "sha256-s2YC66MJpWwq5x7eeWWn/geF6+lRvedgHgo+C26TLbY=", + "owner": "hercules-ci", + "repo": "devenv", + "rev": "616b216a1395adb76698caab3cecacfe17c622bd", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "ref": "flake-module", + "repo": "devenv", + "type": "github" + } + }, + "devshell": { + "inputs": { + "flake-utils": "flake-utils_8", + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1713532798, + "narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=", + "owner": "numtide", + "repo": "devshell", + "rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_10": { + "inputs": { + "flake-utils": "flake-utils_55", + "nixpkgs": [ + "system-manager", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711099426, + "narHash": "sha256-HzpgM/wc3aqpnHJJ2oDqPBkNsqWbW0WfWUO8lKu8nGk=", + "owner": "numtide", + "repo": "devshell", + "rev": "2d45b54ca4a183f2fdcf4b19c895b64fbf620ee8", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_2": { + "inputs": { + "flake-utils": "flake-utils_12", + "nixpkgs": [ + "flake-parts-website", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713532798, + "narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=", + "owner": "numtide", + "repo": "devshell", + "rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_3": { + "flake": false, + "locked": { + "lastModified": 1663445644, + "narHash": "sha256-+xVlcK60x7VY1vRJbNUEAHi17ZuoQxAIH4S4iUFUGBA=", + "owner": "numtide", + "repo": "devshell", + "rev": "e3dc3e21594fe07bdb24bdf1c8657acaa4cb8f66", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_4": { + "inputs": { + "nixpkgs": [ + "hive", + "nixpkgs" + ], + "systems": "systems_19" + }, + "locked": { + "lastModified": 1694435990, + "narHash": "sha256-yLQPD2eZGepu3yvdwABXrR3GhAqWRWTj9rn3a4knYuk=", + "owner": "numtide", + "repo": "devshell", + "rev": "f6aec2e8b1cdddcab10ce7fc2eac66886e3deaad", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_5": { + "inputs": { + "flake-utils": "flake-utils_40", + "nixpkgs": [ + "nixpkgs-android", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711099426, + "narHash": "sha256-HzpgM/wc3aqpnHJJ2oDqPBkNsqWbW0WfWUO8lKu8nGk=", + "owner": "numtide", + "repo": "devshell", + "rev": "2d45b54ca4a183f2fdcf4b19c895b64fbf620ee8", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_6": { + "inputs": { + "flake-utils": "flake-utils_42", + "nixpkgs": "nixpkgs_41" + }, + "locked": { + "lastModified": 1705332421, + "narHash": "sha256-USpGLPme1IuqG78JNqSaRabilwkCyHmVWY0M9vYyqEA=", + "owner": "numtide", + "repo": "devshell", + "rev": "83cb93d6d063ad290beee669f4badf9914cc16ec", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_7": { + "inputs": { + "flake-utils": "flake-utils_44", + "nixpkgs": [ + "nixpkgs-graph-explorer", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1671489820, + "narHash": "sha256-qoei5HDJ8psd1YUPD7DhbHdhLIT9L2nadscp4Qk37uk=", + "owner": "numtide", + "repo": "devshell", + "rev": "5aa3a8039c68b4bf869327446590f4cdf90bb634", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_8": { + "inputs": { + "flake-utils": [ + "nixt", + "std", + "flake-utils" + ], + "nixpkgs": [ + "nixt", + "std", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1682700442, + "narHash": "sha256-qjaAAcCYgp1pBBG7mY9z95ODUBZMtUpf0Qp3Gt/Wha0=", + "owner": "numtide", + "repo": "devshell", + "rev": "fb6673fe9fe4409e3f43ca86968261e970918a83", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_9": { + "inputs": { + "flake-utils": "flake-utils_49", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713532798, + "narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=", + "owner": "numtide", + "repo": "devshell", + "rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "disko": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714103775, + "narHash": "sha256-kcBiIrmqzt3bNTr2GMBfAyA+on8BEKO1iKzzDFQZkjI=", + "owner": "nix-community", + "repo": "disko", + "rev": "285e26465a0bae510897ca04da26ce6307c652b4", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, + "dmerge": { + "inputs": { + "haumea": [ + "flake-parts-website", + "std", + "haumea" + ], + "nixlib": [ + "flake-parts-website", + "std", + "lib" + ], + "yants": [ + "flake-parts-website", + "std", + "yants" + ] + }, + "locked": { + "lastModified": 1686862774, + "narHash": "sha256-ojGtRQ9pIOUrxsQEuEPerUkqIJEuod9hIflfNkY+9CE=", + "owner": "divnix", + "repo": "dmerge", + "rev": "9f7f7a8349d33d7bd02e0f2b484b1f076e503a96", + "type": "github" + }, + "original": { + "owner": "divnix", + "ref": "0.2.1", + "repo": "dmerge", + "type": "github" + } + }, + "dmerge_2": { + "inputs": { + "haumea": [ + "hive", + "std", + "haumea" + ], + "nixlib": [ + "hive", + "std", + "lib" + ], + "yants": [ + "hive", + "std", + "yants" + ] + }, + "locked": { + "lastModified": 1686862774, + "narHash": "sha256-ojGtRQ9pIOUrxsQEuEPerUkqIJEuod9hIflfNkY+9CE=", + "owner": "divnix", + "repo": "dmerge", + "rev": "9f7f7a8349d33d7bd02e0f2b484b1f076e503a96", + "type": "github" + }, + "original": { + "owner": "divnix", + "ref": "0.2.1", + "repo": "dmerge", + "type": "github" + } + }, + "dmerge_3": { + "inputs": { + "haumea": "haumea_5", + "namaka": "namaka_3", + "nixlib": [ + "nixt", + "std", + "nixpkgs" + ], + "yants": [ + "nixt", + "std", + "yants" + ] + }, + "locked": { + "lastModified": 1684178600, + "narHash": "sha256-EtSQcCHRQUBBEj4vbYU0vgPUYiKP261ero5k1QfQ3Bc=", + "owner": "divnix", + "repo": "dmerge", + "rev": "ac9932f26325afac5baa59cf6478432d17762a4e", + "type": "github" + }, + "original": { + "owner": "divnix", + "ref": "0.2.0", + "repo": "dmerge", + "type": "github" + } + }, + "dmerge_4": { + "inputs": { + "haumea": [ + "omnibus", + "flops", + "haumea" + ], + "nixlib": [ + "omnibus", + "flops", + "nixlib" + ], + "yants": [ + "omnibus", + "flops", + "yants" + ] + }, + "locked": { + "lastModified": 1698340621, + "narHash": "sha256-SFrpyBVYaBVu4kaEm6O9O5P+ZKASMEa2EOQSlC33/Ok=", + "owner": "divnix", + "repo": "dmerge", + "rev": "7e528814b0da207ea12ab3f62f2a928b7b8fe9c6", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "dmerge", + "type": "github" + } + }, + "dmerge_5": { + "inputs": { + "haumea": [ + "std", + "haumea" + ], + "nixlib": [ + "std", + "lib" + ], + "yants": [ + "std", + "yants" + ] + }, + "locked": { + "lastModified": 1686862774, + "narHash": "sha256-ojGtRQ9pIOUrxsQEuEPerUkqIJEuod9hIflfNkY+9CE=", + "owner": "divnix", + "repo": "dmerge", + "rev": "9f7f7a8349d33d7bd02e0f2b484b1f076e503a96", + "type": "github" + }, + "original": { + "owner": "divnix", + "ref": "0.2.1", + "repo": "dmerge", + "type": "github" + } + }, + "dns": { + "inputs": { + "flake-utils": "flake-utils_9", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1635273082, + "narHash": "sha256-EHiDP2jEa7Ai5ZwIf5uld9RVFcV77+2SUxjQXwJsJa0=", + "owner": "kirelagin", + "repo": "dns.nix", + "rev": "c7b9645da9c0ddce4f9de4ef27ec01bb8108039a", + "type": "github" + }, + "original": { + "owner": "kirelagin", + "repo": "dns.nix", + "type": "github" + } + }, + "dream2nix": { + "inputs": { + "nixpkgs": [ + "nix-cargo-integration", + "nixpkgs" + ], + "purescript-overlay": "purescript-overlay", + "pyproject-nix": "pyproject-nix" + }, + "locked": { + "lastModified": 1714156336, + "narHash": "sha256-9vk0C+CkPHUzbrrsuqERMwKTodPpUnNFieeoS06ywak=", + "owner": "nix-community", + "repo": "dream2nix", + "rev": "7979674299c631520a5c0fe73551cd3d8580d1b4", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "dream2nix", + "type": "github" + } + }, + "dream2nix_legacy": { + "inputs": { + "all-cabal-json": "all-cabal-json", + "crane": "crane", + "devshell": "devshell_3", + "drv-parts": "drv-parts", + "flake-compat": "flake-compat_10", + "flake-parts": "flake-parts_11", + "flake-utils-pre-commit": "flake-utils-pre-commit", + "ghc-utils": "ghc-utils", + "gomod2nix": "gomod2nix", + "mach-nix": "mach-nix", + "nix-pypi-fetcher": "nix-pypi-fetcher", + "nixpkgs": [ + "flake-parts-website", + "nixpkgs" + ], + "nixpkgsV1": "nixpkgsV1", + "poetry2nix": "poetry2nix_2", + "pre-commit-hooks": [ + "flake-parts-website", + "pre-commit-hooks-nix" + ], + "pruned-racket-catalog": "pruned-racket-catalog" + }, + "locked": { + "lastModified": 1689701105, + "narHash": "sha256-LbqkAkLlKvdh/Xb9FvyKAGJbBRuTXOAq6unco/RifD4=", + "owner": "nix-community", + "repo": "dream2nix", + "rev": "c9c8689f09aa95212e75f3108788862583a1cf5a", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "dream2nix", + "rev": "c9c8689f09aa95212e75f3108788862583a1cf5a", + "type": "github" + } + }, + "drv-parts": { + "inputs": { + "flake-compat": [ + "flake-parts-website", + "dream2nix_legacy", + "flake-compat" + ], + "flake-parts": [ + "flake-parts-website", + "dream2nix_legacy", + "flake-parts" + ], + "nixpkgs": [ + "flake-parts-website", + "dream2nix_legacy", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1680698112, + "narHash": "sha256-FgnobN/DvCjEsc0UAZEAdPLkL4IZi2ZMnu2K2bUaElc=", + "owner": "davhau", + "repo": "drv-parts", + "rev": "e8c2ec1157dc1edb002989669a0dbd935f430201", + "type": "github" + }, + "original": { + "owner": "davhau", + "repo": "drv-parts", + "type": "github" + } + }, + "ema": { + "inputs": { + "emanote": "emanote_2", + "flake-parts": [ + "emanote", + "flake-parts" + ], + "flake-root": [ + "emanote", + "flake-root" + ], + "haskell-flake": [ + "emanote", + "haskell-flake" + ], + "nixpkgs": [ + "emanote", + "nixpkgs" + ], + "treefmt-nix": [ + "emanote", + "treefmt-nix" + ] + }, + "locked": { + "lastModified": 1710101403, + "narHash": "sha256-7n+2ekoXM5ltDoirVyCX3Ob94dm7L8SllI1JMmFmeGA=", + "owner": "srid", + "repo": "ema", + "rev": "51566e4155602b0a243a369b37dc503ebdebabce", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "ema", + "type": "github" + } + }, + "ema_2": { + "inputs": { + "flake-parts": [ + "emanote", + "ema", + "emanote", + "flake-parts" + ], + "flake-root": [ + "emanote", + "ema", + "emanote", + "flake-root" + ], + "haskell-flake": [ + "emanote", + "ema", + "emanote", + "haskell-flake" + ], + "nixpkgs": [ + "emanote", + "ema", + "emanote", + "nixpkgs" + ], + "treefmt-nix": [ + "emanote", + "ema", + "emanote", + "treefmt-nix" + ] + }, + "locked": { + "lastModified": 1707484760, + "narHash": "sha256-2wHRjoFJUpVnH7H/80bnaw8h3WELZqP9dM6DfjXWtAo=", + "owner": "srid", + "repo": "ema", + "rev": "e3539ddd27b72a6bb90c8614ae63c70ff3351936", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "ema", + "type": "github" + } + }, + "ema_3": { + "inputs": { + "emanote": "emanote_4", + "flake-parts": [ + "flake-parts-website", + "emanote", + "flake-parts" + ], + "flake-root": [ + "flake-parts-website", + "emanote", + "flake-root" + ], + "haskell-flake": [ + "flake-parts-website", + "emanote", + "haskell-flake" + ], + "nixpkgs": [ + "flake-parts-website", + "emanote", + "nixpkgs" + ], + "treefmt-nix": [ + "flake-parts-website", + "emanote", + "treefmt-nix" + ] + }, + "locked": { + "lastModified": 1710101403, + "narHash": "sha256-7n+2ekoXM5ltDoirVyCX3Ob94dm7L8SllI1JMmFmeGA=", + "owner": "srid", + "repo": "ema", + "rev": "51566e4155602b0a243a369b37dc503ebdebabce", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "ema", + "type": "github" + } + }, + "ema_4": { + "inputs": { + "flake-parts": [ + "flake-parts-website", + "emanote", + "ema", + "emanote", + "flake-parts" + ], + "flake-root": [ + "flake-parts-website", + "emanote", + "ema", + "emanote", + "flake-root" + ], + "haskell-flake": [ + "flake-parts-website", + "emanote", + "ema", + "emanote", + "haskell-flake" + ], + "nixpkgs": [ + "flake-parts-website", + "emanote", + "ema", + "emanote", + "nixpkgs" + ], + "treefmt-nix": [ + "flake-parts-website", + "emanote", + "ema", + "emanote", + "treefmt-nix" + ] + }, + "locked": { + "lastModified": 1707484760, + "narHash": "sha256-2wHRjoFJUpVnH7H/80bnaw8h3WELZqP9dM6DfjXWtAo=", + "owner": "srid", + "repo": "ema", + "rev": "e3539ddd27b72a6bb90c8614ae63c70ff3351936", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "ema", + "type": "github" + } + }, + "emanote": { + "inputs": { + "commonmark-simple": "commonmark-simple", + "commonmark-wikilink": "commonmark-wikilink", + "ema": "ema", + "emanote-template": "emanote-template_2", + "flake-parts": "flake-parts_5", + "flake-root": "flake-root_2", + "haskell-flake": "haskell-flake_3", + "heist-extra": "heist-extra_2", + "nixpkgs": "nixpkgs_8", + "systems": "systems_11", + "treefmt-nix": "treefmt-nix_2", + "unionmount": "unionmount_2" + }, + "locked": { + "lastModified": 1713060404, + "narHash": "sha256-RrrusG3R2akNLVFBQjqhQhfzbvlRqTuRnsTL1zpHUkE=", + "owner": "srid", + "repo": "emanote", + "rev": "ab5ea3c8ad17946e5ce297d50ea81a952726368e", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "emanote", + "type": "github" + } + }, + "emanote-template": { + "flake": false, + "locked": { + "lastModified": 1703877265, + "narHash": "sha256-2xdikzzHrIHr1s2pAJrBJU8mZP258Na3V4P4RWteDZM=", + "owner": "srid", + "repo": "emanote-template", + "rev": "9d458b63c80162519ae55814e60f17cc9d3f95a3", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "emanote-template", + "type": "github" + } + }, + "emanote-template_2": { + "flake": false, + "locked": { + "lastModified": 1711847690, + "narHash": "sha256-A/5b7vB1+FI2qsuPJL/pZ9CkWozSCbOoaqqN4y+Pmxc=", + "owner": "srid", + "repo": "emanote-template", + "rev": "32330b5e3bdca89ca67f5c212be6db43dbb13cd8", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "emanote-template", + "type": "github" + } + }, + "emanote-template_3": { + "flake": false, + "locked": { + "lastModified": 1703877265, + "narHash": "sha256-2xdikzzHrIHr1s2pAJrBJU8mZP258Na3V4P4RWteDZM=", + "owner": "srid", + "repo": "emanote-template", + "rev": "9d458b63c80162519ae55814e60f17cc9d3f95a3", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "emanote-template", + "type": "github" + } + }, + "emanote-template_4": { + "flake": false, + "locked": { + "lastModified": 1711847690, + "narHash": "sha256-A/5b7vB1+FI2qsuPJL/pZ9CkWozSCbOoaqqN4y+Pmxc=", + "owner": "srid", + "repo": "emanote-template", + "rev": "32330b5e3bdca89ca67f5c212be6db43dbb13cd8", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "emanote-template", + "type": "github" + } + }, + "emanote_2": { + "inputs": { + "commonmark-simple": "commonmark-simple_2", + "commonmark-wikilink": "commonmark-wikilink_2", + "ema": "ema_2", + "emanote-template": "emanote-template", + "flake-parts": "flake-parts_4", + "flake-root": "flake-root", + "haskell-flake": "haskell-flake_2", + "heist-extra": "heist-extra", + "nixpkgs": "nixpkgs_7", + "systems": "systems_10", + "treefmt-nix": "treefmt-nix", + "unionmount": "unionmount" + }, + "locked": { + "lastModified": 1709754457, + "narHash": "sha256-JBpIQsCSaQzLY5LnCO9xj3O7nnv0ekgO1ZTSkevRfi4=", + "owner": "srid", + "repo": "emanote", + "rev": "922f79430416b09e91d735a27b01ddbb48ef7b83", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "emanote", + "type": "github" + } + }, + "emanote_3": { + "inputs": { + "commonmark-simple": "commonmark-simple_3", + "commonmark-wikilink": "commonmark-wikilink_3", + "ema": "ema_3", + "emanote-template": "emanote-template_4", + "flake-parts": "flake-parts_13", + "flake-root": "flake-root_4", + "haskell-flake": "haskell-flake_5", + "heist-extra": "heist-extra_4", + "nixpkgs": [ + "flake-parts-website", + "nixpkgs" + ], + "systems": "systems_15", + "treefmt-nix": "treefmt-nix_6", + "unionmount": "unionmount_4" + }, + "locked": { + "lastModified": 1713060404, + "narHash": "sha256-RrrusG3R2akNLVFBQjqhQhfzbvlRqTuRnsTL1zpHUkE=", + "owner": "srid", + "repo": "emanote", + "rev": "ab5ea3c8ad17946e5ce297d50ea81a952726368e", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "emanote", + "type": "github" + } + }, + "emanote_4": { + "inputs": { + "commonmark-simple": "commonmark-simple_4", + "commonmark-wikilink": "commonmark-wikilink_4", + "ema": "ema_4", + "emanote-template": "emanote-template_3", + "flake-parts": "flake-parts_12", + "flake-root": "flake-root_3", + "haskell-flake": "haskell-flake_4", + "heist-extra": "heist-extra_3", + "nixpkgs": "nixpkgs_14", + "systems": "systems_14", + "treefmt-nix": "treefmt-nix_5", + "unionmount": "unionmount_3" + }, + "locked": { + "lastModified": 1709754457, + "narHash": "sha256-JBpIQsCSaQzLY5LnCO9xj3O7nnv0ekgO1ZTSkevRfi4=", + "owner": "srid", + "repo": "emanote", + "rev": "922f79430416b09e91d735a27b01ddbb48ef7b83", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "emanote", + "type": "github" + } + }, + "envfs": { + "inputs": { + "flake-parts": "flake-parts_6", + "nixpkgs": [ + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix_3" + }, + "locked": { + "lastModified": 1712395886, + "narHash": "sha256-jy9VcKgbysDPZP5NUTVuLB3+jMprKVT7f/+9GUHuCt4=", + "owner": "Mic92", + "repo": "envfs", + "rev": "7cfbba8819911116adf2aeada81532ad9f5c9b46", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "envfs", + "type": "github" + } + }, + "ez-configs": { + "inputs": { + "flake-parts": "flake-parts_7", + "nixpkgs": "nixpkgs_9" + }, + "locked": { + "lastModified": 1706611666, + "narHash": "sha256-N+SyoAEqf3QIXMYZ81kuxrOP6b0692M+hbGLHU9wf1I=", + "owner": "ehllie", + "repo": "ez-configs", + "rev": "84c60a73eba0b5405943580d52b1581de5b1ee7c", + "type": "github" + }, + "original": { + "owner": "ehllie", + "repo": "ez-configs", + "type": "github" + } + }, + "ez-configs_2": { + "inputs": { + "flake-parts": "flake-parts_14", + "nixpkgs": [ + "flake-parts-website", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1706611666, + "narHash": "sha256-N+SyoAEqf3QIXMYZ81kuxrOP6b0692M+hbGLHU9wf1I=", + "owner": "ehllie", + "repo": "ez-configs", + "rev": "84c60a73eba0b5405943580d52b1581de5b1ee7c", + "type": "github" + }, + "original": { + "owner": "ehllie", + "repo": "ez-configs", + "type": "github" + } + }, + "fast-flake-update": { + "inputs": { + "flake-parts": "flake-parts_8", + "nixpkgs": "nixpkgs_10", + "treefmt-nix": "treefmt-nix_4" + }, + "locked": { + "lastModified": 1714006378, + "narHash": "sha256-d523K9++boIzXhpUxon4FsKw7+7rhIs/j53BWAFYCek=", + "owner": "Mic92", + "repo": "fast-flake-update", + "rev": "d61576d033c67150e2be5c15edbbcf04ed756ed6", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "fast-flake-update", + "type": "github" + } + }, + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1714199028, + "narHash": "sha256-QO3Yv3UfJRfhZE1wsHOartg+k8/Kf1BiDyfl8eEpqcE=", + "owner": "nix-community", + "repo": "fenix", + "rev": "055f6db376eaf544d84aa55bd5a7c70634af41ba", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "fenix_2": { + "inputs": { + "nixpkgs": [ + "nix-init", + "nixpkgs" + ], + "rust-analyzer-src": [ + "nix-init" + ] + }, + "locked": { + "lastModified": 1708323807, + "narHash": "sha256-ruXYKlIAuvSIyaV6DsoYFqtcSWIS8x4QbtZ4lZyn5no=", + "owner": "nix-community", + "repo": "fenix", + "rev": "cacd01c5149b8b1f9ec0e667c551f0fbcd6edd0f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "fenix_3": { + "inputs": { + "nixpkgs": [ + "nix-installer", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src_2" + }, + "locked": { + "lastModified": 1711952616, + "narHash": "sha256-WJvDdOph001fA1Ap3AyaQtz/afJAe7meSG5uJAdSE+A=", + "rev": "209048d7c545905c470f6f8c05c5061f391031a8", + "revCount": 1822, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/nix-community/fenix/0.1.1822%2Brev-209048d7c545905c470f6f8c05c5061f391031a8/018e98ba-d842-7dad-9d6a-0d0ee173b6b1/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/nix-community/fenix/0.1.1584.tar.gz" + } + }, + "fenix_4": { + "inputs": { + "nixpkgs": "nixpkgs_47", + "rust-analyzer-src": "rust-analyzer-src_3" + }, + "locked": { + "lastModified": 1677306201, + "narHash": "sha256-VZ9x7qdTosFvVsrpgFHrtYfT6PU3yMIs7NRYn9ELapI=", + "owner": "nix-community", + "repo": "fenix", + "rev": "0923f0c162f65ae40261ec940406049726cfeab4", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "fenix_5": { + "inputs": { + "nixpkgs": [ + "patsh", + "nixpkgs" + ], + "rust-analyzer-src": [ + "patsh" + ] + }, + "locked": { + "lastModified": 1692339618, + "narHash": "sha256-CepAjNMYWC/FFg9r3T8ds6IuehLolJ4rLh2qCgVIfX8=", + "owner": "nix-community", + "repo": "fenix", + "rev": "e2c90c1767cd81da3c6affe8621ced81842d5382", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "flake-check": { + "locked": { + "lastModified": 1683070462, + "narHash": "sha256-FrfgxQaMGIMGGgT1K0jbGEiXqZoIyyUR8jzuJ03Cf00=", + "owner": "srid", + "repo": "check-flake", + "rev": "24ba082179435ce37085c06ffcfcac6d4c570674", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "check-flake", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_10": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_11": { + "flake": false, + "locked": { + "lastModified": 1627913399, + "narHash": "sha256-hY8g6H2KFL8ownSiFeMOjwPC8P0ueXpCVEbxgda3pko=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "12c64ca55c1014cdc1b16ed5a804aa8576601ff2", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_12": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_13": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_14": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_15": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_16": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_17": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_18": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_19": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.0.0.tar.gz" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_20": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_21": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_22": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_23": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_24": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_25": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_26": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_27": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_28": { + "locked": { + "lastModified": 1688025799, + "narHash": "sha256-ktpB4dRtnksm9F5WawoIkEneh1nrEvuxb5lJFt1iOyw=", + "owner": "nix-community", + "repo": "flake-compat", + "rev": "8bf105319d44f6b9f0d764efa4fdef9f1cc9ba1c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_29": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_30": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_31": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_32": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_33": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_34": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_35": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_36": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_4": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_5": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_6": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_7": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_8": { + "locked": { + "lastModified": 1688025799, + "narHash": "sha256-ktpB4dRtnksm9F5WawoIkEneh1nrEvuxb5lJFt1iOyw=", + "owner": "nix-community", + "repo": "flake-compat", + "rev": "8bf105319d44f6b9f0d764efa4fdef9f1cc9ba1c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_9": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-devour": { + "flake": false, + "locked": { + "lastModified": 1709858306, + "narHash": "sha256-Vey9n9hIlWiSAZ6CCTpkrL6jt4r2JvT2ik9wa2bjeC0=", + "owner": "srid", + "repo": "devour-flake", + "rev": "17b711b9deadbbc5629cb7d2b64cf86ae72af3fa", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "devour-flake", + "type": "github" + } + }, + "flake-firefox-nightly": { + "inputs": { + "cachix": "cachix_2", + "flake-compat": "flake-compat_8", + "lib-aggregate": "lib-aggregate", + "mozilla": "mozilla", + "nixpkgs": "nixpkgs_11" + }, + "locked": { + "lastModified": 1714220625, + "narHash": "sha256-QGrHiR7xZ9Gr0dcmEmB8mFUxcPeE464syIVbFZnRMvk=", + "owner": "nix-community", + "repo": "flake-firefox-nightly", + "rev": "a21b5d5134322ed3d1a57a069e264a3da3154888", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "flake-firefox-nightly", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1693611461, + "narHash": "sha256-aPODl8vAgGQ0ZYFIRisxYG5MOGSkIczvu2Cd8Gb9+1Y=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "7f53fdb7bdc5bb237da7fefef12d099e4fd611ca", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts-website": { + "inputs": { + "agenix-shell": "agenix-shell_2", + "devenv": "devenv_3", + "devshell": "devshell_2", + "dream2nix_legacy": "dream2nix_legacy", + "emanote": "emanote_3", + "ez-configs": "ez-configs_2", + "flake-parts": "flake-parts_15", + "haskell-flake": "haskell-flake_6", + "hercules-ci-effects": "hercules-ci-effects_2", + "mission-control": "mission-control", + "nix-cargo-integration": "nix-cargo-integration", + "nixpkgs": "nixpkgs_16", + "ocaml-flake": "ocaml-flake", + "pre-commit-hooks-nix": "pre-commit-hooks-nix", + "proc-flake": "proc-flake", + "process-compose-flake": "process-compose-flake", + "pydev": "pydev", + "std": "std", + "treefmt-nix": "treefmt-nix_7" + }, + "locked": { + "lastModified": 1714207748, + "narHash": "sha256-RIHQfDQjD5CciYb0TPRJ+dLnfSTqIHRKtUo5O6iKXuw=", + "owner": "hercules-ci", + "repo": "flake.parts-website", + "rev": "a29d5114464ca6f0c58f1ed6a3c266fdd3cea97a", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake.parts-website", + "type": "github" + } + }, + "flake-parts_10": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_6" + }, + "locked": { + "lastModified": 1693611461, + "narHash": "sha256-aPODl8vAgGQ0ZYFIRisxYG5MOGSkIczvu2Cd8Gb9+1Y=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "7f53fdb7bdc5bb237da7fefef12d099e4fd611ca", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_11": { + "inputs": { + "nixpkgs-lib": [ + "flake-parts-website", + "dream2nix_legacy", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1675933616, + "narHash": "sha256-/rczJkJHtx16IFxMmAWu5nNYcSXNg1YYXTHoGjLrLUA=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "47478a4a003e745402acf63be7f9a092d51b83d7", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_12": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_7" + }, + "locked": { + "lastModified": 1704982712, + "narHash": "sha256-2Ptt+9h8dczgle2Oo6z5ni5rt/uLMG47UFTR1ry/wgg=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "07f6395285469419cf9d078f59b5b49993198c00", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_13": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_8" + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_14": { + "inputs": { + "nixpkgs-lib": [ + "flake-parts-website", + "ez-configs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1698882062, + "narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8c9fa2545007b49a5db5f650ae91f227672c3877", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_15": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_9" + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_16": { + "inputs": { + "nixpkgs-lib": [ + "flake-parts-website", + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_17": { + "inputs": { + "nixpkgs-lib": [ + "flake-parts-website", + "ocaml-flake", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1701473968, + "narHash": "sha256-YcVE5emp1qQ8ieHUnxt1wCZCC3ZfAS+SRRWZ2TMda7E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "34fed993f1674c8d06d58b37ce1e0fe5eebcb9f5", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_18": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_10" + }, + "locked": { + "lastModified": 1696343447, + "narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_19": { + "inputs": { + "nixpkgs-lib": [ + "harmonia", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "arion", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_20": { + "inputs": { + "nixpkgs-lib": [ + "hercules-ci-agent", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_21": { + "inputs": { + "nixpkgs-lib": [ + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_22": { + "inputs": { + "nixpkgs-lib": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_23": { + "inputs": { + "nixpkgs-lib": [ + "neovim-nightly-overlay", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_24": { + "inputs": { + "nixpkgs-lib": [ + "neovim-nightly-overlay", + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_25": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_11" + }, + "locked": { + "lastModified": 1698882062, + "narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8c9fa2545007b49a5db5f650ae91f227672c3877", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_26": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_12" + }, + "locked": { + "lastModified": 1679737941, + "narHash": "sha256-srSD9CwsVPnUMsIZ7Kt/UegkKUEBcTyU1Rev7mO45S0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "3502ee99d6dade045bdeaf7b0cd8ec703484c25c", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_27": { + "inputs": { + "nixpkgs-lib": [ + "nix-init", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1706830856, + "narHash": "sha256-a0NYyp+h9hlb7ddVz4LUn1vT/PLwqfrWYcHMvFB1xYg=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "b253292d9c0a5ead9bc98c4e9a26c6312e27d69f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_28": { + "inputs": { + "nixpkgs-lib": [ + "nixified-ai", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1698882062, + "narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8c9fa2545007b49a5db5f650ae91f227672c3877", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_29": { + "inputs": { + "nixpkgs-lib": [ + "nixified-ai", + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1696343447, + "narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "arion", + "hercules-ci-effects", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", + "type": "github" + }, + "original": { + "id": "flake-parts", + "type": "indirect" + } + }, + "flake-parts_30": { + "inputs": { + "nixpkgs-lib": [ + "nixpak", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_31": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_13" + }, + "locked": { + "lastModified": 1706830856, + "narHash": "sha256-a0NYyp+h9hlb7ddVz4LUn1vT/PLwqfrWYcHMvFB1xYg=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "b253292d9c0a5ead9bc98c4e9a26c6312e27d69f", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_32": { + "inputs": { + "nixpkgs-lib": [ + "nixpkgs-wayland", + "nix-eval-jobs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_33": { + "inputs": { + "nixpkgs-lib": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_34": { + "inputs": { + "nixpkgs-lib": [ + "patsh", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1690933134, + "narHash": "sha256-ab989mN63fQZBFrkk4Q8bYxQCktuHmBIBqUG1jl6/FQ=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "59cf3f1447cfc75087e7273b04b31e689a8599fb", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1704982712, + "narHash": "sha256-2Ptt+9h8dczgle2Oo6z5ni5rt/uLMG47UFTR1ry/wgg=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "07f6395285469419cf9d078f59b5b49993198c00", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_5": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_3" + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_6": { + "inputs": { + "nixpkgs-lib": [ + "envfs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_7": { + "inputs": { + "nixpkgs-lib": [ + "ez-configs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1698882062, + "narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8c9fa2545007b49a5db5f650ae91f227672c3877", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_8": { + "inputs": { + "nixpkgs-lib": [ + "fast-flake-update", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_9": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_5" + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-root": { + "locked": { + "lastModified": 1692742795, + "narHash": "sha256-f+Y0YhVCIJ06LemO+3Xx00lIcqQxSKJHXT/yk1RTKxw=", + "owner": "srid", + "repo": "flake-root", + "rev": "d9a70d9c7a5fd7f3258ccf48da9335e9b47c3937", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "flake-root", + "type": "github" + } + }, + "flake-root_2": { + "locked": { + "lastModified": 1692742795, + "narHash": "sha256-f+Y0YhVCIJ06LemO+3Xx00lIcqQxSKJHXT/yk1RTKxw=", + "owner": "srid", + "repo": "flake-root", + "rev": "d9a70d9c7a5fd7f3258ccf48da9335e9b47c3937", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "flake-root", + "type": "github" + } + }, + "flake-root_3": { + "locked": { + "lastModified": 1692742795, + "narHash": "sha256-f+Y0YhVCIJ06LemO+3Xx00lIcqQxSKJHXT/yk1RTKxw=", + "owner": "srid", + "repo": "flake-root", + "rev": "d9a70d9c7a5fd7f3258ccf48da9335e9b47c3937", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "flake-root", + "type": "github" + } + }, + "flake-root_4": { + "locked": { + "lastModified": 1692742795, + "narHash": "sha256-f+Y0YhVCIJ06LemO+3Xx00lIcqQxSKJHXT/yk1RTKxw=", + "owner": "srid", + "repo": "flake-root", + "rev": "d9a70d9c7a5fd7f3258ccf48da9335e9b47c3937", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "flake-root", + "type": "github" + } + }, + "flake-root_5": { + "locked": { + "lastModified": 1692742795, + "narHash": "sha256-f+Y0YhVCIJ06LemO+3Xx00lIcqQxSKJHXT/yk1RTKxw=", + "owner": "srid", + "repo": "flake-root", + "rev": "d9a70d9c7a5fd7f3258ccf48da9335e9b47c3937", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "flake-root", + "type": "github" + } + }, + "flake-root_6": { + "locked": { + "lastModified": 1713493429, + "narHash": "sha256-ztz8JQkI08tjKnsTpfLqzWoKFQF4JGu2LRz8bkdnYUk=", + "owner": "srid", + "repo": "flake-root", + "rev": "bc748b93b86ee76e2032eecda33440ceb2532fcd", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "flake-root", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils-plus": { + "inputs": { + "flake-utils": [ + "flake-utils" + ] + }, + "locked": { + "lastModified": 1696331477, + "narHash": "sha256-YkbRa/1wQWdWkVJ01JvV+75KIdM37UErqKgTf0L54Fk=", + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "rev": "bfc53579db89de750b25b0c5e7af299e0c06d7d3", + "type": "github" + }, + "original": { + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "type": "github" + } + }, + "flake-utils-plus_2": { + "inputs": { + "flake-utils": "flake-utils_18" + }, + "locked": { + "lastModified": 1696331477, + "narHash": "sha256-YkbRa/1wQWdWkVJ01JvV+75KIdM37UErqKgTf0L54Fk=", + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "rev": "bfc53579db89de750b25b0c5e7af299e0c06d7d3", + "type": "github" + }, + "original": { + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "type": "github" + } + }, + "flake-utils-plus_3": { + "inputs": { + "flake-utils": "flake-utils_25" + }, + "locked": { + "lastModified": 1696331477, + "narHash": "sha256-YkbRa/1wQWdWkVJ01JvV+75KIdM37UErqKgTf0L54Fk=", + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "rev": "bfc53579db89de750b25b0c5e7af299e0c06d7d3", + "type": "github" + }, + "original": { + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "type": "github" + } + }, + "flake-utils-plus_4": { + "inputs": { + "flake-utils": "flake-utils_39" + }, + "locked": { + "lastModified": 1696331477, + "narHash": "sha256-YkbRa/1wQWdWkVJ01JvV+75KIdM37UErqKgTf0L54Fk=", + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "rev": "bfc53579db89de750b25b0c5e7af299e0c06d7d3", + "type": "github" + }, + "original": { + "owner": "gytis-ivaskevicius", + "repo": "flake-utils-plus", + "type": "github" + } + }, + "flake-utils-pre-commit": { + "locked": { + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_10": { + "inputs": { + "systems": "systems_12" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_11": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_12": { + "inputs": { + "systems": "systems_13" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_13": { + "locked": { + "lastModified": 1638122382, + "narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "74f7e4319258e287b0f9cb95426c9853b282730b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_14": { + "inputs": { + "systems": "systems_16" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_15": { + "inputs": { + "systems": "systems_17" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_16": { + "inputs": { + "systems": "systems_18" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_17": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_18": { + "inputs": { + "systems": "systems_20" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_19": { + "inputs": { + "systems": "systems_22" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_3" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_20": { + "inputs": { + "systems": "systems_23" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_21": { + "inputs": { + "systems": "systems_24" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_22": { + "inputs": { + "systems": "systems_25" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_23": { + "inputs": { + "systems": "systems_26" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_24": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_25": { + "inputs": { + "systems": "systems_27" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_26": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_27": { + "inputs": { + "systems": "systems_29" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_28": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_29": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_30": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_31": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_32": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_33": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_34": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_35": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_36": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_37": { + "locked": { + "lastModified": 1653893745, + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_38": { + "inputs": { + "systems": "systems_30" + }, + "locked": { + "lastModified": 1709126324, + "narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "d465f4819400de7c8d874d50b982301f28a84605", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_39": { + "inputs": { + "systems": "systems_31" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "inputs": { + "systems": "systems_4" + }, + "locked": { + "lastModified": 1709126324, + "narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "d465f4819400de7c8d874d50b982301f28a84605", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_40": { + "inputs": { + "systems": "systems_32" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_41": { + "inputs": { + "systems": "systems_33" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_42": { + "inputs": { + "systems": "systems_34" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_43": { + "inputs": { + "systems": "systems_35" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "path": "/nix/store/qkig73szmrhgp0qhncxy5vb36lw2g3jj-source", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "path" + }, + "original": { + "id": "flake-utils", + "type": "indirect" + } + }, + "flake-utils_44": { + "locked": { + "lastModified": 1642700792, + "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_45": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_46": { + "inputs": { + "systems": "systems_36" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_47": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_48": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_49": { + "inputs": { + "systems": "systems_37" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "inputs": { + "systems": "systems_5" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_50": { + "inputs": { + "systems": "systems_38" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_51": { + "inputs": { + "systems": "systems_39" + }, + "locked": { + "lastModified": 1681202837, + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_52": { + "inputs": { + "systems": "systems_40" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_53": { + "inputs": { + "systems": "systems_41" + }, + "locked": { + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_54": { + "inputs": { + "systems": "systems_42" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_55": { + "inputs": { + "systems": "systems_43" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_6": { + "inputs": { + "systems": "systems_7" + }, + "locked": { + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_7": { + "inputs": { + "systems": "systems_8" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_8": { + "inputs": { + "systems": "systems_9" + }, + "locked": { + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_9": { + "locked": { + "lastModified": 1614513358, + "narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5466c5bbece17adaab2d82fae80b46e807611bf3", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flops": { + "inputs": { + "POP": "POP", + "call-flake": "call-flake_4", + "dmerge": "dmerge_4", + "haumea": "haumea_6", + "nixlib": "nixlib_3", + "yants": "yants_4" + }, + "locked": { + "lastModified": 1713767657, + "narHash": "sha256-4+cA8CQOTVQJEw+26p69pITPvW6/oz+W2dAqG9N0fyk=", + "owner": "gtrunsec", + "repo": "flops", + "rev": "4067970d24c57c0d28971475f3620adab1a758c5", + "type": "github" + }, + "original": { + "owner": "gtrunsec", + "repo": "flops", + "type": "github" + } + }, + "fprint-clear": { + "inputs": { + "nixpkgs": "nixpkgs_19" + }, + "locked": { + "lastModified": 1687631745, + "narHash": "sha256-hNBs6Spnryd96CkR5+tcKOR9ZzfTfWqfpdfDXO+O+7Q=", + "owner": "nixvital", + "repo": "fprint-clear", + "rev": "a4d2f1a3975ba5e6055f0d895f77f30ba44ac1db", + "type": "github" + }, + "original": { + "owner": "nixvital", + "repo": "fprint-clear", + "type": "github" + } + }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1689549921, + "narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "ghc-utils": { + "flake": false, + "locked": { + "lastModified": 1662774800, + "narHash": "sha256-1Rd2eohGUw/s1tfvkepeYpg8kCEXiIot0RijapUjAkE=", + "ref": "refs/heads/master", + "rev": "bb3a2d3dc52ff0253fb9c2812bd7aa2da03e0fea", + "revCount": 1072, + "type": "git", + "url": "https://gitlab.haskell.org/bgamari/ghc-utils" + }, + "original": { + "type": "git", + "url": "https://gitlab.haskell.org/bgamari/ghc-utils" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "arkenfox", + "pre-commit", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1703887061, + "narHash": "sha256-gGPa9qWNc6eCXT/+Z5/zMkyYOuRZqeFZBDbopNZQkuY=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "43e1aa1308018f37118e34d3a9cb4f5e75dc11d5", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_2": { + "inputs": { + "nixpkgs": [ + "devenv", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_3": { + "inputs": { + "nixpkgs": [ + "flake-parts-website", + "devenv", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1660459072, + "narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "a20de23b925fd8264fd7fad6454652e142fd7f73", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_4": { + "inputs": { + "nixpkgs": [ + "flake-parts-website", + "pre-commit-hooks-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_5": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "pre-commit-hooks-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_6": { + "inputs": { + "nixpkgs": [ + "nixvim", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_7": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_8": { + "inputs": { + "nixpkgs": [ + "system-manager", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "globalRegistry": { + "flake": false, + "locked": { + "lastModified": 1705308826, + "narHash": "sha256-Z3xTYZ9EcRIqZAufZbci912MUKB0sD+qxi/KTGMFVwY=", + "owner": "NixOS", + "repo": "flake-registry", + "rev": "9c69f7bd2363e71fe5cd7f608113290c7614dcdd", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "flake-registry", + "type": "github" + } + }, + "gnome-shell": { + "flake": false, + "locked": { + "lastModified": 1698794309, + "narHash": "sha256-/TIkZ8y5Wv3QHLFp79Poao9fINurKs5pa4z0CRe+F8s=", + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "a7c169c6c29cf02a4c392fa0acbbc5f5072823e7", + "type": "github" + }, + "original": { + "owner": "GNOME", + "ref": "45.1", + "repo": "gnome-shell", + "type": "github" + } + }, + "gomod2nix": { + "flake": false, + "locked": { + "lastModified": 1627572165, + "narHash": "sha256-MFpwnkvQpauj799b4QTBJQFEddbD02+Ln5k92QyHOSk=", + "owner": "tweag", + "repo": "gomod2nix", + "rev": "67f22dd738d092c6ba88e420350ada0ed4992ae8", + "type": "github" + }, + "original": { + "owner": "tweag", + "repo": "gomod2nix", + "type": "github" + } + }, + "harmonia": { + "inputs": { + "flake-parts": "flake-parts_19", + "nixpkgs": [ + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix_8" + }, + "locked": { + "lastModified": 1714008214, + "narHash": "sha256-wZMWNHcxbgeHhRjYDXf2Q3v9r/ImUG1DZC5CxyszZ6Q=", + "owner": "nix-community", + "repo": "harmonia", + "rev": "b056f26e89b65a95e274eadf89109b52e89a5fa8", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "harmonia", + "type": "github" + } + }, + "haskell-flake": { + "locked": { + "lastModified": 1675296942, + "narHash": "sha256-u1X1sblozi5qYEcLp1hxcyo8FfDHnRUVX3dJ/tW19jY=", + "owner": "srid", + "repo": "haskell-flake", + "rev": "c2cafce9d57bfca41794dc3b99c593155006c71e", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "0.1.0", + "repo": "haskell-flake", + "type": "github" + } + }, + "haskell-flake_2": { + "locked": { + "lastModified": 1709233214, + "narHash": "sha256-kraFY5MmY7yxsEtSF8qPrFVmA6MXkF+sJfo7EV1dcY8=", + "owner": "srid", + "repo": "haskell-flake", + "rev": "3a8c1b58cff60886260156a20a3b3ad725bbf885", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "haskell-flake", + "type": "github" + } + }, + "haskell-flake_3": { + "locked": { + "lastModified": 1712823089, + "narHash": "sha256-AGkk2WK/E9mLcoEdfegZ1aYNh6HtOdPuEx4O+r44u3I=", + "owner": "srid", + "repo": "haskell-flake", + "rev": "92e393141a123c9695bc15dbe1ca0a1b7fef142b", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "haskell-flake", + "type": "github" + } + }, + "haskell-flake_4": { + "locked": { + "lastModified": 1709233214, + "narHash": "sha256-kraFY5MmY7yxsEtSF8qPrFVmA6MXkF+sJfo7EV1dcY8=", + "owner": "srid", + "repo": "haskell-flake", + "rev": "3a8c1b58cff60886260156a20a3b3ad725bbf885", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "haskell-flake", + "type": "github" + } + }, + "haskell-flake_5": { + "locked": { + "lastModified": 1712823089, + "narHash": "sha256-AGkk2WK/E9mLcoEdfegZ1aYNh6HtOdPuEx4O+r44u3I=", + "owner": "srid", + "repo": "haskell-flake", + "rev": "92e393141a123c9695bc15dbe1ca0a1b7fef142b", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "haskell-flake", + "type": "github" + } + }, + "haskell-flake_6": { + "locked": { + "lastModified": 1714025946, + "narHash": "sha256-R2k/UG5XtyTtmezRs0HZZ9MlvhWXtkyHR+ngEAWrtZI=", + "owner": "srid", + "repo": "haskell-flake", + "rev": "2ee7904390ce78a81d0f66fcc98bf4c32d128d33", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "haskell-flake", + "type": "github" + } + }, + "haskell-flake_7": { + "locked": { + "lastModified": 1684780604, + "narHash": "sha256-2uMZsewmRn7rRtAnnQNw1lj0uZBMh4m6Cs/7dV5YF08=", + "owner": "srid", + "repo": "haskell-flake", + "rev": "74210fa80a49f1b6f67223debdbf1494596ff9f2", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "0.3.0", + "repo": "haskell-flake", + "type": "github" + } + }, + "haumea": { + "inputs": { + "nixpkgs": [ + "flake-parts-website", + "ocaml-flake", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1701883666, + "narHash": "sha256-2GhA3ztnzw5wk35v8/URYl8JPWATh097PNC6J2T3464=", + "owner": "nix-community", + "repo": "haumea", + "rev": "be70ace3588aa0811d6fcf13efb96bbba5a99c39", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "haumea", + "type": "github" + } + }, + "haumea_2": { + "inputs": { + "nixpkgs": [ + "flake-parts-website", + "std", + "lib" + ] + }, + "locked": { + "lastModified": 1685133229, + "narHash": "sha256-FePm/Gi9PBSNwiDFq3N+DWdfxFq0UKsVVTJS3cQPn94=", + "owner": "nix-community", + "repo": "haumea", + "rev": "34dd58385092a23018748b50f9b23de6266dffc2", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "v0.2.2", + "repo": "haumea", + "type": "github" + } + }, + "haumea_3": { + "inputs": { + "nixpkgs": [ + "hive", + "std", + "lib" + ] + }, + "locked": { + "lastModified": 1685133229, + "narHash": "sha256-FePm/Gi9PBSNwiDFq3N+DWdfxFq0UKsVVTJS3cQPn94=", + "owner": "nix-community", + "repo": "haumea", + "rev": "34dd58385092a23018748b50f9b23de6266dffc2", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "v0.2.2", + "repo": "haumea", + "type": "github" + } + }, + "haumea_4": { + "inputs": { + "nixpkgs": [ + "namaka", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1685133229, + "narHash": "sha256-FePm/Gi9PBSNwiDFq3N+DWdfxFq0UKsVVTJS3cQPn94=", + "owner": "nix-community", + "repo": "haumea", + "rev": "34dd58385092a23018748b50f9b23de6266dffc2", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "v0.2.2", + "repo": "haumea", + "type": "github" + } + }, + "haumea_5": { + "inputs": { + "nixpkgs": [ + "nixt", + "std", + "dmerge", + "nixlib" + ] + }, + "locked": { + "lastModified": 1681176209, + "narHash": "sha256-bJLDun6esIyWtwRVXcsgzGbh4UKu8wJDrPgykqPyzmg=", + "owner": "nix-community", + "repo": "haumea", + "rev": "b915b66b27da3a595d77b139e945bb0a2fcac926", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "haumea", + "type": "github" + } + }, + "haumea_6": { + "inputs": { + "nixpkgs": [ + "omnibus", + "flops", + "nixlib" + ] + }, + "locked": { + "lastModified": 1708375098, + "narHash": "sha256-DaFJp3wDHgOqx98U0SF57bXaH2Orp106c+jSdPCVu1E=", + "owner": "nix-community", + "repo": "haumea", + "rev": "ec6350fd9353e7f27ce0e85d31f82e3ed73e4d70", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "haumea", + "type": "github" + } + }, + "haumea_7": { + "inputs": { + "nixpkgs": [ + "std", + "lib" + ] + }, + "locked": { + "lastModified": 1685133229, + "narHash": "sha256-FePm/Gi9PBSNwiDFq3N+DWdfxFq0UKsVVTJS3cQPn94=", + "owner": "nix-community", + "repo": "haumea", + "rev": "34dd58385092a23018748b50f9b23de6266dffc2", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "v0.2.2", + "repo": "haumea", + "type": "github" + } + }, + "heist-extra": { + "flake": false, + "locked": { + "lastModified": 1706086475, + "narHash": "sha256-scXMVFKSaS4Wi4y6I84oPKHaTmLECsvq8eLxGL0XH5o=", + "owner": "srid", + "repo": "heist-extra", + "rev": "c6d8ef79b415fab276fb461d5860bbf2628e6e43", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "heist-extra", + "type": "github" + } + }, + "heist-extra_2": { + "flake": false, + "locked": { + "lastModified": 1710541479, + "narHash": "sha256-9e4U78eutom6D3EJqsCdV8iQxNgYA/pi001r5CZdm0A=", + "owner": "srid", + "repo": "heist-extra", + "rev": "589b7636f620dcdfc0dc07dea720feed1ab3e0fa", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "heist-extra", + "type": "github" + } + }, + "heist-extra_3": { + "flake": false, + "locked": { + "lastModified": 1706086475, + "narHash": "sha256-scXMVFKSaS4Wi4y6I84oPKHaTmLECsvq8eLxGL0XH5o=", + "owner": "srid", + "repo": "heist-extra", + "rev": "c6d8ef79b415fab276fb461d5860bbf2628e6e43", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "heist-extra", + "type": "github" + } + }, + "heist-extra_4": { + "flake": false, + "locked": { + "lastModified": 1710541479, + "narHash": "sha256-9e4U78eutom6D3EJqsCdV8iQxNgYA/pi001r5CZdm0A=", + "owner": "srid", + "repo": "heist-extra", + "rev": "589b7636f620dcdfc0dc07dea720feed1ab3e0fa", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "heist-extra", + "type": "github" + } + }, + "hercules-ci-agent": { + "inputs": { + "flake-parts": "flake-parts_20", + "haskell-flake": "haskell-flake_7", + "nixpkgs": "nixpkgs_20" + }, + "locked": { + "lastModified": 1713898310, + "narHash": "sha256-VKRHJvjnRg47Fffwm3MMf4ceIJgyHgQrpTupBKm7Bb0=", + "owner": "hercules-ci", + "repo": "hercules-ci-agent", + "rev": "2b3bb5f74cba47a7cc18df71474e66de683002ae", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-agent", + "type": "github" + } + }, + "hercules-ci-effects": { + "inputs": { + "flake-parts": "flake-parts_3", + "nixpkgs": [ + "arion", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1710478346, + "narHash": "sha256-Xjf8BdnQG0tLhPMlqQdwCIjOp7Teox0DP3N/jjyiGM4=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "64e7763d72c1e4c1e5e6472640615b6ae2d40fbf", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_2": { + "inputs": { + "flake-parts": "flake-parts_16", + "nixpkgs": "nixpkgs_15" + }, + "locked": { + "lastModified": 1713898448, + "narHash": "sha256-6q6ojsp/Z9P2goqnxyfCSzFOD92T3Uobmj8oVAicUOs=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "c0302ec12d569532a6b6bd218f698bc402e93adc", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_3": { + "inputs": { + "flake-parts": "flake-parts_21", + "nixpkgs": "nixpkgs_21" + }, + "locked": { + "lastModified": 1713898448, + "narHash": "sha256-6q6ojsp/Z9P2goqnxyfCSzFOD92T3Uobmj8oVAicUOs=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "c0302ec12d569532a6b6bd218f698bc402e93adc", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_4": { + "inputs": { + "flake-parts": "flake-parts_24", + "nixpkgs": [ + "neovim-nightly-overlay", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713898448, + "narHash": "sha256-6q6ojsp/Z9P2goqnxyfCSzFOD92T3Uobmj8oVAicUOs=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "c0302ec12d569532a6b6bd218f698bc402e93adc", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_5": { + "inputs": { + "flake-parts": "flake-parts_29", + "nixpkgs": [ + "nixified-ai", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1699381651, + "narHash": "sha256-mZlQ54xJs3j5+SJrLhzePPMXzS+Czbx7gNyOnOAQrHA=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "0bd99f5ab7ec7a74c11238bd02bb29e709c14328", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_6": { + "inputs": { + "flake-parts": [ + "nixpak", + "flake-parts" + ], + "nixpkgs": [ + "nixpak", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713898448, + "narHash": "sha256-6q6ojsp/Z9P2goqnxyfCSzFOD92T3Uobmj8oVAicUOs=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "c0302ec12d569532a6b6bd218f698bc402e93adc", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hive": { + "inputs": { + "colmena": "colmena_2", + "devshell": "devshell_4", + "nixago": "nixago", + "nixpkgs": "nixpkgs_22", + "paisano": [ + "hive", + "std", + "paisano" + ], + "std": "std_2" + }, + "locked": { + "lastModified": 1711370182, + "narHash": "sha256-a8UK0PRMZWTN6Hu8f/ddwdtUyZsq8u/DYmySZUmpDfA=", + "owner": "divnix", + "repo": "hive", + "rev": "658417a0461bbef57ef109eec28b029c212de2a9", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "hive", + "type": "github" + } + }, + "home": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714203603, + "narHash": "sha256-eT7DENhYy7EPLOqHI9zkIMD9RvMCXcqh6gGqOK5BWYQ=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "c1609d584a6b5e9e6a02010f51bd368cb4782f8e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-extra-xhmm": { + "locked": { + "lastModified": 1712416399, + "narHash": "sha256-Gvzs+lXHLVUw9V4LhRSvbYByg4CcLtycFnF0Bv16FBA=", + "owner": "schuelermine", + "repo": "xhmm", + "rev": "df7faec97e4a7d8c67a2b78ed194f9135428e31a", + "type": "github" + }, + "original": { + "owner": "schuelermine", + "repo": "xhmm", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1703113217, + "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713992342, + "narHash": "sha256-bW7K4WPo6jhYMo4ZUGoJfog6xJV0XZh8adXqZKunRoc=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "2f072c127c041eec36621b8e38a531fe0fe07961", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_3": { + "inputs": { + "nixpkgs": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711915616, + "narHash": "sha256-co6LoFA+j6BZEeJNSR8nZ4oOort5qYPskjrDHBaJgmo=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "820be197ccf3adaad9a8856ef255c13b6cc561a6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "icicle": { + "inputs": { + "nixpkgs": "nixpkgs_23", + "snowfall-lib": "snowfall-lib" + }, + "locked": { + "lastModified": 1713135729, + "narHash": "sha256-vMbKOTzPdIr5pnTeiHHEEW3VRIkpukrnWZuY9bi+hd4=", + "owner": "snowflakelinux", + "repo": "icicle", + "rev": "1a10aa84b1566c4e1033f98fcd245f32bdeee7a9", + "type": "github" + }, + "original": { + "owner": "snowflakelinux", + "repo": "icicle", + "type": "github" + } + }, + "impermanence": { + "locked": { + "lastModified": 1708968331, + "narHash": "sha256-VUXLaPusCBvwM3zhGbRIJVeYluh2uWuqtj4WirQ1L9Y=", + "owner": "nix-community", + "repo": "impermanence", + "rev": "a33ef102a02ce77d3e39c25197664b7a636f9c30", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "impermanence", + "type": "github" + } + }, + "import-cargo": { + "locked": { + "lastModified": 1594305518, + "narHash": "sha256-frtArgN42rSaEcEOYWg8sVPMUK+Zgch3c+wejcpX3DY=", + "owner": "edolstra", + "repo": "import-cargo", + "rev": "25d40be4a73d40a2572e0cc233b83253554f06c5", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "import-cargo", + "type": "github" + } + }, + "incl": { + "inputs": { + "nixlib": [ + "flake-parts-website", + "std", + "lib" + ] + }, + "locked": { + "lastModified": 1669263024, + "narHash": "sha256-E/+23NKtxAqYG/0ydYgxlgarKnxmDbg6rCMWnOBqn9Q=", + "owner": "divnix", + "repo": "incl", + "rev": "ce7bebaee048e4cd7ebdb4cee7885e00c4e2abca", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "incl", + "type": "github" + } + }, + "incl_2": { + "inputs": { + "nixlib": [ + "hive", + "std", + "lib" + ] + }, + "locked": { + "lastModified": 1669263024, + "narHash": "sha256-E/+23NKtxAqYG/0ydYgxlgarKnxmDbg6rCMWnOBqn9Q=", + "owner": "divnix", + "repo": "incl", + "rev": "ce7bebaee048e4cd7ebdb4cee7885e00c4e2abca", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "incl", + "type": "github" + } + }, + "incl_3": { + "inputs": { + "nixlib": [ + "nixt", + "std", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1669263024, + "narHash": "sha256-E/+23NKtxAqYG/0ydYgxlgarKnxmDbg6rCMWnOBqn9Q=", + "owner": "divnix", + "repo": "incl", + "rev": "ce7bebaee048e4cd7ebdb4cee7885e00c4e2abca", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "incl", + "type": "github" + } + }, + "incl_4": { + "inputs": { + "nixlib": [ + "std", + "lib" + ] + }, + "locked": { + "lastModified": 1669263024, + "narHash": "sha256-E/+23NKtxAqYG/0ydYgxlgarKnxmDbg6rCMWnOBqn9Q=", + "owner": "divnix", + "repo": "incl", + "rev": "ce7bebaee048e4cd7ebdb4cee7885e00c4e2abca", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "incl", + "type": "github" + } + }, + "invokeai-repo": { + "flake": false, + "locked": { + "lastModified": 1684768600, + "narHash": "sha256-ISkMOEybTyfoEKY5LLToXim1ZeT+A2ljhwLpj0Hfq8I=", + "owner": "invoke-ai", + "repo": "InvokeAI", + "rev": "f3b2e02921927d9317255b1c3811f47bd40a2bf9", + "type": "github" + }, + "original": { + "owner": "invoke-ai", + "ref": "v2.3.5.post2", + "repo": "InvokeAI", + "type": "github" + } + }, + "invokeai-src": { + "flake": false, + "locked": { + "lastModified": 1697424725, + "narHash": "sha256-y3nxZ4PQ/d2wMX1crpJPDMYXf48YBG0sRIBOTgN6XlI=", + "owner": "invoke-ai", + "repo": "InvokeAI", + "rev": "ad786130ffb11f91cbfcc40846114dd1fdcecdf6", + "type": "github" + }, + "original": { + "owner": "invoke-ai", + "ref": "v3.3.0post3", + "repo": "InvokeAI", + "type": "github" + } + }, + "jsonresume-nix": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "nixpkgs": "nixpkgs_24" + }, + "locked": { + "lastModified": 1710762680, + "narHash": "sha256-/gb6LfS3iINRJVQPnKnPEOkJJK4BjAHxCn46ZDtInd8=", + "owner": "TaserudConsulting", + "repo": "jsonresume-nix", + "rev": "5c54c9bc1ff8394963abe2085473752f4a98796d", + "type": "github" + }, + "original": { + "owner": "TaserudConsulting", + "repo": "jsonresume-nix", + "type": "github" + } + }, + "kubenix": { + "inputs": { + "flake-compat": "flake-compat_14", + "nixpkgs": "nixpkgs_25", + "systems": "systems_21", + "treefmt": "treefmt_2" + }, + "locked": { + "lastModified": 1711480255, + "narHash": "sha256-CPF0+ZW3biHoWHE88bZt6a7G65X5Bxtgvw7xwLGrDJ4=", + "owner": "hall", + "repo": "kubenix", + "rev": "5692af23e0835e7b21ec4e2f362b5ef9ff96d893", + "type": "github" + }, + "original": { + "owner": "hall", + "repo": "kubenix", + "type": "github" + } + }, + "lanzaboote": { + "inputs": { + "crane": "crane_3", + "flake-compat": "flake-compat_15", + "flake-parts": "flake-parts_22", + "flake-utils": "flake-utils_19", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks-nix": "pre-commit-hooks-nix_2", + "rust-overlay": "rust-overlay_3" + }, + "locked": { + "lastModified": 1713369831, + "narHash": "sha256-G4OGxvlIIjphpkxcRAkf1QInYsAeqbfNh6Yl1JLy2uM=", + "owner": "nix-community", + "repo": "lanzaboote", + "rev": "850f27322239f8cfa56b122cc9a278ab99a49015", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "lanzaboote", + "type": "github" + } + }, + "lib": { + "locked": { + "lastModified": 1694306727, + "narHash": "sha256-26fkTOJOI65NOTNKFvtcJF9mzzf/kK9swHzfYt1Dl6Q=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "c30b6a84c0b84ec7aecbe74466033facc9ed103f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "lib-aggregate": { + "inputs": { + "flake-utils": "flake-utils_10", + "nixpkgs-lib": "nixpkgs-lib_4" + }, + "locked": { + "lastModified": 1713701427, + "narHash": "sha256-v6z8hz/UDaC/rbnkH+hxGFUxlNyseVntRetVpSxLU6c=", + "owner": "nix-community", + "repo": "lib-aggregate", + "rev": "3b32a98eb3053f8c8ca55497d1881443ef2996e6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "lib-aggregate", + "type": "github" + } + }, + "lib-aggregate_2": { + "inputs": { + "flake-utils": "flake-utils_46", + "nixpkgs-lib": "nixpkgs-lib_14" + }, + "locked": { + "lastModified": 1713701427, + "narHash": "sha256-v6z8hz/UDaC/rbnkH+hxGFUxlNyseVntRetVpSxLU6c=", + "owner": "nix-community", + "repo": "lib-aggregate", + "rev": "3b32a98eb3053f8c8ca55497d1881443ef2996e6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "lib-aggregate", + "type": "github" + } + }, + "lib_2": { + "locked": { + "lastModified": 1694306727, + "narHash": "sha256-26fkTOJOI65NOTNKFvtcJF9mzzf/kK9swHzfYt1Dl6Q=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "c30b6a84c0b84ec7aecbe74466033facc9ed103f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "lib_3": { + "locked": { + "lastModified": 1694306727, + "narHash": "sha256-26fkTOJOI65NOTNKFvtcJF9mzzf/kK9swHzfYt1Dl6Q=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "c30b6a84c0b84ec7aecbe74466033facc9ed103f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "libgit2": { + "flake": false, + "locked": { + "lastModified": 1697646580, + "narHash": "sha256-oX4Z3S9WtJlwvj0uH9HlYcWv+x1hqp8mhXl7HsLu2f0=", + "owner": "libgit2", + "repo": "libgit2", + "rev": "45fd9ed7ae1a9b74b957ef4f337bc3c8b3df01b5", + "type": "github" + }, + "original": { + "owner": "libgit2", + "repo": "libgit2", + "type": "github" + } + }, + "libgit2_2": { + "flake": false, + "locked": { + "lastModified": 1697646580, + "narHash": "sha256-oX4Z3S9WtJlwvj0uH9HlYcWv+x1hqp8mhXl7HsLu2f0=", + "owner": "libgit2", + "repo": "libgit2", + "rev": "45fd9ed7ae1a9b74b957ef4f337bc3c8b3df01b5", + "type": "github" + }, + "original": { + "owner": "libgit2", + "repo": "libgit2", + "type": "github" + } + }, + "lowdown-src": { + "flake": false, + "locked": { + "lastModified": 1633514407, + "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", + "owner": "kristapsdz", + "repo": "lowdown", + "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", + "type": "github" + }, + "original": { + "owner": "kristapsdz", + "repo": "lowdown", + "type": "github" + } + }, + "mach-nix": { + "flake": false, + "locked": { + "lastModified": 1634711045, + "narHash": "sha256-m5A2Ty88NChLyFhXucECj6+AuiMZPHXNbw+9Kcs7F6Y=", + "owner": "DavHau", + "repo": "mach-nix", + "rev": "4433f74a97b94b596fa6cd9b9c0402104aceef5d", + "type": "github" + }, + "original": { + "id": "mach-nix", + "type": "indirect" + } + }, + "microvm": { + "inputs": { + "flake-utils": "flake-utils_20", + "nixpkgs": [ + "nixpkgs" + ], + "spectrum": "spectrum" + }, + "locked": { + "lastModified": 1714072181, + "narHash": "sha256-MOxTGzM8lgq8uo6zAy6e4ZUdzUpF/eSQPBXeH5G5BtE=", + "owner": "astro", + "repo": "microvm.nix", + "rev": "ac28e21ac336dbe01b1f1bcab01fd31db3855e40", + "type": "github" + }, + "original": { + "owner": "astro", + "repo": "microvm.nix", + "type": "github" + } + }, + "mirage-opam-overlays": { + "flake": false, + "locked": { + "lastModified": 1661959605, + "narHash": "sha256-CPTuhYML3F4J58flfp3ZbMNhkRkVFKmBEYBZY5tnQwA=", + "owner": "dune-universe", + "repo": "mirage-opam-overlays", + "rev": "05f1c1823d891ce4d8adab91f5db3ac51d86dc0b", + "type": "github" + }, + "original": { + "owner": "dune-universe", + "repo": "mirage-opam-overlays", + "type": "github" + } + }, + "mission-control": { + "locked": { + "lastModified": 1713251031, + "narHash": "sha256-gqp9YGqg5cc5fGmc+qM7YGEg8UANGJbwj+nnGk5K1/o=", + "owner": "Platonic-Systems", + "repo": "mission-control", + "rev": "beb45a1d7fbd9c56233763ba568a09f1c5a9262d", + "type": "github" + }, + "original": { + "owner": "Platonic-Systems", + "repo": "mission-control", + "type": "github" + } + }, + "mk-naked-shell": { + "flake": false, + "locked": { + "lastModified": 1681286841, + "narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=", + "owner": "yusdacra", + "repo": "mk-naked-shell", + "rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd", + "type": "github" + }, + "original": { + "owner": "yusdacra", + "repo": "mk-naked-shell", + "type": "github" + } + }, + "mk-naked-shell_2": { + "flake": false, + "locked": { + "lastModified": 1681286841, + "narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=", + "owner": "yusdacra", + "repo": "mk-naked-shell", + "rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd", + "type": "github" + }, + "original": { + "owner": "yusdacra", + "repo": "mk-naked-shell", + "type": "github" + } + }, + "mobile-nixos": { + "flake": false, + "locked": { + "lastModified": 1707922137, + "narHash": "sha256-6QideIrlQMAkdPBRj7QaKJT4uJRsiS05/nP529rdtRM=", + "owner": "lehmanator", + "repo": "mobile-nixos", + "rev": "a2c3bc2cb7c652b013bb11cd936afc554a27a443", + "type": "github" + }, + "original": { + "owner": "lehmanator", + "ref": "update-firmware", + "repo": "mobile-nixos", + "type": "github" + } + }, + "mozilla": { + "flake": false, + "locked": { + "lastModified": 1704373101, + "narHash": "sha256-+gi59LRWRQmwROrmE1E2b3mtocwueCQqZ60CwLG+gbg=", + "owner": "mozilla", + "repo": "nixpkgs-mozilla", + "rev": "9b11a87c0cc54e308fa83aac5b4ee1816d5418a2", + "type": "github" + }, + "original": { + "owner": "mozilla", + "repo": "nixpkgs-mozilla", + "type": "github" + } + }, + "multifirefox": { + "inputs": { + "nixpkgs": "nixpkgs_26" + }, + "locked": { + "lastModified": 1710772530, + "narHash": "sha256-1cBvGdwH7ZQ48K9jdER0dZAEhs1zB+7TokuXD5/UxzY=", + "ref": "refs/heads/main", + "rev": "2b26676b23a4f9c0b6de4a787c1828432437c549", + "revCount": 39, + "type": "git", + "url": "https://codeberg.org/wolfangaukang/multifirefox" + }, + "original": { + "type": "git", + "url": "https://codeberg.org/wolfangaukang/multifirefox" + } + }, + "n2c": { + "inputs": { + "flake-utils": [ + "nixt", + "std", + "flake-utils" + ], + "nixpkgs": [ + "nixt", + "std", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1677330646, + "narHash": "sha256-hUYCwJneMjnxTvj30Fjow6UMJUITqHlpUGpXMPXUJsU=", + "owner": "nlewo", + "repo": "nix2container", + "rev": "ebca8f58d450cae1a19c07701a5a8ae40afc9efc", + "type": "github" + }, + "original": { + "owner": "nlewo", + "repo": "nix2container", + "type": "github" + } + }, + "naersk": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713520724, + "narHash": "sha256-CO8MmVDmqZX2FovL75pu5BvwhW+Vugc7Q6ze7Hj8heI=", + "owner": "nix-community", + "repo": "naersk", + "rev": "c5037590290c6c7dae2e42e7da1e247e54ed2d49", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "naersk", + "type": "github" + } + }, + "naersk_2": { + "inputs": { + "nixpkgs": [ + "nix-installer", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1698420672, + "narHash": "sha256-/TdeHMPRjjdJub7p7+w55vyABrsJlt5QkznPYy55vKA=", + "owner": "nix-community", + "repo": "naersk", + "rev": "aeb58d5e8faead8980a807c840232697982d47b9", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "naersk", + "type": "github" + } + }, + "namaka": { + "inputs": { + "haumea": [ + "flake-parts-website", + "ocaml-flake", + "haumea" + ], + "nixpkgs": [ + "flake-parts-website", + "ocaml-flake", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1701199450, + "narHash": "sha256-HHDuESS51KDa1QogMYudV2Dfo9xZuXv9Uxj0XlmiARY=", + "owner": "nix-community", + "repo": "namaka", + "rev": "c84c9646dff3c25465a4d250254216f71a377f66", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "namaka", + "type": "github" + } + }, + "namaka_2": { + "inputs": { + "haumea": "haumea_4", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708539134, + "narHash": "sha256-F4QtnwbcbRY146ZC0E1NHkJhNOn98pIBLSrPsrg8Mgk=", + "owner": "nix-community", + "repo": "namaka", + "rev": "7d9535cac71b773dc0bdac7d6369b6836d1be7aa", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "namaka", + "type": "github" + } + }, + "namaka_3": { + "inputs": { + "haumea": [ + "nixt", + "std", + "dmerge", + "haumea" + ], + "nixpkgs": [ + "nixt", + "std", + "dmerge", + "nixlib" + ] + }, + "locked": { + "lastModified": 1683059428, + "narHash": "sha256-ZTMqleCWmuNWhZE375gtF1j1JRkaKEUFN1AM43e7h4Y=", + "owner": "nix-community", + "repo": "namaka", + "rev": "2deba2f416454aec770bc1cc7365e39c73e6b1d7", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "v0.1.1", + "repo": "namaka", + "type": "github" + } + }, + "napalm": { + "inputs": { + "flake-utils": "flake-utils_21", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1703102458, + "narHash": "sha256-3pOV731qi34Q2G8e2SqjUXqnftuFrbcq+NdagEZXISo=", + "owner": "nix-community", + "repo": "napalm", + "rev": "edcb26c266ca37c9521f6a97f33234633cbec186", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "napalm", + "type": "github" + } + }, + "neovim-flake": { + "inputs": { + "flake-utils": "flake-utils_22", + "nixpkgs": [ + "neovim-nightly-overlay", + "nixpkgs" + ] + }, + "locked": { + "dir": "contrib", + "lastModified": 1714170745, + "narHash": "sha256-gWPADWNO+tOuwSAcOu3loOUul7ctHM0JG4QjDuU8AJo=", + "owner": "neovim", + "repo": "neovim", + "rev": "435dee74bb3593b778328138dac054f26e2d7396", + "type": "github" + }, + "original": { + "dir": "contrib", + "owner": "neovim", + "repo": "neovim", + "type": "github" + } + }, + "neovim-nightly-overlay": { + "inputs": { + "flake-compat": "flake-compat_16", + "flake-parts": "flake-parts_23", + "hercules-ci-effects": "hercules-ci-effects_4", + "neovim-flake": "neovim-flake", + "nixpkgs": "nixpkgs_27" + }, + "locked": { + "lastModified": 1714176336, + "narHash": "sha256-D0YFMkMc/eb8zfyPSN75gGVe19S6JqGnYwzASMNuaQE=", + "owner": "nix-community", + "repo": "neovim-nightly-overlay", + "rev": "7326db488a5138a6cdc1d5083a8e6218df4a0dd4", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "neovim-nightly-overlay", + "type": "github" + } + }, + "nix": { + "inputs": { + "flake-compat": "flake-compat_5", + "nixpkgs": [ + "devenv", + "cachix", + "devenv", + "nixpkgs" + ], + "nixpkgs-regression": "nixpkgs-regression" + }, + "locked": { + "lastModified": 1712911606, + "narHash": "sha256-BGvBhepCufsjcUkXnEEXhEVjwdJAwPglCC2+bInc794=", + "owner": "domenkozar", + "repo": "nix", + "rev": "b24a9318ea3f3600c1e24b4a00691ee912d4de12", + "type": "github" + }, + "original": { + "owner": "domenkozar", + "ref": "devenv-2.21", + "repo": "nix", + "type": "github" + } + }, + "nix-alien": { + "inputs": { + "flake-compat": "flake-compat_17", + "flake-utils": "flake-utils_23", + "nix-filter": "nix-filter", + "nix-index-database": "nix-index-database", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713164845, + "narHash": "sha256-6X0H56qGmN/LoEdcBcwm3+apHLEe7r4caO719q1/KMI=", + "owner": "thiagokokada", + "repo": "nix-alien", + "rev": "db5d6107d3c72d5eb0b7a02a30b87b1f0076fcc5", + "type": "github" + }, + "original": { + "owner": "thiagokokada", + "repo": "nix-alien", + "type": "github" + } + }, + "nix-auto-changelog": { + "inputs": { + "flake-utils": "flake-utils_24", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1693891039, + "narHash": "sha256-9OcJhlwiEVvio1hrD7F95PbtPoS8D2GYoEkWX1uWCHE=", + "owner": "loophp", + "repo": "nix-auto-changelog", + "rev": "1422bcf093d4650ba01654ddc4cb603d5cfb7de4", + "type": "github" + }, + "original": { + "owner": "loophp", + "repo": "nix-auto-changelog", + "type": "github" + } + }, + "nix-cargo-integration": { + "inputs": { + "crane": "crane_2", + "dream2nix": [ + "flake-parts-website", + "dream2nix_legacy" + ], + "mk-naked-shell": "mk-naked-shell", + "nixpkgs": [ + "flake-parts-website", + "nixpkgs" + ], + "parts": "parts", + "rust-overlay": "rust-overlay_2", + "treefmt": "treefmt" + }, + "locked": { + "lastModified": 1714198335, + "narHash": "sha256-5Xl7tJjG1GBTT8evOXehNAIZoZ8W5EtLlqiYjMPNUlI=", + "owner": "yusdacra", + "repo": "nix-cargo-integration", + "rev": "370d0ff9f97edb363f08af17dadaed3928ee1942", + "type": "github" + }, + "original": { + "owner": "yusdacra", + "repo": "nix-cargo-integration", + "type": "github" + } + }, + "nix-cargo-integration_2": { + "inputs": { + "crane": "crane_4", + "dream2nix": "dream2nix", + "mk-naked-shell": "mk-naked-shell_2", + "nixpkgs": "nixpkgs_29", + "parts": "parts_2", + "rust-overlay": "rust-overlay_4", + "treefmt": "treefmt_3" + }, + "locked": { + "lastModified": 1714198335, + "narHash": "sha256-5Xl7tJjG1GBTT8evOXehNAIZoZ8W5EtLlqiYjMPNUlI=", + "owner": "yusdacra", + "repo": "nix-cargo-integration", + "rev": "370d0ff9f97edb363f08af17dadaed3928ee1942", + "type": "github" + }, + "original": { + "owner": "yusdacra", + "repo": "nix-cargo-integration", + "type": "github" + } + }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713946171, + "narHash": "sha256-lc75rgRQLdp4Dzogv5cfqOg6qYc5Rp83oedF2t0kDp8=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "230a197063de9287128e2c68a7a4b0cd7d0b50a7", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, + "nix-data": { + "inputs": { + "nixpkgs": "nixpkgs_30", + "snowfall-lib": "snowfall-lib_2" + }, + "locked": { + "lastModified": 1698676531, + "narHash": "sha256-kLcAtvZPa1VKHmMJR3xiX94lkkmfUFvzn/pnw6r5w4I=", + "owner": "snowflakelinux", + "repo": "nix-data", + "rev": "c69c03a0ce67b59c99559c5b14a123cb0122509d", + "type": "github" + }, + "original": { + "owner": "snowflakelinux", + "repo": "nix-data", + "type": "github" + } + }, + "nix-eval-jobs": { + "inputs": { + "flake-parts": "flake-parts_32", + "nix-github-actions": "nix-github-actions_4", + "nixpkgs": "nixpkgs_45", + "treefmt-nix": "treefmt-nix_10" + }, + "locked": { + "lastModified": 1713858845, + "narHash": "sha256-StJq7Zy+/iVBUAKFzhHWlsirFucZ3gNtzXhAYXAsNnw=", + "owner": "nix-community", + "repo": "nix-eval-jobs", + "rev": "7b6640f2a10701bf0db16aff048070f400e8ea7c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-eval-jobs", + "type": "github" + } + }, + "nix-fast-build": { + "inputs": { + "flake-parts": "flake-parts_25", + "nixpkgs": [ + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix_9" + }, + "locked": { + "lastModified": 1713864757, + "narHash": "sha256-eBh+4DLKktrMWh0QfSFwugd4Gf2KO/X0VUTlRspR+9I=", + "owner": "Mic92", + "repo": "nix-fast-build", + "rev": "f024a66e6a1f83de95aba109287a97dd6ca76127", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "nix-fast-build", + "type": "github" + } + }, + "nix-filter": { + "locked": { + "lastModified": 1710156097, + "narHash": "sha256-1Wvk8UP7PXdf8bCCaEoMnOT1qe5/Duqgj+rL8sRQsSM=", + "owner": "numtide", + "repo": "nix-filter", + "rev": "3342559a24e85fc164b295c3444e8a139924675b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nix-filter", + "type": "github" + } + }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "devenv", + "cachix", + "devenv", + "poetry2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1688870561, + "narHash": "sha256-4UYkifnPEw1nAzqqPOTL2MvWtm3sNGw1UTYTalkTcGY=", + "owner": "nix-community", + "repo": "nix-github-actions", + "rev": "165b1650b753316aa7f1787f3005a8d2da0f5301", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nix-github-actions_2": { + "inputs": { + "nixpkgs": [ + "flake-parts-website", + "pydev", + "poetry2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1693660503, + "narHash": "sha256-B/g2V4v6gjirFmy+I5mwB2bCYc0l3j5scVfwgl6WOl8=", + "owner": "nix-community", + "repo": "nix-github-actions", + "rev": "bd5bdbb52350e145c526108f4ef192eb8e554fa0", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nix-github-actions_3": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1703863825, + "narHash": "sha256-rXwqjtwiGKJheXB43ybM8NwWB8rO2dSRrEqes0S7F5Y=", + "owner": "nix-community", + "repo": "nix-github-actions", + "rev": "5163432afc817cf8bd1f031418d1869e4c9d5547", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nix-github-actions_4": { + "inputs": { + "nixpkgs": [ + "nixpkgs-wayland", + "nix-eval-jobs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1703863825, + "narHash": "sha256-rXwqjtwiGKJheXB43ybM8NwWB8rO2dSRrEqes0S7F5Y=", + "owner": "nix-community", + "repo": "nix-github-actions", + "rev": "5163432afc817cf8bd1f031418d1869e4c9d5547", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nix-health": { + "inputs": { + "flake-parts": "flake-parts_26", + "nixpkgs": "nixpkgs_31", + "nuenv": "nuenv" + }, + "locked": { + "lastModified": 1712216312, + "narHash": "sha256-d1oT96kZPlI8Wd8MqLY7286PZRoY58pqMizL7y/lGQA=", + "owner": "srid", + "repo": "nix-health", + "rev": "c7ef3ad18a062ee90b45c0d89571439e8a8c72f9", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "nix-health", + "type": "github" + } + }, + "nix-helm": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709809115, + "narHash": "sha256-FxIbnsza2ExPCPFtRJkvI7/JGaWPlXUVP934+1NyoKA=", + "owner": "gytis-ivaskevicius", + "repo": "nix-helm", + "rev": "60c8d9c4a0d90282ee1135a8993d864b488aac2e", + "type": "github" + }, + "original": { + "owner": "gytis-ivaskevicius", + "repo": "nix-helm", + "type": "github" + } + }, + "nix-index": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713869268, + "narHash": "sha256-o3CMQeu/S8/4zU0pMtYg51rd1FWdJsI2Xohzng1Ysdg=", + "owner": "nix-community", + "repo": "nix-index-database", + "rev": "dcb6ac44922858ce3a5b46f77a36d6030181460c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-index-database", + "type": "github" + } + }, + "nix-index-database": { + "inputs": { + "nixpkgs": "nixpkgs_28" + }, + "locked": { + "lastModified": 1713067146, + "narHash": "sha256-9D20xjblGKEVRVCnM3qWhiizEa9i6OpK6xQJajwcwOQ=", + "owner": "nix-community", + "repo": "nix-index-database", + "rev": "93aed67288be60c9ef6133ba2f8de128f4ef265c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-index-database", + "type": "github" + } + }, + "nix-init": { + "inputs": { + "crane": "crane_5", + "fenix": "fenix_2", + "flake-parts": "flake-parts_27", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708369935, + "narHash": "sha256-QEuXETPKgYnfDraOnZGYoOHx+6hArMxW4asjgRkXhJo=", + "owner": "nix-community", + "repo": "nix-init", + "rev": "c6e51b1a546fa993a9806f72e47c1a8682f49b9f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-init", + "type": "github" + } + }, + "nix-installer": { + "inputs": { + "fenix": "fenix_3", + "flake-compat": "flake-compat_19", + "naersk": "naersk_2", + "nix": "nix_4", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713972779, + "narHash": "sha256-B7hG/PnHb4qaPTjkE/oiDEAV0NhrctzD5MqKlYlZj8c=", + "owner": "DeterminateSystems", + "repo": "nix-installer", + "rev": "1b6195b5262a90c5ba2734d96a9b4fd9e52605f4", + "type": "github" + }, + "original": { + "owner": "DeterminateSystems", + "repo": "nix-installer", + "type": "github" + } + }, + "nix-melt": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708375128, + "narHash": "sha256-GIASK5tYXM2TQIYwg5Kb+Kl+myZU6Mv9JT4u+gZbr30=", + "owner": "nix-community", + "repo": "nix-melt", + "rev": "46d1c35ec006da573143c78b404a5e2bd834d997", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-melt", + "type": "github" + } + }, + "nix-portable": { + "inputs": { + "defaultChannel": "defaultChannel", + "nix": "nix_5", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714018749, + "narHash": "sha256-Z7U2YUr6r5VpPelV/7a28mxydWTKdKZyT/CEVLhgYb4=", + "owner": "DavHau", + "repo": "nix-portable", + "rev": "a478ce5aee9438d1b4dbefdce34c2a9f78526829", + "type": "github" + }, + "original": { + "owner": "DavHau", + "repo": "nix-portable", + "type": "github" + } + }, + "nix-pypi-fetcher": { + "flake": false, + "locked": { + "lastModified": 1669065297, + "narHash": "sha256-UStjXjNIuIm7SzMOWvuYWIHBkPUKQ8Id63BMJjnIDoA=", + "owner": "DavHau", + "repo": "nix-pypi-fetcher", + "rev": "a9885ac6a091576b5195d547ac743d45a2a615ac", + "type": "github" + }, + "original": { + "owner": "DavHau", + "repo": "nix-pypi-fetcher", + "type": "github" + } + }, + "nix-software-center": { + "inputs": { + "nixpkgs": "nixpkgs_35", + "utils": "utils_2" + }, + "locked": { + "lastModified": 1703105285, + "narHash": "sha256-BHoW1RQMc2Auz8paBvTBriKv0F6FI99+3nnz/ELLawg=", + "owner": "vlinkz", + "repo": "nix-software-center", + "rev": "68e87fb6e24fb3e6fe65449918d0cbda96622b65", + "type": "github" + }, + "original": { + "owner": "vlinkz", + "repo": "nix-software-center", + "type": "github" + } + }, + "nix-stable-diffusion": { + "inputs": { + "invokeai-repo": "invokeai-repo", + "nixlib": "nixlib", + "nixpkgs": [ + "nixpkgs" + ], + "stable-diffusion-repo": "stable-diffusion-repo", + "webui-repo": "webui-repo" + }, + "locked": { + "lastModified": 1697622534, + "narHash": "sha256-6AmhqFysLz3JTE6ABCQ2wZV6EvQqyN+ewyAZaiHWYWw=", + "owner": "gbtb", + "repo": "nix-stable-diffusion", + "rev": "d11bf4aa445684c1d9825da902a1804953953cc0", + "type": "github" + }, + "original": { + "owner": "gbtb", + "repo": "nix-stable-diffusion", + "type": "github" + } + }, + "nix-vscode-extensions": { + "inputs": { + "flake-compat": "flake-compat_22", + "flake-utils": "flake-utils_27", + "nixpkgs": "nixpkgs_36" + }, + "locked": { + "lastModified": 1714180799, + "narHash": "sha256-CHQvevyBlMmtClaV65Kr2mHEbO6ey0mZ4sbNjfIH8xM=", + "owner": "nix-community", + "repo": "nix-vscode-extensions", + "rev": "2f739c78819f9e1e3ecbe80233a1f1c19a6b8f44", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-vscode-extensions", + "type": "github" + } + }, + "nixGL": { + "inputs": { + "flake-utils": "flake-utils_28", + "nixpkgs": "nixpkgs_37" + }, + "locked": { + "lastModified": 1713543440, + "narHash": "sha256-lnzZQYG0+EXl/6NkGpyIz+FEOc/DSEG57AP1VsdeNrM=", + "owner": "guibou", + "repo": "nixGL", + "rev": "310f8e49a149e4c9ea52f1adf70cdc768ec53f8a", + "type": "github" + }, + "original": { + "owner": "guibou", + "repo": "nixGL", + "type": "github" + } + }, + "nix_2": { + "inputs": { + "flake-compat": [ + "devenv", + "flake-compat" + ], + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "nixpkgs-regression": "nixpkgs-regression_2" + }, + "locked": { + "lastModified": 1712911606, + "narHash": "sha256-BGvBhepCufsjcUkXnEEXhEVjwdJAwPglCC2+bInc794=", + "owner": "domenkozar", + "repo": "nix", + "rev": "b24a9318ea3f3600c1e24b4a00691ee912d4de12", + "type": "github" + }, + "original": { + "owner": "domenkozar", + "ref": "devenv-2.21", + "repo": "nix", + "type": "github" + } + }, + "nix_3": { + "inputs": { + "lowdown-src": "lowdown-src", + "nixpkgs": [ + "flake-parts-website", + "devenv", + "nixpkgs" + ], + "nixpkgs-regression": "nixpkgs-regression_3" + }, + "locked": { + "lastModified": 1676545802, + "narHash": "sha256-EK4rZ+Hd5hsvXnzSzk2ikhStJnD63odF7SzsQ8CuSPU=", + "owner": "domenkozar", + "repo": "nix", + "rev": "7c91803598ffbcfe4a55c44ac6d49b2cf07a527f", + "type": "github" + }, + "original": { + "owner": "domenkozar", + "ref": "relaxed-flakes", + "repo": "nix", + "type": "github" + } + }, + "nix_4": { + "inputs": { + "flake-compat": "flake-compat_20", + "libgit2": "libgit2", + "nixpkgs": "nixpkgs_33", + "nixpkgs-regression": "nixpkgs-regression_4" + }, + "locked": { + "lastModified": 1712161137, + "narHash": "sha256-ObaVDDPtnOeIE0t7m4OVk5G+OS6d9qYh+ktK67Fe/zE=", + "rev": "355cbc482f33f5b07a6bc0d72be862b1ccdb99dd", + "revCount": 16488, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/NixOS/nix/2.21.2/018eaedc-df49-7da8-8007-06186938ee08/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/NixOS/nix/%3D2.21.2.tar.gz" + } + }, + "nix_5": { + "inputs": { + "flake-compat": "flake-compat_21", + "libgit2": "libgit2_2", + "nixpkgs": "nixpkgs_34", + "nixpkgs-regression": "nixpkgs-regression_5" + }, + "locked": { + "lastModified": 1712163141, + "narHash": "sha256-BSl8Jijq1A4n1ToQy0t0jDJCXhJK+w1prL8QMHS5t54=", + "owner": "NixOS", + "repo": "nix", + "rev": "7bc4af7301df34ea4e157338ac3792c1a9ae35b7", + "type": "github" + }, + "original": { + "id": "nix", + "ref": "2.20.6", + "type": "indirect" + } + }, + "nixago": { + "inputs": { + "flake-utils": "flake-utils_17", + "nixago-exts": [ + "hive" + ], + "nixpkgs": [ + "hive", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687381756, + "narHash": "sha256-IUMIlYfrvj7Yli4H2vvyig8HEPpfCeMaE6+kBGPzFyk=", + "owner": "nix-community", + "repo": "nixago", + "rev": "dacceb10cace103b3e66552ec9719fa0d33c0dc9", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixago", + "type": "github" + } + }, + "nixago-extensions": { + "inputs": { + "flake-utils": "flake-utils_34", + "nixago": "nixago_5", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1676070308, + "narHash": "sha256-QaJ65oc2l8iwQIGWUJ0EKjCeSuuCM/LqR8RauxZUUkc=", + "owner": "nix-community", + "repo": "nixago-extensions", + "rev": "e5380cb0456f4ea3c86cf94e3039eb856bf07d0b", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixago-extensions", + "type": "github" + } + }, + "nixago-exts": { + "inputs": { + "flake-utils": "flake-utils_30", + "nixago": "nixago_3", + "nixpkgs": [ + "nixago", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1676070308, + "narHash": "sha256-QaJ65oc2l8iwQIGWUJ0EKjCeSuuCM/LqR8RauxZUUkc=", + "owner": "nix-community", + "repo": "nixago-extensions", + "rev": "e5380cb0456f4ea3c86cf94e3039eb856bf07d0b", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixago-extensions", + "type": "github" + } + }, + "nixago-exts_2": { + "inputs": { + "flake-utils": "flake-utils_32", + "nixago": "nixago_4", + "nixpkgs": [ + "nixago", + "nixago-exts", + "nixago", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1655508669, + "narHash": "sha256-BDDdo5dZQMmwNH/GNacy33nPBnCpSIydWFPZs0kkj/g=", + "owner": "nix-community", + "repo": "nixago-extensions", + "rev": "3022a932ce109258482ecc6568c163e8d0b426aa", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixago-extensions", + "type": "github" + } + }, + "nixago-exts_3": { + "inputs": { + "flake-utils": "flake-utils_36", + "nixago": "nixago_6", + "nixpkgs": [ + "nixago-extensions", + "nixago", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1655508669, + "narHash": "sha256-BDDdo5dZQMmwNH/GNacy33nPBnCpSIydWFPZs0kkj/g=", + "owner": "nix-community", + "repo": "nixago-extensions", + "rev": "3022a932ce109258482ecc6568c163e8d0b426aa", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixago-extensions", + "type": "github" + } + }, + "nixago_2": { + "inputs": { + "flake-utils": "flake-utils_29", + "nixago-exts": "nixago-exts", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714086354, + "narHash": "sha256-yKVQMxL9p7zCWUhnGhDzRVT8sDgHoI3V595lBK0C2YA=", + "owner": "nix-community", + "repo": "nixago", + "rev": "5133633e9fe6b144c8e00e3b212cdbd5a173b63d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixago", + "type": "github" + } + }, + "nixago_3": { + "inputs": { + "flake-utils": "flake-utils_31", + "nixago-exts": "nixago-exts_2", + "nixpkgs": [ + "nixago", + "nixago-exts", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1676070010, + "narHash": "sha256-iYzJIWptE1EUD8VINAg66AAMUajizg8JUYN3oBmb8no=", + "owner": "nix-community", + "repo": "nixago", + "rev": "d480ba6c0c16e2c5c0bd2122852d6a0c9ad1ed0e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "rename-config-data", + "repo": "nixago", + "type": "github" + } + }, + "nixago_4": { + "inputs": { + "flake-utils": "flake-utils_33", + "nixpkgs": [ + "nixago", + "nixago-exts", + "nixago", + "nixago-exts", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1655405483, + "narHash": "sha256-Crd49aZWNrpczlRTOwWGfwBMsTUoG9vlHDKQC7cx264=", + "owner": "nix-community", + "repo": "nixago", + "rev": "e6a9566c18063db5b120e69e048d3627414e327d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixago", + "type": "github" + } + }, + "nixago_5": { + "inputs": { + "flake-utils": "flake-utils_35", + "nixago-exts": "nixago-exts_3", + "nixpkgs": [ + "nixago-extensions", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1676070010, + "narHash": "sha256-iYzJIWptE1EUD8VINAg66AAMUajizg8JUYN3oBmb8no=", + "owner": "nix-community", + "repo": "nixago", + "rev": "d480ba6c0c16e2c5c0bd2122852d6a0c9ad1ed0e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "rename-config-data", + "repo": "nixago", + "type": "github" + } + }, + "nixago_6": { + "inputs": { + "flake-utils": "flake-utils_37", + "nixpkgs": [ + "nixago-extensions", + "nixago", + "nixago-exts", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1655405483, + "narHash": "sha256-Crd49aZWNrpczlRTOwWGfwBMsTUoG9vlHDKQC7cx264=", + "owner": "nix-community", + "repo": "nixago", + "rev": "e6a9566c18063db5b120e69e048d3627414e327d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixago", + "type": "github" + } + }, + "nixago_7": { + "inputs": { + "flake-utils": [ + "nixt", + "std", + "flake-utils" + ], + "nixago-exts": [ + "nixt", + "std", + "blank" + ], + "nixpkgs": [ + "nixt", + "std", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1683210100, + "narHash": "sha256-bhGDOlkWtlhVECpoOog4fWiFJmLCpVEg09a40aTjCbw=", + "owner": "nix-community", + "repo": "nixago", + "rev": "1da60ad9412135f9ed7a004669fdcf3d378ec630", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixago", + "type": "github" + } + }, + "nixdoc": { + "inputs": { + "flake-compat": "flake-compat_23", + "flake-utils": "flake-utils_38", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713239441, + "narHash": "sha256-Q+1tbls8x/IsGjfqFEM5zgXokrPncUGsd6kJfJcqlcU=", + "owner": "nix-community", + "repo": "nixdoc", + "rev": "2cccd0e126782756629ab39be0c4f10663a14fc9", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixdoc", + "type": "github" + } + }, + "nixid": { + "locked": { + "lastModified": 1687277938, + "narHash": "sha256-5rsanApYkwpq69H3YZnsXN5AMOUWAk8R8Mpr4SveJNA=", + "owner": "srid", + "repo": "nixid", + "rev": "77de4600eaf02b85ef6aa1c83bc1a3ff469a3777", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "nixid", + "type": "github" + } + }, + "nixified-ai": { + "inputs": { + "flake-parts": "flake-parts_28", + "hercules-ci-effects": "hercules-ci-effects_5", + "invokeai-src": "invokeai-src", + "nixpkgs": [ + "nixpkgs" + ], + "textgen-src": "textgen-src" + }, + "locked": { + "lastModified": 1701304375, + "narHash": "sha256-WI/SimUvHPIWFhQTY04+1yCVjZzVjVb28pSE4S2yhFA=", + "owner": "nixified-ai", + "repo": "flake", + "rev": "63339e4c8727578a0fe0f2c63865f60b6e800079", + "type": "github" + }, + "original": { + "owner": "nixified-ai", + "repo": "flake", + "type": "github" + } + }, + "nixlib": { + "locked": { + "lastModified": 1677373009, + "narHash": "sha256-kxhz4QUP8tXa/yVSpEzDDZSEp9FvhzRqZzb+SeUaekw=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "c9d4f2476046c6a7a2ce3c2118c48455bf0272ea", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixlib_2": { + "locked": { + "lastModified": 1712450863, + "narHash": "sha256-K6IkdtMtq9xktmYPj0uaYc8NsIqHuaAoRBaMgu9Fvrw=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "3c62b6a12571c9a7f65ab037173ee153d539905f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixlib_3": { + "locked": { + "lastModified": 1712450863, + "narHash": "sha256-K6IkdtMtq9xktmYPj0uaYc8NsIqHuaAoRBaMgu9Fvrw=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "3c62b6a12571c9a7f65ab037173ee153d539905f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixos-2311": { + "locked": { + "lastModified": 1713397591, + "narHash": "sha256-1P6Plf9a9KwgERtuijPpET/s4AwIZUYqIu1nuVJqPPU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "392320f29b07e74131d4e4a7b435e8e9b9b85adf", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-conf-editor": { + "inputs": { + "flake-compat": "flake-compat_24", + "nixpkgs": "nixpkgs_38", + "snowfall-lib": "snowfall-lib_3" + }, + "locked": { + "lastModified": 1707338010, + "narHash": "sha256-UtLeZzDdk96sLTRcWsGrkWCslNUDytrGe0VmOTB/iig=", + "owner": "vlinkz", + "repo": "nixos-conf-editor", + "rev": "27b5e92f580f794c690093503869aab242f075ab", + "type": "github" + }, + "original": { + "owner": "vlinkz", + "repo": "nixos-conf-editor", + "type": "github" + } + }, + "nixos-generators": { + "inputs": { + "nixlib": "nixlib_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713783234, + "narHash": "sha256-3yh0nqI1avYUmmtqqTW3EVfwaLE+9ytRWxsA5aWtmyI=", + "owner": "nix-community", + "repo": "nixos-generators", + "rev": "722b512eb7e6915882f39fff0e4c9dd44f42b77e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-generators", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1714201532, + "narHash": "sha256-nk0W4rH7xYdDeS7k1SqqNtBaNrcgIBYNmOVc8P2puEY=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "53db5e1070d07e750030bf65f1b9963df8f0c678", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixos-images": { + "inputs": { + "nixos-2311": "nixos-2311", + "nixos-unstable": "nixos-unstable" + }, + "locked": { + "lastModified": 1713523007, + "narHash": "sha256-kEnwogkcBn0omgIsGo3zbfAP9nJTDUhp+Q9QWXxsUd0=", + "owner": "nix-community", + "repo": "nixos-images", + "rev": "f064936faf1d12452212030c38e8c325f5b4dfe5", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-images", + "type": "github" + } + }, + "nixos-mobile": { + "flake": false, + "locked": { + "lastModified": 1676780201, + "narHash": "sha256-afeKeIz1UOVSBES66WlPdi6kQTpYEq7XRbKJekbqkgU=", + "owner": "vlinkz", + "repo": "mobile-nixos", + "rev": "014eab71f89497d247a363292a4654297f094e88", + "type": "github" + }, + "original": { + "owner": "vlinkz", + "ref": "gnomelatest", + "repo": "mobile-nixos", + "type": "github" + } + }, + "nixos-stable": { + "locked": { + "lastModified": 1713995372, + "narHash": "sha256-fFE3M0vCoiSwCX02z8VF58jXFRj9enYUSTqjyHAjrds=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "dd37924974b9202f8226ed5d74a252a9785aedf8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-unstable": { + "locked": { + "lastModified": 1713368829, + "narHash": "sha256-EreStuOxwalGOy5seV5PGc3zDT1Ppqj/4Q3ByAOGMnY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "203fac824e2fdfed2e3a832b8123d9a64ee58b43", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixos-unstable_2": { + "locked": { + "lastModified": 1714076141, + "narHash": "sha256-Drmja/f5MRHZCskS6mvzFqxEaZMeciScCTFxWVLqWEY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7bb2ccd8cdc44c91edba16c48d2c8f331fb3d856", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpak": { + "inputs": { + "flake-parts": "flake-parts_30", + "hercules-ci-effects": "hercules-ci-effects_6", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714012008, + "narHash": "sha256-RHYoBNAN0Z238QxrCXUjr0qjHGQYwIVB0XoGqhnFHvI=", + "owner": "nixpak", + "repo": "nixpak", + "rev": "bf7c4c53ea53e31ee8033e11c688970b1eb86783", + "type": "github" + }, + "original": { + "owner": "nixpak", + "repo": "nixpak", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1694183432, + "narHash": "sha256-YyPGNapgZNNj51ylQMw9lAgvxtM2ai1HZVUu3GS8Fng=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "db9208ab987cdeeedf78ad9b4cf3c55f5ebd269b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-21_11": { + "locked": { + "lastModified": 1654346688, + "narHash": "sha256-Y7QtZkfdxTvACCvWmDjpN6qOf4OKkZATufHcJP2VMKM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2de556c4cd46a59e8ce2f85ee4dd400983213d45", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-21.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-22_05": { + "locked": { + "lastModified": 1654373220, + "narHash": "sha256-3vKFnZz2oYHo4YcelaNOhO4XQ2jiIEXrp1s4w+e773c=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d6cb04299ce8964290ae7fdcb87aa50da0500b5c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-22.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-android": { + "inputs": { + "devshell": "devshell_5", + "flake-utils": "flake-utils_41", + "nixpkgs": "nixpkgs_39" + }, + "locked": { + "lastModified": 1712088936, + "narHash": "sha256-mVjeSWQiR/t4UZ9fUawY9OEPAhY1R3meYG+0oh8DUBs=", + "owner": "tadfisher", + "repo": "android-nixpkgs", + "rev": "2d8181caef279f19c4a33dc694723f89ffc195d4", + "type": "github" + }, + "original": { + "owner": "tadfisher", + "repo": "android-nixpkgs", + "type": "github" + } + }, + "nixpkgs-darwin": { + "locked": { + "lastModified": 1714230522, + "narHash": "sha256-RODqrJQ9QqNnJe6floeUM5cbz4fh3BBqCEegA+4zm0M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "485480127ad7df42fb0d82bc56efcdd33f37f350", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-23.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-gnome-apps": { + "inputs": { + "flake-compat": "flake-compat_26", + "nixpkgs": "nixpkgs_40" + }, + "locked": { + "lastModified": 1701215616, + "narHash": "sha256-VYgc5Cyv0hVapi/W8hPrjKZUI2Hhd+yniTX02b9J3+I=", + "owner": "chuangzhu", + "repo": "nixpkgs-gnome-apps", + "rev": "df7f956788926fdcb60ac1850c7c452fe14e1e37", + "type": "github" + }, + "original": { + "owner": "chuangzhu", + "repo": "nixpkgs-gnome-apps", + "type": "github" + } + }, + "nixpkgs-gnome-apps_2": { + "inputs": { + "flake-compat": "flake-compat_27", + "nixpkgs": "nixpkgs_43" + }, + "locked": { + "lastModified": 1701215616, + "narHash": "sha256-VYgc5Cyv0hVapi/W8hPrjKZUI2Hhd+yniTX02b9J3+I=", + "owner": "chuangzhu", + "repo": "nixpkgs-gnome-apps", + "rev": "df7f956788926fdcb60ac1850c7c452fe14e1e37", + "type": "github" + }, + "original": { + "owner": "chuangzhu", + "repo": "nixpkgs-gnome-apps", + "type": "github" + } + }, + "nixpkgs-gnome-mobile": { + "inputs": { + "devshell": "devshell_6", + "flake-parts": "flake-parts_31", + "flake-utils": "flake-utils_43", + "nixpkgs": "nixpkgs_42", + "nixpkgs-gnome-apps": "nixpkgs-gnome-apps_2" + }, + "locked": { + "lastModified": 1707907258, + "narHash": "sha256-vdnPUeQ/imuKW/1Fgpdf6Lyp/kj/0i5p+BUwgHHFk+w=", + "owner": "lehmanator", + "repo": "nixpkgs-gnome-mobile", + "rev": "78715b89dbc027fe38a5066adcbee2f7f721ca04", + "type": "github" + }, + "original": { + "owner": "lehmanator", + "ref": "develop", + "repo": "nixpkgs-gnome-mobile", + "type": "github" + } + }, + "nixpkgs-graph-explorer": { + "inputs": { + "devshell": "devshell_7", + "flake-utils": "flake-utils_45", + "nixpkgs": "nixpkgs_44" + }, + "locked": { + "lastModified": 1692018161, + "narHash": "sha256-JNmUaZITcII5y66r2RM9CsZZTpI43rSkMi6abfSB3s8=", + "owner": "tweag", + "repo": "nixpkgs-graph-explorer", + "rev": "733f8e616d978244f53dca22c0b05248a68aed10", + "type": "github" + }, + "original": { + "owner": "tweag", + "repo": "nixpkgs-graph-explorer", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1693471703, + "narHash": "sha256-0l03ZBL8P1P6z8MaSDS/MvuU8E75rVxe5eE1N6gxeTo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3e52e76b70d5508f3cec70b882a29199f4d1ee85", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_10": { + "locked": { + "dir": "lib", + "lastModified": 1696019113, + "narHash": "sha256-X3+DKYWJm93DRSdC5M6K5hLqzSya9BjibtBsuARoPco=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f5892ddac112a1e9b3612c39af1b72987ee5783a", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_11": { + "locked": { + "dir": "lib", + "lastModified": 1698611440, + "narHash": "sha256-jPjHjrerhYDy3q9+s5EAsuhyhuknNfowY6yt6pjn9pc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0cbe9f69c234a7700596e943bfae7ef27a31b735", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_12": { + "locked": { + "dir": "lib", + "lastModified": 1678375444, + "narHash": "sha256-XIgHfGvjFvZQ8hrkfocanCDxMefc/77rXeHvYdzBMc8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "130fa0baaa2b93ec45523fdcde942f6844ee9f6e", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_13": { + "locked": { + "dir": "lib", + "lastModified": 1706550542, + "narHash": "sha256-UcsnCG6wx++23yeER4Hg18CXWbgNpqNXcHIo5/1Y+hc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "97b17f32362e475016f942bbdfda4a4a72a8a652", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_14": { + "locked": { + "lastModified": 1713660444, + "narHash": "sha256-2bVnrEGyWJhRNKspzfTJmVD/fsH9HQURD4cWpz79Ulw=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "6882347415e352cfc9c277cc01f73e0f5cb7b93c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "dir": "lib", + "lastModified": 1703961334, + "narHash": "sha256-M1mV/Cq+pgjk0rt6VxoyyD+O8cOUiai8t9Q6Yyq4noY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b0d36bd0a420ecee3bc916c91886caca87c894e9", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_3": { + "locked": { + "dir": "lib", + "lastModified": 1711703276, + "narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_4": { + "locked": { + "lastModified": 1713660444, + "narHash": "sha256-2bVnrEGyWJhRNKspzfTJmVD/fsH9HQURD4cWpz79Ulw=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "6882347415e352cfc9c277cc01f73e0f5cb7b93c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs-lib_5": { + "locked": { + "dir": "lib", + "lastModified": 1711703276, + "narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_6": { + "locked": { + "dir": "lib", + "lastModified": 1693471703, + "narHash": "sha256-0l03ZBL8P1P6z8MaSDS/MvuU8E75rVxe5eE1N6gxeTo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3e52e76b70d5508f3cec70b882a29199f4d1ee85", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_7": { + "locked": { + "dir": "lib", + "lastModified": 1703961334, + "narHash": "sha256-M1mV/Cq+pgjk0rt6VxoyyD+O8cOUiai8t9Q6Yyq4noY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b0d36bd0a420ecee3bc916c91886caca87c894e9", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_8": { + "locked": { + "dir": "lib", + "lastModified": 1711703276, + "narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib_9": { + "locked": { + "dir": "lib", + "lastModified": 1711703276, + "narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-master": { + "locked": { + "lastModified": 1714247646, + "narHash": "sha256-f0ljngJvTHtfKAJlU83C2v9RCnlB2NUZ1OVoQnP1e3k=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "cbe1b81d403853d5e1c05883c9e89dce739351cc", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-mozilla": { + "locked": { + "lastModified": 1704373101, + "narHash": "sha256-+gi59LRWRQmwROrmE1E2b3mtocwueCQqZ60CwLG+gbg=", + "owner": "mozilla", + "repo": "nixpkgs-mozilla", + "rev": "9b11a87c0cc54e308fa83aac5b4ee1816d5418a2", + "type": "github" + }, + "original": { + "owner": "mozilla", + "repo": "nixpkgs-mozilla", + "type": "github" + } + }, + "nixpkgs-regression": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + } + }, + "nixpkgs-regression_2": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + } + }, + "nixpkgs-regression_3": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + } + }, + "nixpkgs-regression_4": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + } + }, + "nixpkgs-regression_5": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1704874635, + "narHash": "sha256-YWuCrtsty5vVZvu+7BchAxmcYzTMfolSPP5io8+WYCg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3dc440faeee9e889fe2d1b4d25ad0f430d449356", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable-staging": { + "locked": { + "lastModified": 1714207207, + "narHash": "sha256-3b/OnAm1hGdqQHXHdUAt/fwLvE9fRrf+NVzlT1TLjdI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5ed92e50ce73c93321e1f285b8d6e2cdaecb01e5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "staging-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable-staging-next": { + "locked": { + "lastModified": 1714207555, + "narHash": "sha256-qUVmE050Om1lipYUeqPSZMEcCAlQfgp1oApe6/VPkU4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b50602929b4080eb336634d5fd9b5e045c75203a", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "staging-next-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1710695816, + "narHash": "sha256-3Eh7fhEID17pv9ZxrPwCLfqXnYP006RKzSs0JptsN84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "614b4613980a522ba49f0d194531beddbb7220d3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_3": { + "locked": { + "lastModified": 1673800717, + "narHash": "sha256-SFHraUqLSu5cC6IxTprex/nTsI81ZQAtDvlBvGDWfnA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2f9fd351ec37f5d479556cd48be4ca340da59b8f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-22.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_4": { + "locked": { + "lastModified": 1710695816, + "narHash": "sha256-3Eh7fhEID17pv9ZxrPwCLfqXnYP006RKzSs0JptsN84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "614b4613980a522ba49f0d194531beddbb7220d3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_5": { + "locked": { + "lastModified": 1710695816, + "narHash": "sha256-3Eh7fhEID17pv9ZxrPwCLfqXnYP006RKzSs0JptsN84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "614b4613980a522ba49f0d194531beddbb7220d3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_6": { + "locked": { + "lastModified": 1714244619, + "narHash": "sha256-65A4u+cbW+lBRG+vhZlmFQ++q+WUOmJcZo+fI31OVRk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "49b4bed663f129b72479fe72fcbb6a13bd025b0a", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_7": { + "locked": { + "lastModified": 1710695816, + "narHash": "sha256-3Eh7fhEID17pv9ZxrPwCLfqXnYP006RKzSs0JptsN84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "614b4613980a522ba49f0d194531beddbb7220d3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_8": { + "locked": { + "lastModified": 1713638189, + "narHash": "sha256-q7APLfB6FmmSMI1Su5ihW9IwntBsk2hWNXh8XtSdSIk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "74574c38577914733b4f7a775dd77d24245081dd", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_9": { + "locked": { + "lastModified": 1710695816, + "narHash": "sha256-3Eh7fhEID17pv9ZxrPwCLfqXnYP006RKzSs0JptsN84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "614b4613980a522ba49f0d194531beddbb7220d3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-terraform-providers": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714178303, + "narHash": "sha256-/JMzA7BzX2kO8uAh/+JgzXG6S23Al6D5E8Aak9B4cII=", + "owner": "nix-community", + "repo": "nixpkgs-terraform-providers-bin", + "rev": "1606ae9f4013e0995196e1ad2101570989a21ff3", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs-terraform-providers-bin", + "type": "github" + } + }, + "nixpkgs-unstable": { + "locked": { + "lastModified": 1714213793, + "narHash": "sha256-Yg5D5LhyAZvd3DZrQQfJAVK8K3TkUYKooFtH1ulM0mw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d6f6eb2a984f2ba9a366c31e4d36d65465683450", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-unstable-staging": { + "locked": { + "lastModified": 1714247192, + "narHash": "sha256-x5lSE+UH94LWZDGBP1HyBD7VUFqg/ZIUSvfZE4q+714=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6302c771a5d681387447086563d18ad725f1a5a9", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "staging", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-unstable-staging-next": { + "locked": { + "lastModified": 1714206764, + "narHash": "sha256-vrFcPzhqap6XUfqA/FkNiUW12fjFis8PHlqx1AX3Q5c=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "19c30e016f04874d60ed0922bf58be4aa9a15e53", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "staging-next", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-wayland": { + "inputs": { + "flake-compat": "flake-compat_28", + "lib-aggregate": "lib-aggregate_2", + "nix-eval-jobs": "nix-eval-jobs", + "nixpkgs": "nixpkgs_46" + }, + "locked": { + "lastModified": 1714230891, + "narHash": "sha256-VcSgHRMG/HfSyW0STt14UwEdTpOXDKX9oLMcGbmXoGw=", + "owner": "nix-community", + "repo": "nixpkgs-wayland", + "rev": "ff41a88e80aaf3ae1561cc6a54636fc46f9214de", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs-wayland", + "type": "github" + } + }, + "nixpkgsV1": { + "locked": { + "lastModified": 1686501370, + "narHash": "sha256-G0WuM9fqTPRc2URKP9Lgi5nhZMqsfHGrdEbrLvAPJcg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "75a5ebf473cd60148ba9aec0d219f72e5cf52519", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1713805509, + "narHash": "sha256-YgSEan4CcrjivCNO5ZNzhg7/8ViLkZ4CB/GrGBVSudo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1e1dc66fe68972a76679644a5577828b6a7e8be4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1714076141, + "narHash": "sha256-Drmja/f5MRHZCskS6mvzFqxEaZMeciScCTFxWVLqWEY=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "7bb2ccd8cdc44c91edba16c48d2c8f331fb3d856", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { + "locked": { + "lastModified": 1694183432, + "narHash": "sha256-YyPGNapgZNNj51ylQMw9lAgvxtM2ai1HZVUu3GS8Fng=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "db9208ab987cdeeedf78ad9b4cf3c55f5ebd269b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_13": { + "locked": { + "lastModified": 1678875422, + "narHash": "sha256-T3o6NcQPwXjxJMn2shz86Chch4ljXgZn746c2caGxd8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "126f49a01de5b7e35a43fd43f891ecf6d3a51459", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_14": { + "locked": { + "lastModified": 1704842529, + "narHash": "sha256-OTeQA+F8d/Evad33JMfuXC89VMetQbsU4qcaePchGr4=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "eabe8d3eface69f5bb16c18f8662a702f50c20d5", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_15": { + "locked": { + "lastModified": 1713714899, + "narHash": "sha256-+z/XjO3QJs5rLE5UOf015gdVauVRQd2vZtsFkaXBq2Y=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6143fc5eeb9c4f00163267708e26191d1e918932", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_16": { + "locked": { + "lastModified": 1711825063, + "narHash": "sha256-W6s9ALmKk8LOUZEmhpwDuDxMwUFA+WP+GRexihSeatU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "640f2068a7b9d0034f376f6d10efb87a82d57f92", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "640f2068a7b9d0034f376f6d10efb87a82d57f92", + "type": "github" + } + }, + "nixpkgs_17": { + "locked": { + "lastModified": 1708343346, + "narHash": "sha256-qlzHvterVRzS8fS0ophQpkh0rqw0abijHEOAKm0HmV0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "9312b935a538684049cb668885e60f15547d4c5f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "release-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_18": { + "locked": { + "lastModified": 1708475490, + "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "0e74ca98a74bc7270d28838369593635a5db3260", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_19": { + "locked": { + "lastModified": 1687466461, + "narHash": "sha256-oupXI7g7RPzlpGUfAu1xG4KBK53GrZH8/xeKgKDB4+Q=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ecb441f22067ba1d6312f4932a7c64efa8d19a7b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1704842529, + "narHash": "sha256-OTeQA+F8d/Evad33JMfuXC89VMetQbsU4qcaePchGr4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "eabe8d3eface69f5bb16c18f8662a702f50c20d5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_20": { + "locked": { + "lastModified": 1709961763, + "narHash": "sha256-6H95HGJHhEZtyYA3rIQpvamMKAGoa8Yh2rFV29QnuGw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3030f185ba6a4bf4f18b87f345f104e6a6961f34", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_21": { + "locked": { + "lastModified": 1713714899, + "narHash": "sha256-+z/XjO3QJs5rLE5UOf015gdVauVRQd2vZtsFkaXBq2Y=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6143fc5eeb9c4f00163267708e26191d1e918932", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_22": { + "locked": { + "lastModified": 1675940568, + "narHash": "sha256-epG6pOT9V0kS+FUqd7R6/CWkgnZx2DMT5Veqo+y6G3c=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "6ccc4a59c3f1b56d039d93da52696633e641bc71", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_23": { + "locked": { + "lastModified": 1696193975, + "narHash": "sha256-mnQjUcYgp9Guu3RNVAB2Srr1TqKcPpRXmJf4LJk6KRY=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "fdd898f8f79e8d2f99ed2ab6b3751811ef683242", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_24": { + "locked": { + "lastModified": 1706683685, + "narHash": "sha256-FtPPshEpxH/ewBOsdKBNhlsL2MLEFv1hEnQ19f/bFsQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5ad9903c16126a7d949101687af0aa589b1d7d3d", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_25": { + "locked": { + "lastModified": 1686488075, + "narHash": "sha256-2otSBt2hbeD+5yY25NF3RhWx7l5SDt1aeU3cJ/9My4M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9401a0c780b49faf6c28adf55764f230301d0dce", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_26": { + "locked": { + "lastModified": 1710734606, + "narHash": "sha256-rFJl+WXfksu2NkWJWKGd5Km17ZGEjFg9hOQNwstsoU8=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "79bb4155141a5e68f2bdee2bf6af35b1d27d3a1d", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_27": { + "locked": { + "lastModified": 1714091391, + "narHash": "sha256-68n3GBvlm1MIeJXadPzQ3v8Y9sIW3zmv8gI5w5sliC8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4c86138ce486d601d956a165e2f7a0fc029a03c1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_28": { + "locked": { + "lastModified": 1712791164, + "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_29": { + "locked": { + "lastModified": 1714076141, + "narHash": "sha256-Drmja/f5MRHZCskS6mvzFqxEaZMeciScCTFxWVLqWEY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7bb2ccd8cdc44c91edba16c48d2c8f331fb3d856", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1709479366, + "narHash": "sha256-n6F0n8UV6lnTZbYPl1A9q1BS0p4hduAv1mGAP17CVd0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "b8697e57f10292a6165a20f03d2f42920dfaf973", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_30": { + "locked": { + "lastModified": 1698318101, + "narHash": "sha256-gUihHt3yPD7bVqg+k/UVHgngyaJ3DMEBchbymBMvK1E=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "63678e9f3d3afecfeafa0acead6239cdb447574c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_31": { + "locked": { + "lastModified": 1680151711, + "narHash": "sha256-7vMCXF4t7E07C1jDNzLMDXvPDAuDjNFMX3Zin+8nYY4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e608c90a1cf381dde6ac9e0f085337150f2af3e2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_32": { + "locked": { + "lastModified": 1679793451, + "narHash": "sha256-JafTtgMDATE8dZOImBhWMA9RCn9AP8FVOpN+9K/tTlg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0cd51a933d91078775b300cf0f29aa3495231aa2", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_33": { + "locked": { + "lastModified": 1709083642, + "narHash": "sha256-7kkJQd4rZ+vFrzWu8sTRtta5D1kBG0LSRYAfhtmMlSo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b550fe4b4776908ac2a861124307045f8e717c8e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_34": { + "locked": { + "lastModified": 1705033721, + "narHash": "sha256-K5eJHmL1/kev6WuqyqqbS1cdNnSidIZ3jeqJ7GbrYnQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a1982c92d8980a0114372973cbdfe0a307f1bdea", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.05-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_35": { + "locked": { + "lastModified": 1692638711, + "narHash": "sha256-J0LgSFgJVGCC1+j5R2QndadWI1oumusg6hCtYAzLID4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "91a22f76cd1716f9d0149e8a5c68424bb691de15", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_36": { + "locked": { + "lastModified": 1713805509, + "narHash": "sha256-YgSEan4CcrjivCNO5ZNzhg7/8ViLkZ4CB/GrGBVSudo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1e1dc66fe68972a76679644a5577828b6a7e8be4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_37": { + "locked": { + "lastModified": 1660551188, + "narHash": "sha256-a1LARMMYQ8DPx1BgoI/UN4bXe12hhZkCNqdxNi6uS0g=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "441dc5d512153039f19ef198e662e4f3dbb9fd65", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_38": { + "locked": { + "lastModified": 1698318101, + "narHash": "sha256-gUihHt3yPD7bVqg+k/UVHgngyaJ3DMEBchbymBMvK1E=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "63678e9f3d3afecfeafa0acead6239cdb447574c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_39": { + "locked": { + "lastModified": 1711703276, + "narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1692808169, + "narHash": "sha256-x9Opq06rIiwdwGeK2Ykj69dNc2IvUH1fY55Wm7atwrE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9201b5ff357e781bf014d0330d18555695df7ba8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_40": { + "locked": { + "lastModified": 1700794826, + "narHash": "sha256-RyJTnTNKhO0yqRpDISk03I/4A67/dp96YRxc86YOPgU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5a09cb4b393d58f9ed0d9ca1555016a8543c2ac8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_41": { + "locked": { + "lastModified": 1704161960, + "narHash": "sha256-QGua89Pmq+FBAro8NriTuoO/wNaUtugt29/qqA8zeeM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "63143ac2c9186be6d9da6035fa22620018c85932", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_42": { + "locked": { + "lastModified": 1707743206, + "narHash": "sha256-AehgH64b28yKobC/DAWYZWkJBxL/vP83vkY+ag2Hhy4=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "2d627a2a704708673e56346fcb13d25344b8eaf3", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_43": { + "locked": { + "lastModified": 1700794826, + "narHash": "sha256-RyJTnTNKhO0yqRpDISk03I/4A67/dp96YRxc86YOPgU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5a09cb4b393d58f9ed0d9ca1555016a8543c2ac8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_44": { + "locked": { + "lastModified": 1675115703, + "narHash": "sha256-4zetAPSyY0D77x+Ww9QBe8RHn1akvIvHJ/kgg8kGDbk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2caf4ef5005ecc68141ecb4aac271079f7371c44", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_45": { + "locked": { + "lastModified": 1713805509, + "narHash": "sha256-YgSEan4CcrjivCNO5ZNzhg7/8ViLkZ4CB/GrGBVSudo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1e1dc66fe68972a76679644a5577828b6a7e8be4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_46": { + "locked": { + "lastModified": 1714076141, + "narHash": "sha256-Drmja/f5MRHZCskS6mvzFqxEaZMeciScCTFxWVLqWEY=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "7bb2ccd8cdc44c91edba16c48d2c8f331fb3d856", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_47": { + "locked": { + "lastModified": 1677063315, + "narHash": "sha256-qiB4ajTeAOVnVSAwCNEEkoybrAlA+cpeiBxLobHndE8=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "988cc958c57ce4350ec248d2d53087777f9e1949", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_48": { + "locked": { + "lastModified": 1674365217, + "narHash": "sha256-lL3qUbAr/tnt/xGk1MTc8xuOTKqErqubYha4vhjA4+g=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6c582bdf390948a6be049e81ecbab81bb160a5d3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_49": { + "locked": { + "lastModified": 1710765496, + "narHash": "sha256-p7ryWEeQfMwTB6E0wIUd5V2cFTgq+DRRBz2hYGnJZyA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e367f7a1fb93137af22a3908f00b9a35e2d286a7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1713361204, + "narHash": "sha256-TA6EDunWTkc5FvDCqU3W2T3SFn0gRZqh6D/hJnM02MM=", + "owner": "cachix", + "repo": "devenv-nixpkgs", + "rev": "285676e87ad9f0ca23d8714a6ab61e7e027020c6", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "rolling", + "repo": "devenv-nixpkgs", + "type": "github" + } + }, + "nixpkgs_50": { + "locked": { + "lastModified": 1654245945, + "narHash": "sha256-PV6MZ+HuNnyLxQGa2rwt0BmCRkQS2xqhc+SeJLQM+WU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "442db9429b9fbdb6352cfb937afc8ecccfe2633f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_51": { + "locked": { + "lastModified": 1675673983, + "narHash": "sha256-8hzNh1jtiPxL5r3ICNzSmpSzV7kGb3KwX+FS5BWJUTo=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "5a350a8f31bb7ef0c6e79aea3795a890cf7743d4", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_52": { + "locked": { + "lastModified": 1674120619, + "narHash": "sha256-xLT1FQl7/jNPOEq5q/vmc3AExt1V9LtcjM+QY2+MUpA=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d7705c01ef0a39c8ef532d1033bace8845a07d35", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_53": { + "locked": { + "lastModified": 1713960115, + "narHash": "sha256-cgDgQ76uwzyiQ1jc326Oabfxfl9NeBfQeQ/MQCoLQl8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8a30b52c5641c4317321c74efeae696341421267", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_54": { + "locked": { + "lastModified": 1711703276, + "narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_55": { + "locked": { + "lastModified": 1708343346, + "narHash": "sha256-qlzHvterVRzS8fS0ophQpkh0rqw0abijHEOAKm0HmV0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "9312b935a538684049cb668885e60f15547d4c5f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "release-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_56": { + "locked": { + "lastModified": 1713596654, + "narHash": "sha256-LJbHQQ5aX1LVth2ST+Kkse/DRzgxlVhTL1rxthvyhZc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "fd16bb6d3bcca96039b11aa52038fafeb6e4f4be", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_57": { + "locked": { + "lastModified": 1712439257, + "narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_58": { + "locked": { + "lastModified": 1708475490, + "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "0e74ca98a74bc7270d28838369593635a5db3260", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1704161960, + "narHash": "sha256-QGua89Pmq+FBAro8NriTuoO/wNaUtugt29/qqA8zeeM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "63143ac2c9186be6d9da6035fa22620018c85932", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1704842529, + "narHash": "sha256-OTeQA+F8d/Evad33JMfuXC89VMetQbsU4qcaePchGr4=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "eabe8d3eface69f5bb16c18f8662a702f50c20d5", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1712883908, + "narHash": "sha256-icE1IJE9fHcbDfJ0+qWoDdcBXUoZCcIJxME4lMHwvSM=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a0c9e3aee1000ac2bfb0e5b98c94c946a5d180a9", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { + "locked": { + "lastModified": 1699963925, + "narHash": "sha256-LE7OV/SwkIBsCpAlIPiFhch/J+jBDGEZjNfdnzCnCrY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bf744fe90419885eefced41b3e5ae442d732712d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixt": { + "inputs": { + "flake-compat": "flake-compat_29", + "nixpkgs": [ + "nixpkgs" + ], + "std": "std_3", + "std-data-collection": "std-data-collection" + }, + "locked": { + "lastModified": 1684298239, + "narHash": "sha256-7lXfElL2S3dA7LmRKv49KE5qtRUK0XWQDSUTzPfslwA=", + "owner": "nix-community", + "repo": "nixt", + "rev": "a948b1afc08031f640ff9e09640c53493ea0fca1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixt", + "type": "github" + } + }, + "nixvim": { + "inputs": { + "devshell": "devshell_9", + "flake-compat": "flake-compat_31", + "flake-parts": "flake-parts_33", + "home-manager": "home-manager_2", + "nix-darwin": "nix-darwin", + "nixpkgs": [ + "nixpkgs-unstable-staging" + ], + "pre-commit-hooks": "pre-commit-hooks_3" + }, + "locked": { + "lastModified": 1714142618, + "narHash": "sha256-0ijCe5k7Q569PO/hP/yryh9aB33zJyjs4NKbPQxVW8c=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "0fc190144f9acf72ae8705ea304577e90389da20", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, + "nmd": { + "locked": { + "lastModified": 1672240039, + "narHash": "sha256-lmct89fYDOr9YdWVvdJgklv/7WttRSiDAkoi2cvvAW4=", + "owner": "gvolpe", + "repo": "nmd", + "rev": "a59e840c2e8d54415485f349760e1350cb80d911", + "type": "github" + }, + "original": { + "owner": "gvolpe", + "repo": "nmd", + "type": "github" + } + }, + "nosys": { + "locked": { + "lastModified": 1668010795, + "narHash": "sha256-JBDVBnos8g0toU7EhIIqQ1If5m/nyBqtHhL3sicdPwI=", + "owner": "divnix", + "repo": "nosys", + "rev": "feade0141487801c71ff55623b421ed535dbdefa", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "nosys", + "type": "github" + } + }, + "nosys_2": { + "locked": { + "lastModified": 1668010795, + "narHash": "sha256-JBDVBnos8g0toU7EhIIqQ1If5m/nyBqtHhL3sicdPwI=", + "owner": "divnix", + "repo": "nosys", + "rev": "feade0141487801c71ff55623b421ed535dbdefa", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "nosys", + "type": "github" + } + }, + "nosys_3": { + "locked": { + "lastModified": 1668010795, + "narHash": "sha256-JBDVBnos8g0toU7EhIIqQ1If5m/nyBqtHhL3sicdPwI=", + "owner": "divnix", + "repo": "nosys", + "rev": "feade0141487801c71ff55623b421ed535dbdefa", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "nosys", + "type": "github" + } + }, + "nosys_4": { + "locked": { + "lastModified": 1668010795, + "narHash": "sha256-JBDVBnos8g0toU7EhIIqQ1If5m/nyBqtHhL3sicdPwI=", + "owner": "divnix", + "repo": "nosys", + "rev": "feade0141487801c71ff55623b421ed535dbdefa", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "nosys", + "type": "github" + } + }, + "nuenv": { + "inputs": { + "nixpkgs": "nixpkgs_32", + "rust-overlay": "rust-overlay_5" + }, + "locked": { + "lastModified": 1680179528, + "narHash": "sha256-Ax88cHZt90fG/IHjkdXXfuCcks1rpBxge3m/LuInDMg=", + "owner": "DeterminateSystems", + "repo": "nuenv", + "rev": "8f654fae8465aa8dbf1219e5430710c328392e0b", + "type": "github" + }, + "original": { + "owner": "DeterminateSystems", + "repo": "nuenv", + "type": "github" + } + }, + "nuenv_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay_7" + }, + "locked": { + "lastModified": 1712063232, + "narHash": "sha256-L4bq1b79DzovEMt6Hvsb//G0r/ysWklXSfsbiDZ8bjY=", + "owner": "DeterminateSystems", + "repo": "nuenv", + "rev": "2162f67a6decb952954868d0188ccb6cc5886f7e", + "type": "github" + }, + "original": { + "owner": "DeterminateSystems", + "repo": "nuenv", + "type": "github" + } + }, + "nur": { + "locked": { + "lastModified": 1714246367, + "narHash": "sha256-+uILeUYy+b/Wh+aJJ3IJ+UuBomsqX1yMdSoURYnfuAQ=", + "owner": "nix-community", + "repo": "NUR", + "rev": "186d65571fdd7c6a1e0793e571bd9081dbef2633", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, + "nur-update": { + "inputs": { + "nixpkgs": "nixpkgs_48" + }, + "locked": { + "lastModified": 1710174354, + "narHash": "sha256-uZaLfnM7wAWltEK75GkPMEOqDGYNtVVPSOgJD4w1+98=", + "owner": "nix-community", + "repo": "nur-update", + "rev": "224936b86bea5ab087ecfff4a7ffb063ae457abe", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nur-update", + "type": "github" + } + }, + "nurl": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708368674, + "narHash": "sha256-QzvpuikAHHHN91pDkBDoUx3x8LJVHbk2JDwYXe87WCc=", + "owner": "nix-community", + "repo": "nurl", + "rev": "7f789ea2da9ff52724efb38df01ecda87704fc87", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nurl", + "type": "github" + } + }, + "nvfetcher": { + "inputs": { + "flake-compat": "flake-compat_33", + "flake-utils": "flake-utils_52", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713333471, + "narHash": "sha256-sIVQKOXzruxtTYiBRHZa8UQH+CSIa9K5MZlY6vavYfA=", + "owner": "berberman", + "repo": "nvfetcher", + "rev": "2a824322dc6a755ffda83a13b948d42304521e4d", + "type": "github" + }, + "original": { + "owner": "berberman", + "repo": "nvfetcher", + "type": "github" + } + }, + "ocaml-flake": { + "inputs": { + "call-flake": "call-flake", + "flake-parts": "flake-parts_17", + "flake-root": "flake-root_5", + "haumea": "haumea", + "mirage-opam-overlays": "mirage-opam-overlays", + "namaka": "namaka", + "nixpkgs": [ + "flake-parts-website", + "nixpkgs" + ], + "opam-nix": "opam-nix", + "opam-overlays": "opam-overlays", + "opam-repository": "opam-repository", + "opam2json": "opam2json", + "treefmt-nix": [ + "flake-parts-website", + "treefmt-nix" + ] + }, + "locked": { + "lastModified": 1703772672, + "narHash": "sha256-JpK8gYJoX7JzYPG8o7lSBxTg5GTK9d2tLY1MU498fQA=", + "owner": "9glenda", + "repo": "ocaml-flake", + "rev": "82d25b5805323fa13d7b4350a7fe68d2b59a82e6", + "type": "github" + }, + "original": { + "owner": "9glenda", + "repo": "ocaml-flake", + "type": "github" + } + }, + "omnibus": { + "inputs": { + "flops": "flops" + }, + "locked": { + "lastModified": 1714197263, + "narHash": "sha256-dq/KW9mV3w2XHkUQau/CDMjXAH3VhTHZfgMK0gWcJ7Y=", + "owner": "GTrunSec", + "repo": "omnibus", + "rev": "a8fac43235c611a9fd5c249824bcd76621231525", + "type": "github" + }, + "original": { + "owner": "GTrunSec", + "repo": "omnibus", + "type": "github" + } + }, + "opam-nix": { + "inputs": { + "flake-compat": "flake-compat_11", + "flake-utils": "flake-utils_13", + "mirage-opam-overlays": [ + "flake-parts-website", + "ocaml-flake", + "mirage-opam-overlays" + ], + "nixpkgs": [ + "flake-parts-website", + "ocaml-flake", + "nixpkgs" + ], + "opam-overlays": [ + "flake-parts-website", + "ocaml-flake", + "opam-overlays" + ], + "opam-repository": [ + "flake-parts-website", + "ocaml-flake", + "opam-repository" + ], + "opam2json": [ + "flake-parts-website", + "ocaml-flake", + "opam2json" + ] + }, + "locked": { + "lastModified": 1702988812, + "narHash": "sha256-XdGK59SJsZZU9eeulWxopzdS3PZSbRls7i53KEJZ60A=", + "owner": "tweag", + "repo": "opam-nix", + "rev": "a2c8f7d640f1dcb92f036044f13eb9135f6db474", + "type": "github" + }, + "original": { + "owner": "tweag", + "repo": "opam-nix", + "type": "github" + } + }, + "opam-overlays": { + "flake": false, + "locked": { + "lastModified": 1699283786, + "narHash": "sha256-NqvVEDN+1nnDaphm+P0AzAL9BoLYfC56ChjOBqXlWk8=", + "owner": "dune-universe", + "repo": "opam-overlays", + "rev": "91a371754a2c9f4febbb6c7bb039649ad49a3c13", + "type": "github" + }, + "original": { + "owner": "dune-universe", + "repo": "opam-overlays", + "type": "github" + } + }, + "opam-repository": { + "flake": false, + "locked": { + "lastModified": 1703580703, + "narHash": "sha256-GYNjvB+tDpa9Cg1aT+Mrf9DBiRRSqHcs3hCeUHmWlx0=", + "owner": "ocaml", + "repo": "opam-repository", + "rev": "d0429eafa0b0f25319b6e9a289945af1bf117270", + "type": "github" + }, + "original": { + "owner": "ocaml", + "repo": "opam-repository", + "type": "github" + } + }, + "opam2json": { + "inputs": { + "nixpkgs": [ + "flake-parts-website", + "ocaml-flake", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1671540003, + "narHash": "sha256-5pXfbUfpVABtKbii6aaI2EdAZTjHJ2QntEf0QD2O5AM=", + "owner": "tweag", + "repo": "opam2json", + "rev": "819d291ea95e271b0e6027679de6abb4d4f7f680", + "type": "github" + }, + "original": { + "owner": "tweag", + "repo": "opam2json", + "type": "github" + } + }, + "paisano": { + "inputs": { + "call-flake": "call-flake_2", + "nixpkgs": [ + "flake-parts-website", + "std", + "nixpkgs" + ], + "nosys": "nosys", + "yants": [ + "flake-parts-website", + "std", + "yants" + ] + }, + "locked": { + "lastModified": 1708640854, + "narHash": "sha256-EpcAmvIS4ErqhXtVEfd2GPpU/E/s8CCRSfYzk6FZ/fY=", + "owner": "paisano-nix", + "repo": "core", + "rev": "adcf742bc9463c08764ca9e6955bd5e7dcf3a3fe", + "type": "github" + }, + "original": { + "owner": "paisano-nix", + "ref": "0.2.0", + "repo": "core", + "type": "github" + } + }, + "paisano-actions": { + "inputs": { + "nixpkgs": [ + "nixt", + "std", + "paisano-mdbook-preprocessor", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1677306424, + "narHash": "sha256-H9/dI2rGEbKo4KEisqbRPHFG2ajF8Tm111NPdKGIf28=", + "owner": "paisano-nix", + "repo": "actions", + "rev": "65ec4e080b3480167fc1a748c89a05901eea9a9b", + "type": "github" + }, + "original": { + "owner": "paisano-nix", + "repo": "actions", + "type": "github" + } + }, + "paisano-mdbook-preprocessor": { + "inputs": { + "crane": "crane_6", + "fenix": "fenix_4", + "nixpkgs": [ + "nixt", + "std", + "nixpkgs" + ], + "paisano-actions": "paisano-actions", + "std": [ + "nixt", + "std" + ] + }, + "locked": { + "lastModified": 1680654400, + "narHash": "sha256-Qdpio+ldhUK3zfl22Mhf8HUULdUOJXDWDdO7MIK69OU=", + "owner": "paisano-nix", + "repo": "mdbook-paisano-preprocessor", + "rev": "11a8fc47f574f194a7ae7b8b98001f6143ba4cf1", + "type": "github" + }, + "original": { + "owner": "paisano-nix", + "repo": "mdbook-paisano-preprocessor", + "type": "github" + } + }, + "paisano-tui": { + "flake": false, + "locked": { + "lastModified": 1708637035, + "narHash": "sha256-R19YURSK+MY/Rw6FZnojQS9zuDh+OoTAyngQAjjoubc=", + "owner": "paisano-nix", + "repo": "tui", + "rev": "231761b260587a64817e4ffae3afc15defaa15db", + "type": "github" + }, + "original": { + "owner": "paisano-nix", + "ref": "v0.5.0", + "repo": "tui", + "type": "github" + } + }, + "paisano-tui_2": { + "flake": false, + "locked": { + "lastModified": 1694014205, + "narHash": "sha256-u0+T6vMznzfjDMUd01ZXQsrQPMEhMjrQwUPTFsPBR1k=", + "owner": "paisano-nix", + "repo": "tui", + "rev": "587ab9fd07bd969d59df73bfe527b5f8a4e752d1", + "type": "github" + }, + "original": { + "owner": "paisano-nix", + "ref": "0.2.0", + "repo": "tui", + "type": "github" + } + }, + "paisano-tui_3": { + "inputs": { + "nixpkgs": [ + "nixt", + "std", + "blank" + ], + "std": [ + "nixt", + "std" + ] + }, + "locked": { + "lastModified": 1681847764, + "narHash": "sha256-mdd7PJW1BZvxy0cIKsPfAO+ohVl/V7heE5ZTAHzTdv8=", + "owner": "paisano-nix", + "repo": "tui", + "rev": "3096bad91cae73ab8ab3367d31f8a143d248a244", + "type": "github" + }, + "original": { + "owner": "paisano-nix", + "ref": "0.1.1", + "repo": "tui", + "type": "github" + } + }, + "paisano-tui_4": { + "flake": false, + "locked": { + "lastModified": 1708637035, + "narHash": "sha256-R19YURSK+MY/Rw6FZnojQS9zuDh+OoTAyngQAjjoubc=", + "owner": "paisano-nix", + "repo": "tui", + "rev": "231761b260587a64817e4ffae3afc15defaa15db", + "type": "github" + }, + "original": { + "owner": "paisano-nix", + "ref": "v0.5.0", + "repo": "tui", + "type": "github" + } + }, + "paisano_2": { + "inputs": { + "call-flake": "call-flake_3", + "nixpkgs": [ + "hive", + "std", + "nixpkgs" + ], + "nosys": "nosys_2", + "yants": [ + "hive", + "std", + "yants" + ] + }, + "locked": { + "lastModified": 1693982790, + "narHash": "sha256-WTZYlqGUjzzz/PSzcvjEZz2kkwYSXObjeQVrFBaqa2Y=", + "owner": "paisano-nix", + "repo": "core", + "rev": "3e897a19418361ece34841105122ed4f9379ca96", + "type": "github" + }, + "original": { + "owner": "paisano-nix", + "repo": "core", + "type": "github" + } + }, + "paisano_3": { + "inputs": { + "nixpkgs": [ + "nixt", + "std", + "nixpkgs" + ], + "nosys": "nosys_3", + "yants": [ + "nixt", + "std", + "yants" + ] + }, + "locked": { + "lastModified": 1678949904, + "narHash": "sha256-oAoF66hYYz1RPh3lEwb9/4e4iyBAfTbQKZRRQ8gP0Ds=", + "owner": "paisano-nix", + "repo": "core", + "rev": "88f2aff10a5064551d1d4cb86800d17084489ce3", + "type": "github" + }, + "original": { + "owner": "paisano-nix", + "repo": "core", + "type": "github" + } + }, + "paisano_4": { + "inputs": { + "call-flake": "call-flake_5", + "nixpkgs": [ + "std", + "nixpkgs" + ], + "nosys": "nosys_4", + "yants": [ + "std", + "yants" + ] + }, + "locked": { + "lastModified": 1708640854, + "narHash": "sha256-EpcAmvIS4ErqhXtVEfd2GPpU/E/s8CCRSfYzk6FZ/fY=", + "owner": "paisano-nix", + "repo": "core", + "rev": "adcf742bc9463c08764ca9e6955bd5e7dcf3a3fe", + "type": "github" + }, + "original": { + "owner": "paisano-nix", + "ref": "0.2.0", + "repo": "core", + "type": "github" + } + }, + "parts": { + "inputs": { + "nixpkgs-lib": [ + "flake-parts-website", + "nix-cargo-integration", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "parts_2": { + "inputs": { + "nixpkgs-lib": [ + "nix-cargo-integration", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "patchelf": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1705312282, + "narHash": "sha256-PPXqKY2hJng4DBVE0I4xshv/vGLUskL7jl53roB8UdU=", + "owner": "NixOS", + "repo": "patchelf", + "rev": "7c2f768bf9601268a4e71c2ebe91e2011918a70f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "patchelf", + "type": "github" + } + }, + "patsh": { + "inputs": { + "crane": "crane_7", + "fenix": "fenix_5", + "flake-parts": "flake-parts_34", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708377685, + "narHash": "sha256-oKOqnHaizo209cXHkCbPVFjBjsc9GJ/Og+9rCB8YGfU=", + "owner": "nix-community", + "repo": "patsh", + "rev": "65d3e558a6d2270e42f6b28f03092c11f24cbb20", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "patsh", + "type": "github" + } + }, + "poetry2nix": { + "inputs": { + "flake-utils": "flake-utils_6", + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "devenv", + "cachix", + "devenv", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1692876271, + "narHash": "sha256-IXfZEkI0Mal5y1jr6IRWMqK8GW2/f28xJenZIPQqkY0=", + "owner": "nix-community", + "repo": "poetry2nix", + "rev": "d5006be9c2c2417dafb2e2e5034d83fabd207ee3", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "poetry2nix", + "type": "github" + } + }, + "poetry2nix_2": { + "flake": false, + "locked": { + "lastModified": 1666918719, + "narHash": "sha256-BkK42fjAku+2WgCOv2/1NrPa754eQPV7gPBmoKQBWlc=", + "owner": "nix-community", + "repo": "poetry2nix", + "rev": "289efb187123656a116b915206e66852f038720e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "1.36.0", + "repo": "poetry2nix", + "type": "github" + } + }, + "poetry2nix_3": { + "inputs": { + "flake-utils": "flake-utils_15", + "nix-github-actions": "nix-github-actions_2", + "nixpkgs": [ + "flake-parts-website", + "pydev", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1697447667, + "narHash": "sha256-myb6/cSc/1cZEYivqDhKNjYra8Qtp/MW/LGyD09lrDM=", + "owner": "nix-community", + "repo": "poetry2nix", + "rev": "fe0dcb4c9b44162a385f1170895fe6a392ed71b5", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "poetry2nix", + "type": "github" + } + }, + "pre-commit": { + "inputs": { + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils_2", + "gitignore": "gitignore", + "nixpkgs": "nixpkgs_2", + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1708018599, + "narHash": "sha256-M+Ng6+SePmA8g06CmUZWi1AjG2tFBX9WCXElBHEKnyM=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "5df5a70ad7575f6601d91f0efec95dd9bc619431", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": [ + "devenv", + "flake-compat" + ], + "flake-utils": "flake-utils_7", + "gitignore": "gitignore_2", + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_2" + }, + "locked": { + "lastModified": 1713775815, + "narHash": "sha256-Wu9cdYTnGQQwtT20QQMg7jzkANKQjwBD9iccfGKkfls=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "2ac4dcbf55ed43f3be0bae15e181f08a57af24a4", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks-nix": { + "inputs": { + "flake-compat": "flake-compat_12", + "flake-utils": "flake-utils_14", + "gitignore": "gitignore_4", + "nixpkgs": [ + "flake-parts-website", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_4" + }, + "locked": { + "lastModified": 1713954846, + "narHash": "sha256-RWFafuSb5nkWGu8dDbW7gVb8FOQOPqmX/9MlxUUDguw=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "6fb82e44254d6a0ece014ec423cb62d92435336f", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks-nix_2": { + "inputs": { + "flake-compat": [ + "lanzaboote", + "flake-compat" + ], + "flake-utils": [ + "lanzaboote", + "flake-utils" + ], + "gitignore": "gitignore_5", + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_5" + }, + "locked": { + "lastModified": 1710923068, + "narHash": "sha256-6hOpUiuxuwpXXc/xfJsBUJeqqgGI+JMJuLo45aG3cKc=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "e611897ddfdde3ed3eaac4758635d7177ff78673", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks-nix_3": { + "inputs": { + "flake-compat": "flake-compat_34", + "flake-utils": "flake-utils_54", + "gitignore": "gitignore_7", + "nixpkgs": "nixpkgs_49", + "nixpkgs-stable": "nixpkgs-stable_7" + }, + "locked": { + "lastModified": 1713954846, + "narHash": "sha256-RWFafuSb5nkWGu8dDbW7gVb8FOQOPqmX/9MlxUUDguw=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "6fb82e44254d6a0ece014ec423cb62d92435336f", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks_2": { + "inputs": { + "flake-compat": [ + "flake-parts-website", + "devenv", + "flake-compat" + ], + "flake-utils": "flake-utils_11", + "gitignore": "gitignore_3", + "nixpkgs": [ + "flake-parts-website", + "devenv", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_3" + }, + "locked": { + "lastModified": 1678376203, + "narHash": "sha256-3tyYGyC8h7fBwncLZy5nCUjTJPrHbmNwp47LlNLOHSM=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "1a20b9708962096ec2481eeb2ddca29ed747770a", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks_3": { + "inputs": { + "flake-compat": "flake-compat_32", + "flake-utils": "flake-utils_50", + "gitignore": "gitignore_6", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1713954846, + "narHash": "sha256-RWFafuSb5nkWGu8dDbW7gVb8FOQOPqmX/9MlxUUDguw=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "6fb82e44254d6a0ece014ec423cb62d92435336f", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks_4": { + "inputs": { + "flake-compat": "flake-compat_36", + "flake-utils": [ + "system-manager", + "flake-utils" + ], + "gitignore": "gitignore_8", + "nixpkgs": [ + "system-manager", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_9" + }, + "locked": { + "lastModified": 1712055707, + "narHash": "sha256-4XLvuSIDZJGS17xEwSrNuJLL7UjDYKGJSbK1WWX2AK8=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "e35aed5fda3cc79f88ed7f1795021e559582093a", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "proc-flake": { + "locked": { + "lastModified": 1713493374, + "narHash": "sha256-w2XKCa27RxCu32PKnResrKEcnOV/S6Qh1sWBWCUSjJ8=", + "owner": "srid", + "repo": "proc-flake", + "rev": "7bf695fad8caec98c122f1641ddca5e36477223f", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "proc-flake", + "type": "github" + } + }, + "proc-flake_2": { + "locked": { + "lastModified": 1713493374, + "narHash": "sha256-w2XKCa27RxCu32PKnResrKEcnOV/S6Qh1sWBWCUSjJ8=", + "owner": "srid", + "repo": "proc-flake", + "rev": "7bf695fad8caec98c122f1641ddca5e36477223f", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "proc-flake", + "type": "github" + } + }, + "process-compose-flake": { + "locked": { + "lastModified": 1671746418, + "narHash": "sha256-pcPALqEFSlAz+68SStQPoy9eT13dJ+tOe4OJbJCGToQ=", + "owner": "hercules-ci", + "repo": "process-compose-flake", + "rev": "2bd5ac6649dc124c7a51fcf3db97c43cb7683ed4", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "ref": "fix-docs", + "repo": "process-compose-flake", + "type": "github" + } + }, + "process-compose-flake_2": { + "locked": { + "lastModified": 1713920695, + "narHash": "sha256-pQIg3wrNBDdRiuhcVC8DFmTXK8GHtR+iV+5Gvsozx5s=", + "owner": "Platonic-Systems", + "repo": "process-compose-flake", + "rev": "ee8cd505f08f6cd691930e70987a306b7726851b", + "type": "github" + }, + "original": { + "owner": "Platonic-Systems", + "repo": "process-compose-flake", + "type": "github" + } + }, + "pruned-racket-catalog": { + "flake": false, + "locked": { + "lastModified": 1672537287, + "narHash": "sha256-SuOvXVcLfakw18oJB/PuRMyvGyGG1+CQD3R+TGHIv44=", + "owner": "nix-community", + "repo": "pruned-racket-catalog", + "rev": "c8b89557fb53b36efa2ee48a769c7364df0f6262", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "catalog", + "repo": "pruned-racket-catalog", + "type": "github" + } + }, + "purescript-overlay": { + "inputs": { + "nixpkgs": [ + "nix-cargo-integration", + "dream2nix", + "nixpkgs" + ], + "slimlock": "slimlock" + }, + "locked": { + "lastModified": 1696022621, + "narHash": "sha256-eMjFmsj2G1E0Q5XiibUNgFjTiSz0GxIeSSzzVdoN730=", + "owner": "thomashoneyman", + "repo": "purescript-overlay", + "rev": "047c7933abd6da8aa239904422e22d190ce55ead", + "type": "github" + }, + "original": { + "owner": "thomashoneyman", + "repo": "purescript-overlay", + "type": "github" + } + }, + "pydev": { + "inputs": { + "flake-parts": "flake-parts_18", + "nixpkgs": [ + "flake-parts-website", + "nixpkgs" + ], + "poetry2nix": "poetry2nix_3", + "pre-commit-hooks-nix": [ + "flake-parts-website", + "pre-commit-hooks-nix" + ] + }, + "locked": { + "lastModified": 1698527212, + "narHash": "sha256-THtAx/IYsoVoS69zYEaiEgBtH/dT29uhdTFsvEITxKc=", + "owner": "oceansprint", + "repo": "pydev", + "rev": "1675d2f63752b919152f6c23ba76dd70b4ebdfc7", + "type": "github" + }, + "original": { + "owner": "oceansprint", + "repo": "pydev", + "type": "github" + } + }, + "pyproject-nix": { + "flake": false, + "locked": { + "lastModified": 1702448246, + "narHash": "sha256-hFg5s/hoJFv7tDpiGvEvXP0UfFvFEDgTdyHIjDVHu1I=", + "owner": "davhau", + "repo": "pyproject.nix", + "rev": "5a06a2697b228c04dd2f35659b4b659ca74f7aeb", + "type": "github" + }, + "original": { + "owner": "davhau", + "ref": "dream2nix", + "repo": "pyproject.nix", + "type": "github" + } + }, + "quick-nix-registry": { + "inputs": { + "globalRegistry": "globalRegistry" + }, + "locked": { + "lastModified": 1627589359, + "narHash": "sha256-h0UhOgGtHwEcb2looQXIFPNmRwiFtXo4bEuBboPJzJo=", + "owner": "divnix", + "repo": "quick-nix-registry", + "rev": "9f1beb3e4de2e538b14ed8ddc71b706fd33b08dd", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "quick-nix-registry", + "type": "github" + } + }, + "rnix-parser": { + "inputs": { + "import-cargo": "import-cargo", + "nixpkgs": [ + "nixpkgs" + ], + "utils": "utils_3" + }, + "locked": { + "lastModified": 1668198192, + "narHash": "sha256-nFAyx0h47uZZTX1pUnmwjFkle3YqUolCGvHOl8ebrjI=", + "owner": "nix-community", + "repo": "rnix-parser", + "rev": "01e65829a56b772ad37881ab51680ff8fcd45de3", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "rnix-parser", + "type": "github" + } + }, + "root": { + "inputs": { + "agenix": "agenix", + "agenix-shell": "agenix-shell", + "arion": "arion", + "arkenfox": "arkenfox", + "colmena": "colmena", + "darwin": "darwin_2", + "debnix": "debnix", + "declarative-flatpak": "declarative-flatpak", + "devenv": "devenv", + "devshell": "devshell", + "disko": "disko", + "dns": "dns", + "emanote": "emanote", + "envfs": "envfs", + "ez-configs": "ez-configs", + "fast-flake-update": "fast-flake-update", + "fenix": "fenix", + "flake-check": "flake-check", + "flake-compat": "flake-compat_7", + "flake-devour": "flake-devour", + "flake-firefox-nightly": "flake-firefox-nightly", + "flake-parts": "flake-parts_9", + "flake-parts-website": "flake-parts-website", + "flake-root": "flake-root_6", + "flake-utils": "flake-utils_16", + "flake-utils-plus": "flake-utils-plus", + "fprint-clear": "fprint-clear", + "harmonia": "harmonia", + "hercules-ci-agent": "hercules-ci-agent", + "hercules-ci-effects": "hercules-ci-effects_3", + "hive": "hive", + "home": "home", + "home-extra-xhmm": "home-extra-xhmm", + "icicle": "icicle", + "impermanence": "impermanence", + "jsonresume-nix": "jsonresume-nix", + "kubenix": "kubenix", + "lanzaboote": "lanzaboote", + "microvm": "microvm", + "mobile-nixos": "mobile-nixos", + "multifirefox": "multifirefox", + "naersk": "naersk", + "namaka": "namaka_2", + "napalm": "napalm", + "neovim-nightly-overlay": "neovim-nightly-overlay", + "nix-alien": "nix-alien", + "nix-auto-changelog": "nix-auto-changelog", + "nix-cargo-integration": "nix-cargo-integration_2", + "nix-data": "nix-data", + "nix-fast-build": "nix-fast-build", + "nix-github-actions": "nix-github-actions_3", + "nix-health": "nix-health", + "nix-helm": "nix-helm", + "nix-index": "nix-index", + "nix-init": "nix-init", + "nix-installer": "nix-installer", + "nix-melt": "nix-melt", + "nix-portable": "nix-portable", + "nix-software-center": "nix-software-center", + "nix-stable-diffusion": "nix-stable-diffusion", + "nix-vscode-extensions": "nix-vscode-extensions", + "nixGL": "nixGL", + "nixago": "nixago_2", + "nixago-extensions": "nixago-extensions", + "nixdoc": "nixdoc", + "nixid": "nixid", + "nixified-ai": "nixified-ai", + "nixos": [ + "nixpkgs-unstable" + ], + "nixos-conf-editor": "nixos-conf-editor", + "nixos-generators": "nixos-generators", + "nixos-hardware": "nixos-hardware", + "nixos-images": "nixos-images", + "nixos-mobile": "nixos-mobile", + "nixos-stable": "nixos-stable", + "nixos-unstable": "nixos-unstable_2", + "nixpak": "nixpak", + "nixpkgs": [ + "nixpkgs-unstable" + ], + "nixpkgs-android": "nixpkgs-android", + "nixpkgs-darwin": "nixpkgs-darwin", + "nixpkgs-gnome-apps": "nixpkgs-gnome-apps", + "nixpkgs-gnome-mobile": "nixpkgs-gnome-mobile", + "nixpkgs-graph-explorer": "nixpkgs-graph-explorer", + "nixpkgs-master": "nixpkgs-master", + "nixpkgs-mozilla": "nixpkgs-mozilla", + "nixpkgs-stable": "nixpkgs-stable_6", + "nixpkgs-stable-staging": "nixpkgs-stable-staging", + "nixpkgs-stable-staging-next": "nixpkgs-stable-staging-next", + "nixpkgs-terraform-providers": "nixpkgs-terraform-providers", + "nixpkgs-unstable": "nixpkgs-unstable", + "nixpkgs-unstable-staging": "nixpkgs-unstable-staging", + "nixpkgs-unstable-staging-next": "nixpkgs-unstable-staging-next", + "nixpkgs-wayland": "nixpkgs-wayland", + "nixt": "nixt", + "nixvim": "nixvim", + "nmd": "nmd", + "nuenv": "nuenv_2", + "nur": "nur", + "nur-update": "nur-update", + "nurl": "nurl", + "nvfetcher": "nvfetcher", + "omnibus": "omnibus", + "patchelf": "patchelf", + "patsh": "patsh", + "pre-commit-hooks-nix": "pre-commit-hooks-nix_3", + "proc-flake": "proc-flake_2", + "process-compose-flake": "process-compose-flake_2", + "quick-nix-registry": "quick-nix-registry", + "rnix-parser": "rnix-parser", + "rust-overlay": "rust-overlay_8", + "scalpel": "scalpel", + "snow": "snow", + "snowflake": "snowflake", + "sops-nix": "sops-nix_2", + "srvos": "srvos", + "ssbm-nix": "ssbm-nix", + "stable": [ + "nixpkgs-stable" + ], + "std": "std_4", + "stylix": "stylix", + "system-manager": "system-manager", + "treefmt-nix": "treefmt-nix_12", + "unstable": [ + "nixpkgs-unstable" + ] + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1714150666, + "narHash": "sha256-S8AsTyJvT6Q3pRFeo8QepWF/husnJh61cOhRt18Xmyc=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "1ed7e2de05ee76f6ae83cc9c72eb0b33ad6903f2", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-analyzer-src_2": { + "flake": false, + "locked": { + "lastModified": 1711885694, + "narHash": "sha256-dyezzeSbWMpflma+E9USmvSxuLgGcNGcGw3cOnX36ko=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "e4a405f877efd820bef9c0e77a02494e47c17512", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-analyzer-src_3": { + "flake": false, + "locked": { + "lastModified": 1677221702, + "narHash": "sha256-1M+58rC4eTCWNmmX0hQVZP20t3tfYNunl9D/PrGUyGE=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "f5401f620699b26ed9d47a1d2e838143a18dbe3b", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-overlay": { + "inputs": { + "flake-utils": "flake-utils_5", + "nixpkgs": [ + "debnix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709604635, + "narHash": "sha256-le4fwmWmjGRYWwkho0Gr7mnnZndOOe4XGbLw68OvF40=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "e86c0fb5d3a22a5f30d7f64ecad88643fe26449d", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_2": { + "flake": false, + "locked": { + "lastModified": 1714097613, + "narHash": "sha256-044xbpBszupqN3nl/CGOCJtTQ4O6Aca81mJpX45i8/I=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "2a42c742ab04b61d9b2f1edf392842cf9f27ebfd", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_3": { + "inputs": { + "flake-utils": [ + "lanzaboote", + "flake-utils" + ], + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711246447, + "narHash": "sha256-g9TOluObcOEKewFo2fR4cn51Y/jSKhRRo4QZckHLop0=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "dcc802a6ec4e9cc6a1c8c393327f0c42666f22e4", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_4": { + "flake": false, + "locked": { + "lastModified": 1714097613, + "narHash": "sha256-044xbpBszupqN3nl/CGOCJtTQ4O6Aca81mJpX45i8/I=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "2a42c742ab04b61d9b2f1edf392842cf9f27ebfd", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_5": { + "inputs": { + "flake-utils": "flake-utils_26", + "nixpkgs": [ + "nix-health", + "nuenv", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1679970108, + "narHash": "sha256-8OfySbY1hhBzj0Iz90k4se6oFCGS3+ke31vkd0d4k/o=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "26ef1a2029239e204e51ab3402f8aae5aa1187ed", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_6": { + "inputs": { + "flake-utils": [ + "nixt", + "std", + "paisano-mdbook-preprocessor", + "crane", + "flake-utils" + ], + "nixpkgs": [ + "nixt", + "std", + "paisano-mdbook-preprocessor", + "crane", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1675391458, + "narHash": "sha256-ukDKZw922BnK5ohL9LhwtaDAdCsJL7L6ScNEyF1lO9w=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "383a4acfd11d778d5c2efcf28376cbd845eeaedf", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_7": { + "inputs": { + "flake-utils": "flake-utils_51", + "nixpkgs": [ + "nuenv", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1701397143, + "narHash": "sha256-nYUJxZXwCWWVBYZXPgRxGDuQcZRhKTtD/Jp5Jl+9EWU=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "bb71557c93cad40f5921b2342d7fd69f9e6497ab", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_8": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714097613, + "narHash": "sha256-044xbpBszupqN3nl/CGOCJtTQ4O6Aca81mJpX45i8/I=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "2a42c742ab04b61d9b2f1edf392842cf9f27ebfd", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_9": { + "inputs": { + "flake-utils": [ + "system-manager", + "flake-utils" + ], + "nixpkgs": [ + "system-manager", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712542394, + "narHash": "sha256-UZebDBECRSrJqw4K+LxZ6qFdYnScu6q1XCwqtsu1cas=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "ece8bdb3c3b58def25f204b9a1261dee55d7c9c0", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "scalpel": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "sops-nix": "sops-nix" + }, + "locked": { + "lastModified": 1655566736, + "narHash": "sha256-Vyolf8j7QcAHyVTQMqS8EGYZ/P6leJtiVNhYyIxoMRw=", + "owner": "polygon", + "repo": "scalpel", + "rev": "16c2103d613bb1c7adc6dbf2a17c2980ce08567f", + "type": "github" + }, + "original": { + "owner": "polygon", + "repo": "scalpel", + "type": "github" + } + }, + "slimlock": { + "inputs": { + "nixpkgs": [ + "nix-cargo-integration", + "dream2nix", + "purescript-overlay", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1688610262, + "narHash": "sha256-Wg0ViDotFWGWqKIQzyYCgayeH8s4U1OZcTiWTQYdAp4=", + "owner": "thomashoneyman", + "repo": "slimlock", + "rev": "b5c6cdcaf636ebbebd0a1f32520929394493f1a6", + "type": "github" + }, + "original": { + "owner": "thomashoneyman", + "repo": "slimlock", + "type": "github" + } + }, + "slippi-desktop": { + "flake": false, + "locked": { + "lastModified": 1711346593, + "narHash": "sha256-WWgGRT58w1a4UcEe924hqa4ZVodQtsbXC44aCOEj528=", + "owner": "project-slippi", + "repo": "slippi-desktop-app", + "rev": "02f3f007cd03c6e2b0da57db65c90646efc04a86", + "type": "github" + }, + "original": { + "owner": "project-slippi", + "repo": "slippi-desktop-app", + "type": "github" + } + }, + "snow": { + "inputs": { + "nixpkgs": "nixpkgs_51", + "utils": "utils_4" + }, + "locked": { + "lastModified": 1704745201, + "narHash": "sha256-CPS6G6ZxyP3HV/R4xxc6VB2vFuiTF7xy31ncE+6KILk=", + "owner": "snowflakelinux", + "repo": "snow", + "rev": "bb99e674ed04e4d1b27c2e60957579eef1cb5500", + "type": "github" + }, + "original": { + "owner": "snowflakelinux", + "repo": "snow", + "type": "github" + } + }, + "snowfall-lib": { + "inputs": { + "flake-compat": "flake-compat_13", + "flake-utils-plus": "flake-utils-plus_2", + "nixpkgs": [ + "icicle", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1696432959, + "narHash": "sha256-oJQZv2MYyJaVyVJY5IeevzqpGvMGKu5pZcCCJvb+xjc=", + "owner": "snowfallorg", + "repo": "lib", + "rev": "92803a029b5314d4436a8d9311d8707b71d9f0b6", + "type": "github" + }, + "original": { + "owner": "snowfallorg", + "repo": "lib", + "type": "github" + } + }, + "snowfall-lib_2": { + "inputs": { + "flake-compat": "flake-compat_18", + "flake-utils-plus": "flake-utils-plus_3", + "nixpkgs": [ + "nix-data", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1696432959, + "narHash": "sha256-oJQZv2MYyJaVyVJY5IeevzqpGvMGKu5pZcCCJvb+xjc=", + "owner": "snowfallorg", + "repo": "lib", + "rev": "92803a029b5314d4436a8d9311d8707b71d9f0b6", + "type": "github" + }, + "original": { + "owner": "snowfallorg", + "repo": "lib", + "type": "github" + } + }, + "snowfall-lib_3": { + "inputs": { + "flake-compat": "flake-compat_25", + "flake-utils-plus": "flake-utils-plus_4", + "nixpkgs": [ + "nixos-conf-editor", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1696432959, + "narHash": "sha256-oJQZv2MYyJaVyVJY5IeevzqpGvMGKu5pZcCCJvb+xjc=", + "owner": "snowfallorg", + "repo": "lib", + "rev": "92803a029b5314d4436a8d9311d8707b71d9f0b6", + "type": "github" + }, + "original": { + "owner": "snowfallorg", + "repo": "lib", + "type": "github" + } + }, + "snowflake": { + "inputs": { + "nixpkgs": "nixpkgs_52" + }, + "locked": { + "lastModified": 1674669719, + "narHash": "sha256-x3sFlFuWjHynInxXe4OTyes6dRYvmEAmp3viyzfCPQg=", + "owner": "snowflakelinux", + "repo": "snowflake-modules", + "rev": "239baddf62d28711a4900983305d9ba19b7f5c05", + "type": "github" + }, + "original": { + "owner": "snowflakelinux", + "repo": "snowflake-modules", + "type": "github" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": "nixpkgs_50", + "nixpkgs-21_11": "nixpkgs-21_11", + "nixpkgs-22_05": "nixpkgs-22_05" + }, + "locked": { + "lastModified": 1654401128, + "narHash": "sha256-uCdQ2fzIPGakHw2TkvOncUvCl7Fo7z/vagpDWYooO7s=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "f075361ecbde21535b38e41dfaa28a28f160855c", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "sops-nix_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_8" + }, + "locked": { + "lastModified": 1713892811, + "narHash": "sha256-uIGmA2xq41vVFETCF1WW4fFWFT2tqBln+aXnWrvjGRE=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "f1b0adc27265274e3b0c9b872a8f476a098679bd", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "spectrum": { + "flake": false, + "locked": { + "lastModified": 1708358594, + "narHash": "sha256-e71YOotu2FYA67HoC/voJDTFsiPpZNRwmiQb4f94OxQ=", + "ref": "refs/heads/main", + "rev": "6d0e73864d28794cdbd26ab7b37259ab0e1e044c", + "revCount": 614, + "type": "git", + "url": "https://spectrum-os.org/git/spectrum" + }, + "original": { + "type": "git", + "url": "https://spectrum-os.org/git/spectrum" + } + }, + "srvos": { + "inputs": { + "nixpkgs": "nixpkgs_53" + }, + "locked": { + "lastModified": 1714236664, + "narHash": "sha256-6mqPyGZxg7ClKHuqAPsHnhRLdIIG/Ozr9a8yoo7WTOk=", + "owner": "Lehmanator", + "repo": "srvos", + "rev": "fec92a93db2833074c15f6c3c7c002b697aeddd6", + "type": "github" + }, + "original": { + "owner": "Lehmanator", + "repo": "srvos", + "type": "github" + } + }, + "ssbm-nix": { + "inputs": { + "nixpkgs": "nixpkgs_54", + "slippi-desktop": "slippi-desktop" + }, + "locked": { + "lastModified": 1712071998, + "narHash": "sha256-k95NCkXJ61PGMFuqyMtfvP3yTLozED/7DkN+lBWK0gs=", + "owner": "lytedev", + "repo": "ssbm-nix", + "rev": "eff966a97287d1d86b189d59a14bf744d86836b0", + "type": "github" + }, + "original": { + "owner": "lytedev", + "repo": "ssbm-nix", + "type": "github" + } + }, + "stable": { + "locked": { + "lastModified": 1696039360, + "narHash": "sha256-g7nIUV4uq1TOVeVIDEZLb005suTWCUjSY0zYOlSBsyE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "32dcb45f66c0487e92db8303a798ebc548cadedc", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "stable-diffusion-repo": { + "flake": false, + "locked": { + "lastModified": 1669389446, + "narHash": "sha256-F0B6h/+Ji/E821KyylcLQb2e8W4LctByGMa88feADtU=", + "owner": "Stability-AI", + "repo": "stablediffusion", + "rev": "47b6b607fdd31875c9279cd2f4f16b92e4ea958e", + "type": "github" + }, + "original": { + "owner": "Stability-AI", + "repo": "stablediffusion", + "rev": "47b6b607fdd31875c9279cd2f4f16b92e4ea958e", + "type": "github" + } + }, + "std": { + "inputs": { + "arion": [ + "flake-parts-website", + "std", + "blank" + ], + "blank": "blank", + "devshell": [ + "flake-parts-website", + "std", + "blank" + ], + "dmerge": "dmerge", + "haumea": "haumea_2", + "incl": "incl", + "lib": "lib", + "makes": [ + "flake-parts-website", + "std", + "blank" + ], + "microvm": [ + "flake-parts-website", + "std", + "blank" + ], + "n2c": [ + "flake-parts-website", + "std", + "blank" + ], + "nixago": [ + "flake-parts-website", + "std", + "blank" + ], + "nixpkgs": "nixpkgs_17", + "paisano": "paisano", + "paisano-tui": "paisano-tui", + "terranix": [ + "flake-parts-website", + "std", + "blank" + ], + "yants": "yants" + }, + "locked": { + "lastModified": 1711791820, + "narHash": "sha256-MdosbJld9vlbgXJIitH/v5D2OF+SQdMKTj9B4bgAy9k=", + "owner": "divnix", + "repo": "std", + "rev": "37cbf2f9cadfdbf0a96d22881d8aa383d5bfdd67", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "std", + "type": "github" + } + }, + "std-data-collection": { + "inputs": { + "nixpkgs": [ + "nixt", + "nixpkgs" + ], + "std": [ + "nixt", + "std" + ] + }, + "locked": { + "lastModified": 1676163535, + "narHash": "sha256-xofkWLBqU4zj5vzJhWor2Z9CyPGKt7UGkTchsCT48Po=", + "owner": "divnix", + "repo": "std-data-collection", + "rev": "f713d81a6197e1b0854fb201cc7acde5ef9e93d4", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "std-data-collection", + "type": "github" + } + }, + "std_2": { + "inputs": { + "arion": [ + "hive", + "std", + "blank" + ], + "blank": "blank_2", + "devshell": [ + "hive", + "devshell" + ], + "dmerge": "dmerge_2", + "haumea": "haumea_3", + "incl": "incl_2", + "lib": "lib_2", + "makes": [ + "hive", + "std", + "blank" + ], + "microvm": [ + "hive", + "std", + "blank" + ], + "n2c": [ + "hive", + "std", + "blank" + ], + "nixago": [ + "hive", + "nixago" + ], + "nixpkgs": [ + "hive", + "nixpkgs" + ], + "paisano": "paisano_2", + "paisano-tui": "paisano-tui_2", + "terranix": [ + "hive", + "std", + "blank" + ], + "yants": "yants_2" + }, + "locked": { + "lastModified": 1694815542, + "narHash": "sha256-VxKm6oq3GeVIhrhrCBTGIomxqesWmjsDiOeYiKmrzrY=", + "owner": "divnix", + "repo": "std", + "rev": "0ce59ac671f041183da72e7cd5db9c6eb878e326", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "std", + "type": "github" + } + }, + "std_3": { + "inputs": { + "arion": [ + "nixt", + "std", + "blank" + ], + "blank": "blank_3", + "devshell": "devshell_8", + "dmerge": "dmerge_3", + "flake-utils": "flake-utils_47", + "incl": "incl_3", + "makes": [ + "nixt", + "std", + "blank" + ], + "microvm": [ + "nixt", + "std", + "blank" + ], + "n2c": "n2c", + "nixago": "nixago_7", + "nixpkgs": [ + "nixt", + "nixpkgs" + ], + "paisano": "paisano_3", + "paisano-mdbook-preprocessor": "paisano-mdbook-preprocessor", + "paisano-tui": "paisano-tui_3", + "yants": "yants_3" + }, + "locked": { + "lastModified": 1684180498, + "narHash": "sha256-kA58ms4yunOVPhe3r7V0IIKeWUV+vl4r2GTcfFfYW5o=", + "owner": "divnix", + "repo": "std", + "rev": "45b431ae09df98e046bcc8271aa209bdfc87444d", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "std", + "type": "github" + } + }, + "std_4": { + "inputs": { + "arion": [ + "std", + "blank" + ], + "blank": "blank_4", + "devshell": [ + "std", + "blank" + ], + "dmerge": "dmerge_5", + "haumea": "haumea_7", + "incl": "incl_4", + "lib": "lib_3", + "makes": [ + "std", + "blank" + ], + "microvm": [ + "std", + "blank" + ], + "n2c": [ + "std", + "blank" + ], + "nixago": [ + "std", + "blank" + ], + "nixpkgs": "nixpkgs_55", + "paisano": "paisano_4", + "paisano-tui": "paisano-tui_4", + "terranix": [ + "std", + "blank" + ], + "yants": "yants_5" + }, + "locked": { + "lastModified": 1711791820, + "narHash": "sha256-MdosbJld9vlbgXJIitH/v5D2OF+SQdMKTj9B4bgAy9k=", + "owner": "divnix", + "repo": "std", + "rev": "37cbf2f9cadfdbf0a96d22881d8aa383d5bfdd67", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "std", + "type": "github" + } + }, + "stylix": { + "inputs": { + "base16": "base16", + "base16-fish": "base16-fish", + "base16-foot": "base16-foot", + "base16-helix": "base16-helix", + "base16-kitty": "base16-kitty", + "base16-tmux": "base16-tmux", + "base16-vim": "base16-vim", + "flake-compat": "flake-compat_35", + "gnome-shell": "gnome-shell", + "home-manager": "home-manager_3", + "nixpkgs": "nixpkgs_56" + }, + "locked": { + "lastModified": 1713821140, + "narHash": "sha256-/kGc9R01h8mTmZKhrVyGWaK/w9zgettmHIE3GZW8Khs=", + "owner": "danth", + "repo": "stylix", + "rev": "0fe277a3641a849478a94c7900c2d5a90609a306", + "type": "github" + }, + "original": { + "owner": "danth", + "repo": "stylix", + "type": "github" + } + }, + "system-manager": { + "inputs": { + "crane": "crane_8", + "devshell": "devshell_10", + "flake-utils": [ + "flake-utils" + ], + "nixpkgs": "nixpkgs_57", + "pre-commit-hooks": "pre-commit-hooks_4", + "rust-overlay": "rust-overlay_9", + "treefmt-nix": "treefmt-nix_11" + }, + "locked": { + "lastModified": 1713859968, + "narHash": "sha256-epTXPjvlkBqG+vAMCe3LCsZ88FZ7lwsbl+UecmOfpLM=", + "owner": "numtide", + "repo": "system-manager", + "rev": "073f275b566b83be3183375337ee96f05f8dda33", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "system-manager", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_10": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_11": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_12": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_13": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_14": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_15": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_16": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_17": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_18": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_19": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_20": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_21": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "id": "systems", + "type": "indirect" + } + }, + "systems_22": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_23": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_24": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_25": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_26": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_27": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_28": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_29": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_30": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_31": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_32": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_33": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_34": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_35": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_36": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_37": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_38": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_39": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_40": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_41": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_42": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_43": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_6": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_7": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_8": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_9": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "textgen-src": { + "flake": false, + "locked": { + "lastModified": 1696789008, + "narHash": "sha256-+V8XOVnEyImj+a8uCkZXEHXW8bTIBRlnfMcQfcZNgqg=", + "owner": "oobabooga", + "repo": "text-generation-webui", + "rev": "2e471071af48e19867cfa522d2def44c24785c50", + "type": "github" + }, + "original": { + "owner": "oobabooga", + "ref": "v1.7", + "repo": "text-generation-webui", + "type": "github" + } + }, + "treefmt": { + "inputs": { + "nixpkgs": [ + "flake-parts-website", + "nix-cargo-integration", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714058656, + "narHash": "sha256-Qv4RBm4LKuO4fNOfx9wl40W2rBbv5u5m+whxRYUMiaA=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "c6aaf729f34a36c445618580a9f95a48f5e4e03f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "emanote", + "ema", + "emanote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1693468138, + "narHash": "sha256-DddblCahuTW8K0ncPOheTlG3igE8b15LJjafF1PWhOo=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "6930a5ba0a722385baf273885a03f561dcb1af67", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_10": { + "inputs": { + "nixpkgs": [ + "nixpkgs-wayland", + "nix-eval-jobs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711963903, + "narHash": "sha256-N3QDhoaX+paWXHbEXZapqd1r95mdshxToGowtjtYkGI=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49dc4a92b02b8e68798abd99184f228243b6e3ac", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_11": { + "inputs": { + "nixpkgs": [ + "system-manager", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711963903, + "narHash": "sha256-N3QDhoaX+paWXHbEXZapqd1r95mdshxToGowtjtYkGI=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49dc4a92b02b8e68798abd99184f228243b6e3ac", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_12": { + "inputs": { + "nixpkgs": "nixpkgs_58" + }, + "locked": { + "lastModified": 1714058656, + "narHash": "sha256-Qv4RBm4LKuO4fNOfx9wl40W2rBbv5u5m+whxRYUMiaA=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "c6aaf729f34a36c445618580a9f95a48f5e4e03f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_2": { + "inputs": { + "nixpkgs": [ + "emanote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711963903, + "narHash": "sha256-N3QDhoaX+paWXHbEXZapqd1r95mdshxToGowtjtYkGI=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49dc4a92b02b8e68798abd99184f228243b6e3ac", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_3": { + "inputs": { + "nixpkgs": [ + "envfs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1710781103, + "narHash": "sha256-nehQK/XTFxfa6rYKtbi8M1w+IU1v5twYhiyA4dg1vpg=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "7ee5aaac63c30d3c97a8c56efe89f3b2aa9ae564", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_4": { + "inputs": { + "nixpkgs": [ + "fast-flake-update", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711963903, + "narHash": "sha256-N3QDhoaX+paWXHbEXZapqd1r95mdshxToGowtjtYkGI=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49dc4a92b02b8e68798abd99184f228243b6e3ac", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_5": { + "inputs": { + "nixpkgs": [ + "flake-parts-website", + "emanote", + "ema", + "emanote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1693468138, + "narHash": "sha256-DddblCahuTW8K0ncPOheTlG3igE8b15LJjafF1PWhOo=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "6930a5ba0a722385baf273885a03f561dcb1af67", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_6": { + "inputs": { + "nixpkgs": [ + "flake-parts-website", + "emanote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711963903, + "narHash": "sha256-N3QDhoaX+paWXHbEXZapqd1r95mdshxToGowtjtYkGI=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49dc4a92b02b8e68798abd99184f228243b6e3ac", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_7": { + "inputs": { + "nixpkgs": "nixpkgs_18" + }, + "locked": { + "lastModified": 1714058656, + "narHash": "sha256-Qv4RBm4LKuO4fNOfx9wl40W2rBbv5u5m+whxRYUMiaA=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "c6aaf729f34a36c445618580a9f95a48f5e4e03f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_8": { + "inputs": { + "nixpkgs": [ + "harmonia", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711963903, + "narHash": "sha256-N3QDhoaX+paWXHbEXZapqd1r95mdshxToGowtjtYkGI=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49dc4a92b02b8e68798abd99184f228243b6e3ac", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_9": { + "inputs": { + "nixpkgs": [ + "nix-fast-build", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1698438538, + "narHash": "sha256-AWxaKTDL3MtxaVTVU5lYBvSnlspOS0Fjt8GxBgnU0Do=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "5deb8dc125a9f83b65ca86cf0c8167c46593e0b1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt_2": { + "inputs": { + "nixpkgs": [ + "kubenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1688026376, + "narHash": "sha256-qJmkr9BWDpqblk4E9/rCsAEl39y2n4Ycw6KRopvpUcY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "df3f32b0cc253dfc7009b7317e8f0e7ccd70b1cf", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt_3": { + "inputs": { + "nixpkgs": [ + "nix-cargo-integration", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714058656, + "narHash": "sha256-Qv4RBm4LKuO4fNOfx9wl40W2rBbv5u5m+whxRYUMiaA=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "c6aaf729f34a36c445618580a9f95a48f5e4e03f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "unionmount": { + "flake": false, + "locked": { + "lastModified": 1691619410, + "narHash": "sha256-V9/OcGu9cy4kV9jta12A6w5BEj8awSEVYrXPpg8YckQ=", + "owner": "srid", + "repo": "unionmount", + "rev": "ed73b627f88c8f021f41ba4b518ba41beff9df42", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "unionmount", + "type": "github" + } + }, + "unionmount_2": { + "flake": false, + "locked": { + "lastModified": 1710078535, + "narHash": "sha256-gKBgBtuiRTD3/3EeY8aMgFzuaSEffJacBxsCB3ct1eg=", + "owner": "srid", + "repo": "unionmount", + "rev": "41ae982fa118770bf4d3a3f2d48ac1ffb61c9f09", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "unionmount", + "type": "github" + } + }, + "unionmount_3": { + "flake": false, + "locked": { + "lastModified": 1691619410, + "narHash": "sha256-V9/OcGu9cy4kV9jta12A6w5BEj8awSEVYrXPpg8YckQ=", + "owner": "srid", + "repo": "unionmount", + "rev": "ed73b627f88c8f021f41ba4b518ba41beff9df42", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "unionmount", + "type": "github" + } + }, + "unionmount_4": { + "flake": false, + "locked": { + "lastModified": 1710078535, + "narHash": "sha256-gKBgBtuiRTD3/3EeY8aMgFzuaSEffJacBxsCB3ct1eg=", + "owner": "srid", + "repo": "unionmount", + "rev": "41ae982fa118770bf4d3a3f2d48ac1ffb61c9f09", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "unionmount", + "type": "github" + } + }, + "utils": { + "inputs": { + "systems": "systems_6" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "utils_2": { + "inputs": { + "systems": "systems_28" + }, + "locked": { + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "utils_3": { + "locked": { + "lastModified": 1656065134, + "narHash": "sha256-oc6E6ByIw3oJaIyc67maaFcnjYOz1mMcOtHxbEf9NwQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "bee6a7250dd1b01844a2de7e02e4df7d8a0a206c", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "utils_4": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "webui-repo": { + "flake": false, + "locked": { + "lastModified": 1679138564, + "narHash": "sha256-h7VGcH35Pd3TAVNpNB2scqZAp0NTi7swl+l43GhvcI0=", + "owner": "gbtb", + "repo": "stable-diffusion-webui", + "rev": "bc7e54010c9781ae2d5ceb230a1ab5bfc8ba2ffe", + "type": "github" + }, + "original": { + "owner": "gbtb", + "repo": "stable-diffusion-webui", + "type": "github" + } + }, + "yants": { + "inputs": { + "nixpkgs": [ + "flake-parts-website", + "std", + "lib" + ] + }, + "locked": { + "lastModified": 1686863218, + "narHash": "sha256-kooxYm3/3ornWtVBNHM3Zh020gACUyFX2G0VQXnB+mk=", + "owner": "divnix", + "repo": "yants", + "rev": "8f0da0dba57149676aa4817ec0c880fbde7a648d", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "yants", + "type": "github" + } + }, + "yants_2": { + "inputs": { + "nixpkgs": [ + "hive", + "std", + "lib" + ] + }, + "locked": { + "lastModified": 1686863218, + "narHash": "sha256-kooxYm3/3ornWtVBNHM3Zh020gACUyFX2G0VQXnB+mk=", + "owner": "divnix", + "repo": "yants", + "rev": "8f0da0dba57149676aa4817ec0c880fbde7a648d", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "yants", + "type": "github" + } + }, + "yants_3": { + "inputs": { + "nixpkgs": [ + "nixt", + "std", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1667096281, + "narHash": "sha256-wRRec6ze0gJHmGn6m57/zhz/Kdvp9HS4Nl5fkQ+uIuA=", + "owner": "divnix", + "repo": "yants", + "rev": "d18f356ec25cb94dc9c275870c3a7927a10f8c3c", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "yants", + "type": "github" + } + }, + "yants_4": { + "inputs": { + "nixpkgs": [ + "omnibus", + "flops", + "nixlib" + ] + }, + "locked": { + "lastModified": 1699522279, + "narHash": "sha256-ILTqQyhVsouZDfbhEVFJI6b3NDZIQQRluL2dk3bee+Y=", + "owner": "divnix", + "repo": "yants", + "rev": "cde27c2821d925245303650c2914d4b7d3a435cd", + "type": "github" + }, + "original": { + "owner": "divnix", + "ref": "refs/pull/5/head", + "repo": "yants", + "type": "github" + } + }, + "yants_5": { + "inputs": { + "nixpkgs": [ + "std", + "lib" + ] + }, + "locked": { + "lastModified": 1686863218, + "narHash": "sha256-kooxYm3/3ornWtVBNHM3Zh020gACUyFX2G0VQXnB+mk=", + "owner": "divnix", + "repo": "yants", + "rev": "8f0da0dba57149676aa4817ec0c880fbde7a648d", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "yants", "type": "github" } } diff --git a/flake.nix b/flake.nix index c530fa5f..28e7a5c9 100644 --- a/flake.nix +++ b/flake.nix @@ -1,51 +1,421 @@ { + description = "Personal Nix & NixOS configurations"; + outputs = { self, nixpkgs, nixos, home, nur, flake-parts, ... }@inputs: + flake-parts.lib.mkFlake { inherit inputs self; } { + imports = [ ./parts ]; + systems = [ "x86_64-linux" "aarch64-linux" "riscv64-linux" ]; + perSystem = { config, lib, pkgs, system, final, ... }: { + packages = { + inherit (inputs.disko.packages.${system}) disko disko-doc; + deploy = + nixpkgs.legacyPackages.${system}.writeText "cachix-deploy.json" + (builtins.toJSON { + agents = inputs.nixpkgs.lib.mapAttrs + (host: cfg: cfg.config.system.build.toplevel) + (inputs.nixpkgs.lib.filterAttrs + (host: cfg: + cfg ? config && cfg.config ? system && cfg.config.system + ? build && cfg.config.system.build ? toplevel + && cfg.pkgs.stdenv.buildPlatform.system == system + && cfg.config.services.cachix-agent.enable) + self.nixosConfigurations); + }); + }; + }; + flake = + let + mkSystem = + { host + , system ? "x86_64-linux" + , user ? "sam" + , # specialArgs ? {}, + modules ? [ ] + , ... + }@args: + (import ./lib/flake/lehmanatorSystem.nix { inherit inputs self; }) { + inherit system; + specialArgs = { + inherit inputs user; + # Instantiate all instances of nixpkgs in flake.nix to avoid creating new nixpkgs instances + # for every `import nixpkgs` call within submodules/subflakes. Saves time & RAM. + # - https://nixos-and-flakes.thiscute.world/nixos-with-flakes/downgrade-or-upgrade-packages + # - https://nixos-and-flakes.thiscute.world/nixpkgs/multiple-nixpkgs + pkgs-stable = import inputs.nixpkgs-stable { + inherit system; + config.allowUnfree = true; + }; + pkgs-unstable = import inputs.nixpkgs-unstable { + inherit system; + config.allowUnfree = true; + }; + pkgs-master = import inputs.nixpkgs-master { + inherit system; + config.allowUnfree = true; + }; + pkgs-staging = import inputs.nixpkgs-staging { + inherit system; + config.allowUnfree = true; + }; + pkgs-staging-next = import inputs.nixpkgs-staging-next { + inherit system; + config.allowUnfree = true; + }; + }; + modules = [ ./nixos/hosts/${host} ] ++ modules; + }; + in + { + overlays = import ./nixos/overlays; + nixosConfigurations = { + fw = mkSystem { host = "fw"; }; + wyse = mkSystem { host = "wyse"; }; + fajita = nixos.lib.nixosSystem { + system = "aarch64-linux"; + specialArgs = { + inherit inputs; + user = "sam"; + }; + modules = [ + { + _module.args = { + inherit inputs; + user = "sam"; + }; + } + (import "${inputs.mobile-nixos}/lib/configuration.nix" { + device = "oneplus-fajita"; + }) + ./nixos/hosts/fajita + inputs.nixpkgs-gnome-mobile.nixosModules.gnome-mobile + ]; + }; + fajita-minimal = nixos.lib.nixosSystem { + system = "aarch64-linux"; + specialArgs = { + inherit inputs; + user = "sam"; + }; + modules = [ + { + _module.args = { + inherit inputs; + user = "sam"; + }; + } + (import "${inputs.mobile-nixos}/lib/configuration.nix" { + device = "oneplus-fajita"; + }) + ./nixos/hosts/fajita/minimal.nix + inputs.nixpkgs-gnome-mobile.nixosModules.gnome-mobile + ]; + }; + }; + #homeConfigurations = { + # sam = inputs.home.lib.homeManagerConfiguration { + # #pkgs = nixpkgs.legacyPackages.x86_64-linux; + # modules = [ ./hm/users/sam ]; + # extraSpecialArgs = { inherit inputs; user = "sam"; }; + # }; + # guest = inputs.home.lib.homeManagerConfiguration { + # pkgs = nixpkgs.legacyPackages.x86_64-linux; + # #modules = [./hm/users/default]; + # extraSpecialArgs = { inherit inputs; user = "guest"; }; + # }; + #}; + }; + }; + nixConfig = { connect-timeout = 10; + substituters = [ + "https://cache.nixos.org/" + "https://nix-community.cachix.org/" + "https://lehmanator.cachix.org/" + ]; + trusted-public-keys = [ + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + "lehmanator.cachix.org-1:kT+TO3tnSoz+lxk2YZSsMOtVRZ7Gc57jaKWL57ox1wU=" + ]; }; + inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + # --- Main ------------------------------------------------------- + nixpkgs.follows = "nixpkgs-unstable"; + nixos.follows = "nixpkgs-unstable"; + stable.follows = "nixpkgs-stable"; + unstable.follows = "nixpkgs-unstable"; + # --- All -------------------------------------------------------- + # https://discourse.nixos.org/t/differences-between-nix-channels/13998 + nixpkgs-stable.url = "github:NixOS/nixpkgs/release-23.11"; + nixpkgs-stable-staging.url = "github:NixOS/nixpkgs/staging-23.11"; + nixpkgs-stable-staging-next.url = "github:NixOS/nixpkgs/staging-next-23.11"; + nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + nixpkgs-unstable-staging.url = "github:NixOS/nixpkgs/staging"; + nixpkgs-unstable-staging-next.url = "github:NixOS/nixpkgs/staging-next"; + nixpkgs-master.url = "github:NixOS/nixpkgs/master"; + nixpkgs-darwin.url = "github:NixOS/nixpkgs/nixpkgs-23.11-darwin"; + # --- NixOS ------------------------------------------------------ + nixos.url = "github:NixOS/nixpkgs/nixos-unstable"; # /gnome"; + nixos-stable.url = "github:NixOS/nixpkgs/nixos-23.11"; + nixos-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; + home.url = "github:nix-community/home-manager"; + home.inputs.nixpkgs.follows = "nixpkgs"; + home-extra-xhmm.url = "github:schuelermine/xhmm"; + system-manager.url = "github:numtide/system-manager"; + system-manager.inputs.flake-utils.follows = "flake-utils"; + darwin.url = "github:lnl7/nix-darwin"; + darwin.inputs.nixpkgs.follows = "nixpkgs"; + # --- SnowflakeOS ------------------------------------------------ snowflake.url = "github:snowflakelinux/snowflake-modules"; - snowflake.inputs.nixpkgs.follows = "nixpkgs"; + snow.url = "github:snowflakelinux/snow"; nix-data.url = "github:snowflakelinux/nix-data"; + # --- Image Builders: Nix ---------------------------------------- + nixos-generators.url = "github:nix-community/nixos-generators"; + nixos-generators.inputs.nixpkgs.follows = "nixpkgs"; + # --- Image Builders: Non-Nix ------------------------------------ + # --- Mobile ----------------------------------------------------- + nixpkgs-gnome-mobile.url = "github:lehmanator/nixpkgs-gnome-mobile/develop"; + nixos-mobile = { + url = "github:vlinkz/mobile-nixos/gnomelatest"; + flake = false; + }; # url = "github:NixOS/mobile-nixos"; + mobile-nixos = { + url = "github:lehmanator/mobile-nixos/update-firmware"; + flake = false; + }; + #mobile-nixos = { url = "github:NixOS/mobile-nixos/development"; flake = false; }; + # --- Extra Package Sets --------------------------------------- + #nixpkgs-gnome.url = "github:NixOS/nixpkgs/gnome"; + nixpkgs-gnome-apps.url = "github:chuangzhu/nixpkgs-gnome-apps"; + nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland"; + nixpkgs-android.url = "github:tadfisher/android-nixpkgs"; + nixpkgs-mozilla.url = "github:mozilla/nixpkgs-mozilla"; + flake-firefox-nightly.url = "github:nix-community/flake-firefox-nightly"; + nixGL.url = "github:guibou/nixGL"; + nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions"; + neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay"; + nur.url = "github:nix-community/NUR"; + nix-stable-diffusion.url = "github:gbtb/nix-stable-diffusion"; + nix-stable-diffusion.inputs.nixpkgs.follows = "nixpkgs"; + nixified-ai.url = "github:nixified-ai/flake"; + nixified-ai.inputs.nixpkgs.follows = "nixpkgs"; + nixpkgs-terraform-providers.url = + "github:nix-community/nixpkgs-terraform-providers-bin"; + nixpkgs-terraform-providers.inputs.nixpkgs.follows = "nixpkgs"; + fenix.url = "github:nix-community/fenix"; + fenix.inputs.nixpkgs.follows = "nixpkgs"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-utils.follows = "flake-utils"; + }; + # --- Libs: Organization --------------------------------------- + std.url = "github:divnix/std"; + hive.url = "github:divnix/hive"; + omnibus.url = "github:GTrunSec/omnibus"; + + # --- Libs: Packaging ------------------------------------------ + nixpak.url = "github:nixpak/nixpak"; + nixpak.inputs.nixpkgs.follows = "nixpkgs"; + # --- Libs: Flakes --------------------------------------------- + flake-utils.url = "github:numtide/flake-utils"; + flake-utils-plus.url = "github:gytis-ivaskevicius/flake-utils-plus"; + flake-utils-plus.inputs.flake-utils.follows = "flake-utils"; + flake-check.url = + "github:srid/check-flake"; # check-flake: Adds a #check package for building all checks for the current system + flake-compat = { + url = "github:edolstra/flake-compat"; + flake = false; + }; + flake-devour = { + url = "github:srid/devour-flake"; + flake = false; + }; # devour-flake: Executable to devour flake and spit out out paths + + # --- Libs: Misc ----------------------------------------------- + # https://github.com/juspay/cachix-push + dns.url = "github:kirelagin/dns.nix"; + dns.inputs.nixpkgs.follows = "nixpkgs"; # (optionally) }; + nix-github-actions.url = "github:nix-community/nix-github-actions"; + nix-github-actions.inputs.nixpkgs.follows = "nixpkgs"; + + # --- Modules: Flake-parts ------------------------------------- + flake-parts.url = "github:hercules-ci/flake-parts"; + agenix-shell.url = "github:aciceri/agenix-shell"; + emanote.url = "github:srid/emanote"; + ez-configs.url = "github:ehllie/ez-configs"; + flake-parts-website.url = "github:hercules-ci/flake.parts-website"; + + # https://github.com/srid/nixos-flake + flake-root.url = "github:srid/flake-root"; + nixid.url = "github:srid/nixid"; + treefmt-nix.url = "github:numtide/treefmt-nix"; + #treefmt-nix.inputs.nixpkgs.follows = "nixpkgs"; + devshell.url = "github:numtide/devshell"; + #devshell.inputs.nixpkgs.follows = "nixpkgs"; + devenv.url = "github:cachix/devenv"; + hercules-ci-effects.url = "github:hercules-ci/hercules-ci-effects"; + nix-cargo-integration.url = "github:yusdacra/nix-cargo-integration"; + pre-commit-hooks-nix.url = "github:cachix/pre-commit-hooks.nix"; + process-compose-flake.url = "github:Platonic-Systems/process-compose-flake"; + proc-flake.url = "github:srid/proc-flake"; + + # --- Modules: System ------------------------------------------ + nixos-hardware.url = "github:NixOS/nixos-hardware"; + fprint-clear.url = "github:nixvital/fprint-clear"; + #srvos.url = "github:nix-community/srvos"; + srvos.url = "github:Lehmanator/srvos"; + # --- Modules: Filesystems ------------------------------------- + impermanence.url = "github:nix-community/impermanence"; + disko.url = "github:nix-community/disko"; + disko.inputs.nixpkgs.follows = "nixpkgs"; + envfs.url = "github:Mic92/envfs"; + envfs.inputs.nixpkgs.follows = "nixpkgs"; + # --- Modules: Containers -------------------------------------- + nix-helm.url = "github:gytis-ivaskevicius/nix-helm"; + nix-helm.inputs.nixpkgs.follows = "nixpkgs"; + arion.url = "github:hercules-ci/arion"; + arion.inputs.nixpkgs.follows = "nixpkgs"; + # --- Modules: Secrets ----------------------------------------- + agenix.url = "github:ryantm/agenix"; + agenix.inputs.nixpkgs.follows = "nixpkgs"; + sops-nix.url = "github:Mic92/sops-nix"; + sops-nix.inputs.nixpkgs.follows = "nixpkgs"; + scalpel.url = "github:polygon/scalpel"; + scalpel.inputs.nixpkgs.follows = "nixpkgs"; + # --- Modules: Servers ----------------------------------------- + hercules-ci-agent.url = "github:hercules-ci/hercules-ci-agent"; + # --- Modules: Configuration ----------------------------------- + stylix.url = "github:danth/stylix"; + arkenfox.url = "github:dwarfmaster/arkenfox-nixos"; + arkenfox.inputs.nixpkgs.follows = "nixpkgs"; + nixvim.url = "github:nix-community/nixvim"; + nixvim.inputs.nixpkgs.follows = "nixpkgs-unstable-staging"; + declarative-flatpak.url = "github:GermanBread/declarative-flatpak"; + declarative-flatpak.inputs.nixpkgs.follows = "nixpkgs"; + lanzaboote.url = "github:nix-community/lanzaboote"; + lanzaboote.inputs.nixpkgs.follows = "nixpkgs"; + ssbm-nix.url = + "github:lytedev/ssbm-nix"; # Fork of: "github:djanatyn/ssbm-nix"; + # --- Packages: Pre-built Images ------------------------------- + nixos-images.url = "github:nix-community/nixos-images"; + # --- Packages: Package Management ------------------------------ + nur-update.url = "github:nix-community/nur-update"; # nur-update: Update NUR + quick-nix-registry.url = "github:divnix/quick-nix-registry"; + nixpkgs-graph-explorer.url = + "github:tweag/nixpkgs-graph-explorer"; # nixpkgs-graph-explorer: CLI to explore nixpkgs graph + debnix.url = "github:ngi-nix/debnix"; + nurl = { + url = "github:nix-community/nurl"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nix-init = { + url = "github:nix-community/nix-init"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nix-melt = { + url = "github:nix-community/nix-melt"; + inputs.nixpkgs.follows = "nixpkgs"; + }; # TODO: Install package + nvfetcher = { + url = "github:berberman/nvfetcher"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + patsh = { + url = "github:nix-community/patsh"; + inputs.nixpkgs.follows = "nixpkgs"; + }; # TODO: Install pkg + patchelf = { + url = "github:NixOS/patchelf"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nix-portable = { + url = "github:DavHau/nix-portable"; + inputs.nixpkgs.follows = "nixpkgs"; + }; # TODO: Install pkg + nixdoc = { + url = "github:nix-community/nixdoc"; + inputs.nixpkgs.follows = "nixpkgs"; + }; # TODO: Install pkg + nix-index = { + url = "github:nix-community/nix-index-database"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nix-fast-build = { + url = "github:Mic92/nix-fast-build"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + namaka = { + url = "github:nix-community/namaka"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nixago = { + url = "github:nix-community/nixago"; + inputs.nixpkgs.follows = "nixpkgs"; + }; # TODO: Collect lib + nixago-extensions = { + url = "github:nix-community/nixago-extensions"; + inputs.nixpkgs.follows = "nixpkgs"; + }; # TODO: Collect lib + # --- Packages: Nix -------------------------------------------- + # --- Nix Utils ------------------------------------------------ + nix-health.url = + "github:srid/nix-health"; # nix-health: Show health of your Nix system + kubenix.url = "github:hall/kubenix"; + fast-flake-update.url = + "github:Mic92/fast-flake-update"; # Util to update `flake.lock` faster than `nix flake update` + harmonia = { + url = "github:nix-community/harmonia"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nixt = { + url = "github:nix-community/nixt"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nix-alien = { + url = "github:thiagokokada/nix-alien"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nix-auto-changelog = { + url = "github:loophp/nix-auto-changelog"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nuenv = { + url = "github:DeterminateSystems/nuenv"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + rnix-parser = { + url = "github:nix-community/rnix-parser"; + inputs.nixpkgs.follows = "nixpkgs"; + }; # TODO: Install pkg + napalm = { + url = "github:nix-community/napalm"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + naersk = { + url = "github:nix-community/naersk"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nix-installer = { + url = "github:DeterminateSystems/nix-installer"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + # --- Builders ------------------------------------------------- + jsonresume-nix = { + url = "github:TaserudConsulting/jsonresume-nix"; + inputs.flake-utils.follows = "flake-utils"; + }; + # --- DevShells ------------------------------------------------ + nmd.url = "github:gvolpe/nmd"; + microvm.url = "github:astro/microvm.nix"; + microvm.inputs.nixpkgs.follows = "nixpkgs"; + colmena.url = "github:zhaofengli/colmena"; + colmena.inputs.nixpkgs.follows = "nixpkgs"; + # --- Packages: Individual Packages ---------------------------- nix-software-center.url = "github:vlinkz/nix-software-center"; nixos-conf-editor.url = "github:vlinkz/nixos-conf-editor"; - snow.url = "github:snowflakelinux/snow"; icicle.url = "github:snowflakelinux/icicle"; - nixos-hardware.url = "github:NixOS/nixos-hardware"; - home.url = "github:nix-community/home-manager"; - home.inputs.nixpkgs.follows = "nixpkgs"; - nur.url = github:nix-community/NUR; - }; - outputs = { self, nixpkgs, ... }@inputs: - let - system = "x86_64-linux"; - in - { - nixosConfigurations."fw" = nixpkgs.lib.nixosSystem { - inherit system; - modules = [ - ./configuration.nix - ./snowflake.nix - inputs.snowflake.nixosModules.snowflake - inputs.nix-data.nixosModules.${system}.nix-data - inputs.nixos-hardware.nixosModules.framework-12th-gen-intel - inputs.nur.nixosModules.nur - inputs.home.nixosModules.home-manager { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { - inherit self; - inherit inputs; - inherit system; - }; - home-manager.users.sam = import ./users/sam; - } - ]; - specialArgs = { - inherit self; - inherit inputs; - inherit system; - }; - }; + multifirefox.url = "git+https://codeberg.org/wolfangaukang/multifirefox"; }; } diff --git a/hardware-configuration.nix b/hardware-configuration.nix deleted file mode 100644 index 64f02f76..00000000 --- a/hardware-configuration.nix +++ /dev/null @@ -1,51 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: - -{ - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; - - boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/d1f565b9-ff81-430d-a963-01556f876f68"; - fsType = "ext4"; - }; - - fileSystems."/boot/efi" = - { device = "/dev/disk/by-uuid/6674-832F"; - fsType = "vfat"; - }; - - swapDevices = [ - #{ device = "/dev/nvme0n1p3"; } - ]; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp0s13f0u2c2.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp166s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; - - # High-resolution display - #hardware.video.hidpi.enable = lib.mkDefault true; # Deprecated - - # Bluetooth - hardware.bluetooth.enable = true; - hardware.bluetooth.powerOnBoot = true; - - # Sensors - hardware.sensor.iio.enable = true; -} diff --git a/hive.nix b/hive.nix new file mode 100644 index 00000000..88d46552 --- /dev/null +++ b/hive.nix @@ -0,0 +1,181 @@ +{ + outputs = { self, std, hive, nixpkgs, nixos, home, nur, ... } @ inputs: hive.growOn + { + inherit inputs; + nixpkgsConfig = { + allowUnfree = true; + }; + cellsFrom = ./cells; + cellBlocks = with std.blockTypes; with hive.blockTypes; [ + # modules implement + (functions "nixosModules") + (functions "homeModules") + (functions "devshellModules") + # profiles activate + (functions "hardwareProfiles") + (functions "nixosProfiles") + (functions "homeProfiles") + (functions "devshellProfiles") + (functions "diskoProfiles") + (functions "nixvimProfiles") + # suites aggregate profiles + (functions "nixosSuites") + (functions "homeSuites") + # configurations can be deployed + nixosConfigurations + colmenaConfigurations + homeConfigurations + diskoConfigurations + hardwareConfigurations + # devshells can be entered + (devshells "shells") + # installables + packages + (functions "overlays") + # Libs + (functions "libs") + ]; + } + { + # soil + devShells = std.harvest self [ "repo" "shells" ]; + overlays = std.harvest self [ "repo" "overlays" ]; + packages = std.harvest self [ "repo" "packages" ]; + lib = std.harvest self [ "repo" "libs" ]; + } + { + colmenaHive = hive.collect self "colmenaConfigurations"; + nixosConfigurations = hive.collect self "nixosConfigurations"; + homeConfigurations = hive.collect self "homeConfigurations"; + diskoConfigurations = hive.collect self "diskoConfigurations"; + hardwareConfigurations = hive.collect self "hardwareConfigurations"; + }; + + inputs = { + std.url = "github:divnix/std"; + std.inputs.devshell.follows = "devshell"; + std.inputs.nixago.follows = "nixago"; + std.inputs.nixpkgs.follows = "nixpkgs"; + + hive.url = "github:divnix/hive"; + hive.inputs.colmena.follows = "colmena"; + hive.inputs.disko.follows = "disko"; + hive.inputs.nixos-generators.follows = "nixos-generators"; + hive.inputs.nixpkgs.follows = "nixpkgs"; + + #colmena.url = "github:blaggacao/colmena/fix-1000-nixpkgs"; + colmena.url = "github:zhaofengli/colmena"; + colmena.inputs.nixpkgs.follows = "nixpkgs"; + colmena.inputs.stable.follows = "std/blank"; + + devshell.url = "github:numtide/devshell"; + devshell.inputs.nixpkgs.follows = "nixpkgs"; + + disko.url = "github:nix-community/disko"; + disko.inputs.nixpkgs.follows = "nixpkgs"; + + nixago.url = "github:nix-community/nixago"; + nixago.inputs.nixpkgs.follows = "nixpkgs"; + nixago.inputs.nixago-exts.follows = ""; + + nixos-generators.url = "github:nix-community/nixos-generators"; + nixos-generators.inputs.nixpkgs.follows = "nixpkgs"; + nixos-generators.inputs.nixlib.follows = "nixpkgs"; + + home.follows = "home-unstable"; + home-unstable.url = "github:nix-community/home-manager"; + home-23-05.url = "github:nix-community/home-manager/release-23.05"; + + nixos.follows = "nixos-unstable"; + nixos-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; + nixos-23-05.url = "github:NixOS/nixpkgs/release-23.05"; + + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + nixgl.url = "github:guibou/nixGL"; + nixgl.inputs.nixpkgs.follows = "nixpkgs"; + qnr.url = "github:divnix/quick-nix-registry"; + + # --- Main ----------------------------------------------------- + # https://discourse.nixos.org/t/differences-between-nix-channels/13998 + nixpkgs-stable.url = "github:NixOS/nixpkgs/release-23.05"; + nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + nixpkgs-staging.url = "github:NixOS/nixpkgs/staging"; + nixpkgs-staging-next.url = "github:NixOS/nixpkgs/staging-next"; + nixpkgs-master.url = "github:NixOS/nixpkgs/master"; + nixos-stable.url = "github:NixOS/nixpkgs/nixos-23.05"; + #nixos.url = "github:NixOS/nixpkgs/nixos-unstable"; + #nixos-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; + + impermanence.url = "github:nix-community/impermanence"; + agenix.url = "github:ryantm/agenix"; + agenix.inputs.nixpkgs.follows = "nixpkgs"; + sops-nix.url = "github:Mic92/sops-nix"; + sops-nix.inputs.nixpkgs.follows = "nixpkgs"; + lanzaboote.url = "github:nix-community/lanzaboote"; + lanzaboote.inputs.nixpkgs.follows = "nixpkgs"; + + nixos-hardware.url = "github:NixOS/nixos-hardware"; + + # --- Image Builders: Nix -------------------------------------- + flake-firefox-nightly.url = "github:nix-community/flake-firefox-nightly"; + neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay"; + nur.url = "github:nix-community/NUR"; + fenix.url = "github:nix-community/fenix"; + fenix.inputs.nixpkgs.follows = "nixpkgs"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.flake-utils.follows = "flake-utils"; + }; + + # --- Libs: Flakes --------------------------------------------- + flake-utils.url = "github:numtide/flake-utils"; + flake-utils-plus.url = "github:gytis-ivaskevicius/flake-utils-plus"; + flake-parts.url = "github:hercules-ci/flake-parts"; + flake-check.url = "github:srid/check-flake"; # check-flake: Adds a #check package for building all checks for the current system + flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; + flake-devour = { url = "github:srid/devour-flake"; flake = false; }; # devour-flake: Executable to devour flake and spit out out paths + + # --- Modules: System ------------------------------------------ + fprint-clear.url = "github:nixvital/fprint-clear"; + nixos-mobile = { url = "github:vlinkz/mobile-nixos/gnomelatest"; flake = false; }; #url = "github:NixOS/mobile-nixos"; + + # --- Modules: Filesystems ------------------------------------- + envfs.url = "github:Mic92/envfs"; + envfs.inputs.nixpkgs.follows = "nixpkgs"; + + # --- Modules: Containers -------------------------------------- + nixvim.url = "github:nix-community/nixvim"; + nixvim.inputs.nixpkgs.follows = "nixpkgs"; + + nixos-flatpak.url = "github:GermanBread/declarative-flatpak"; + nixos-flatpak.inputs.nixpkgs.follows = "nixpkgs"; + nixpak.url = "github:nixpak/nixpak"; + nixpak.inputs.nixpkgs.follows = "nixpkgs"; + + # --- Modules: Home-Manager ------------------------------------ + ssbm-nix.url = "github:djanatyn/ssbm-nix"; + + # --- Packages: Pre-built Images ------------------------------- + nixos-images.url = "github:nix-community/nixos-images"; + microvm.url = "github:astro/microvm.nix"; + microvm.inputs.nixpkgs.follows = "nixpkgs"; + }; + + nixConfig = { + connect-timeout = 10; + extra-substituters = [ + #"https://cache.nixos.org/" + "https://nix-community.cachix.org/" + "https://numtide.cachix.org/" + ]; + extra-trusted-public-keys = [ + #"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + "numtide.cachix.org-1:2ps1kLBUWjxIneOy1Ik6cQjb41X0iXVXeHigGmycPPE=" + ]; + }; + +} + diff --git a/hm/modules/adw-colors.nix b/hm/modules/adw-colors.nix new file mode 100644 index 00000000..33801b2a --- /dev/null +++ b/hm/modules/adw-colors.nix @@ -0,0 +1,121 @@ +{ + config, + lib, + pkgs, + osConfig, + inputs, + ... +}: let + cfg = config.adwaita; # adw-colors; + + gnome-extension-setting = ext: "gsettings set org.gnome.shell.extensions.${ext}"; + gext-cmd = "${pkgs.dconf}/bin/dconf write /org/gnome/shell/extensions"; + + setGsetting = path: option: value: {}; +in { + imports = [ + inputs.declarative-flatpak.nixosModules.homeManagerModules.declarative-flatpak + ]; + options = { + enable = lib.mkEnableOption "Custom adwaita theming"; + auto-switcher.enable = + lib.mkEnableOption "GNOME Shell Extension: Night Theme Switcher"; + adw-gtk3 = { + enable = lib.mkEnableOption "adw-gtk3"; + enableFlatpak = lib.mkEnableOption "adw-gtk3 flatpak"; + }; + adw-colors = { + enable = lib.mkEnableOption "adw-colors"; + colorscheme = { + # Colorschemes: + # - Dark: Peninsula-dark, Plano-dark, SurGubbe, adw-hc-dark + # - Light: adw-hc-light, + # - Both: adw-traffic + dark = lib.mkOption { + description = "Colorscheme for adw-colors for dark mode"; + type = lib.types.nullOr lib.types.str; + default = null; + example = "solarized-dark"; + }; + light = lib.mkOption { + description = "Colorscheme for adw-colors for dark mode"; + type = lib.types.nullOr lib.types.str; + default = null; + example = "solarized"; + }; + # TODO: customDark = {}; # GTK named colors + # TODO: customLight = {}; # GTK named colors + }; + }; + programs = { + discord.enable = lib.mkEnableOption "Discord Adwaita theme"; + firefox.enable = lib.mkEnableOption "Firefox"; + kvantum.enable = lib.mkEnableOption "Kvantum"; + obsidian.enable = lib.mkEnableOption "Obsidian Notes"; + steam.enable = lib.mkEnableOption "Steam"; + thunderbird.enable = lib.mkEnableOption "Thunderbird"; + vscodium.enable = lib.mkEnableOption "VSCodium"; + xfwm4.enable = lib.mkEnableOption "XFWM4"; + }; + }; + config = lib.mkIf cfg.enable { + home = { + packages = + [pkgs.papirus-folders pkgs.gnomeExtensions.custom-accent-colors] + ++ lib.optionals cfg.auto-switcher + [pkgs.gnomeExtensions.night-theme-switcher] + ++ lib.optionals cfg.adw-gtk3.enable [pkgs.adw-gtk3] + ++ lib.optionals (cfg.adw-gtk3.enable && cfg.adw-colors.enable) [ + (pkgs.callPackage ../pkgs/adw-colors.nix {}) + pkgs.sass # pkgs.dart-sass #pkgs.sassc #pkgs.nodePackages_latest.sass #pkgs.rsass #pkgs.grass-sass + ]; + activation = { + switcher = lib.mkIf cfg.auto-switcher '' + ${gext-cmd}/nightthemeswitcher/shell-variants enabled true + ${gext-cmd}/nightthemeswitcher/shell-variants night "'Default'" + ${gext-cmd}/nightthemeswitcher/shell-variants day "'Custom-Accent-Colors'" + + ${gext-cmd}/nightthemeswitcher/gtk-variants enabled "true" + ${gext-cmd}/nightthemeswitcher/gtk-variants day "'adw-gtk3'" + ${gext-cmd}/nightthemeswitcher/gtk-variants night "'adw-gtk3-dark'" + + ${gext-cmd}/nightthemeswitcher/cursor-variants enabled "true" + ${gext-cmd}/nightthemeswitcher/cursor-variants day "'Simp1e-Adw-Dark'" + ${gext-cmd}/nightthemeswitcher/cursor-variants night "'Simp1e-Adw'" + ''; + flatpak-install-gtk-themes = + lib.mkIf + #cfg.adw-gtk3.enableFlatpak + osConfig.services.flatpak.enable '' + flatpak --user install org.gtk.Gtk3theme.adw-gtk3 org.gtk.Gtk3theme.adw-gtk3-dark + flatpak --user override --filesystem=xdg-config/gtk4.0:ro + flatpak --user override --filesystem=xdg-config/gtk3.0:ro + flatpak --system install org.gtk.Gtk3theme.adw-gtk3 org.gtk.Gtk3theme.adw-gtk3-dark + flatpak --system override --filesystem=xdg-config/gtk4.0:ro + flatpak --system override --filesystem=xdg-config/gtk3.0:ro + ''; + }; + }; + #gtk.gtk3.extraCss = '' + # @import url("${pkgs.adw-colors}/themes/${cfg.colorscheme.light}/gtk.css") + #''; + + xdg.configFile = { + #"qt5ct/qt5ct.conf".text = ""; #qt6ct/{colors,qss}/?? + #"qt6ct/qt6ct.conf".text = ""; + "gtk-4.0/gtk-light.css".text = lib.mkIf cfg.adw-colors.enable '' + @import url("${pkgs.adw-colors}/themes/${cfg.adw-colors.colorscheme.light}/gtk.css"); + ''; + "gtk-4.0/gtk-dark.css".text = lib.mkIf cfg.adw-colors.enable '' + @import url("${pkgs.adw-colors}/themes/${cfg.adw-colors.colorscheme.dark}/gtk.css"); + ''; + + "gtk-3.0/gtk-light.css".text = lib.mkIf cfg.adw-colors.enable '' + @import url("${pkgs.adw-colors}/themes/${cfg.adw-colors.colorscheme.light}/gtk.css"); + ''; + "gtk-3.0/gtk-dark.css".text = lib.mkIf cfg.adw-colors.enable '' + @import url("${pkgs.adw-colors}/themes/${cfg.adw-colors.colorscheme.dark}/gtk.css"); + ''; + }; + }; +} diff --git a/hm/profiles/_arch/aarch64/default.nix b/hm/profiles/_arch/aarch64/default.nix new file mode 100644 index 00000000..0db89e19 --- /dev/null +++ b/hm/profiles/_arch/aarch64/default.nix @@ -0,0 +1,12 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ]; +} diff --git a/hm/profiles/_arch/riscv64/default.nix b/hm/profiles/_arch/riscv64/default.nix new file mode 100644 index 00000000..0db89e19 --- /dev/null +++ b/hm/profiles/_arch/riscv64/default.nix @@ -0,0 +1,12 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ]; +} diff --git a/hm/profiles/_arch/x86_64/default.nix b/hm/profiles/_arch/x86_64/default.nix new file mode 100644 index 00000000..0db89e19 --- /dev/null +++ b/hm/profiles/_arch/x86_64/default.nix @@ -0,0 +1,12 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ]; +} diff --git a/hm/profiles/_platform/darwin/default.nix b/hm/profiles/_platform/darwin/default.nix new file mode 100644 index 00000000..0db89e19 --- /dev/null +++ b/hm/profiles/_platform/darwin/default.nix @@ -0,0 +1,12 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ]; +} diff --git a/hm/profiles/_platform/linux/default.nix b/hm/profiles/_platform/linux/default.nix new file mode 100644 index 00000000..0db89e19 --- /dev/null +++ b/hm/profiles/_platform/linux/default.nix @@ -0,0 +1,12 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ]; +} diff --git a/hm/profiles/_platform/termux/default.nix b/hm/profiles/_platform/termux/default.nix new file mode 100644 index 00000000..0db89e19 --- /dev/null +++ b/hm/profiles/_platform/termux/default.nix @@ -0,0 +1,12 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ]; +} diff --git a/hm/profiles/_platform/wsl/default.nix b/hm/profiles/_platform/wsl/default.nix new file mode 100644 index 00000000..0db89e19 --- /dev/null +++ b/hm/profiles/_platform/wsl/default.nix @@ -0,0 +1,12 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ]; +} diff --git a/hm/profiles/_system/aarch64-darwin/default.nix b/hm/profiles/_system/aarch64-darwin/default.nix new file mode 100644 index 00000000..6b2057ec --- /dev/null +++ b/hm/profiles/_system/aarch64-darwin/default.nix @@ -0,0 +1,15 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ../../arch/aarch64 + ../../platform/darwin + ]; + +} diff --git a/hm/profiles/_system/aarch64-linux/default.nix b/hm/profiles/_system/aarch64-linux/default.nix new file mode 100644 index 00000000..caa6915c --- /dev/null +++ b/hm/profiles/_system/aarch64-linux/default.nix @@ -0,0 +1,15 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ../../arch/aarch64 + ../../platform/linux + ]; + +} diff --git a/hm/profiles/_system/riscv64-darwin/default.nix b/hm/profiles/_system/riscv64-darwin/default.nix new file mode 100644 index 00000000..6760a61e --- /dev/null +++ b/hm/profiles/_system/riscv64-darwin/default.nix @@ -0,0 +1,15 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ../../arch/riscv64 + ../../platform/darwin + ]; + +} diff --git a/hm/profiles/_system/riscv64-linux/default.nix b/hm/profiles/_system/riscv64-linux/default.nix new file mode 100644 index 00000000..8a990481 --- /dev/null +++ b/hm/profiles/_system/riscv64-linux/default.nix @@ -0,0 +1,15 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ../../arch/riscv64 + ../../platform/linux + ]; + +} diff --git a/hm/profiles/_system/x86_64-darwin/default.nix b/hm/profiles/_system/x86_64-darwin/default.nix new file mode 100644 index 00000000..110412cf --- /dev/null +++ b/hm/profiles/_system/x86_64-darwin/default.nix @@ -0,0 +1,15 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ../../arch/x86_64 + ../../platform/darwin + ]; + +} diff --git a/hm/profiles/_system/x86_64-linux/default.nix b/hm/profiles/_system/x86_64-linux/default.nix new file mode 100644 index 00000000..9f1dc837 --- /dev/null +++ b/hm/profiles/_system/x86_64-linux/default.nix @@ -0,0 +1,18 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ../../arch/x86_64 + ../../platform/linux + + ../../../users/${user}/devices + ../../../users/${user}/games + ]; + +} diff --git a/hm/profiles/apps/bitwarden/default.nix b/hm/profiles/apps/bitwarden/default.nix new file mode 100644 index 00000000..5296eacd --- /dev/null +++ b/hm/profiles/apps/bitwarden/default.nix @@ -0,0 +1,33 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + # TODO: Build package: https://github.com/Bitsteward/bitsteward + #./bitsteward.nix + #./cli.nix + #./pass.nix + #./rbw.nix + ]; + + home.packages = [ + pkgs.bitwarden + pkgs.nur.repos.ambroisie.bw-pass + ]; + + #programs.rbw = { + # enable = true; + # settings = { + # lock_timeout = 3600; + # # TODO: Use secret + # email = config.sops.secrts.email.text; #"slehman@piwine.com"; + # base_url = "bitwarden.${config.networking.fqdn}"; + # identity_url = "identity.${config.networking.fqdn}"; + # }; + #}; + #sops.secrets.email = { }; # TODO: Read secret as text, not file. + +} diff --git a/hm/profiles/apps/browser-chromium/default.nix b/hm/profiles/apps/browser-chromium/default.nix new file mode 100644 index 00000000..7e976c8e --- /dev/null +++ b/hm/profiles/apps/browser-chromium/default.nix @@ -0,0 +1,24 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, user +, ... +}: +{ + imports = [ + ]; + + programs.chromium = { + enable = true; + }; + + home.packages = [ + #pkgs.ungoogled-chromium + pkgs.chromium + #pkgs.chromiumBeta + #pkgs.chromiumDev + ]; + +} diff --git a/hm/profiles/apps/browser-firefox/bookmarks/default.nix b/hm/profiles/apps/browser-firefox/bookmarks/default.nix new file mode 100644 index 00000000..7e6b800f --- /dev/null +++ b/hm/profiles/apps/browser-firefox/bookmarks/default.nix @@ -0,0 +1,12 @@ +#{ self, inputs, config, lib, pkgs, ... }: +[ + #programs.firefox.profiles.default.bookmarks = [...]; + + # TODO: Import bookmarks inside profiles & concat lists + # TODO: Move the NixOS items to ./nix.nix + { name = "NixOS Options"; url = "https://search.nixos.org/options"; } + { name = "NixOS Packages"; url = "https://search.nixos.org/packages"; } + { name = "NixOS Flakes"; url = "https://search.nixos.org/flakes"; } + { name = "NixOS Wiki"; url = "https://nixos.wiki"; } + { name = "NixOS Libs"; url = "https://noogle.dev"; } +] diff --git a/hm/profiles/apps/browser-firefox/default.nix b/hm/profiles/apps/browser-firefox/default.nix new file mode 100644 index 00000000..95e81c10 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/default.nix @@ -0,0 +1,52 @@ +{ + modulesPath, + inputs, + config, + osConfig, + lib, + pkgs, + ... +}: { + imports = [ + #./policies.nix + + # --- Profiles --- + # NOTE: Profiles should load: bookmarks, extensions, search, settings, styles, etc. + # TODO: `./profiles/gaming.nix` + # TODO: `./profiles/work.nix` + # TODO: `./profiles/dev/default.nix` + # TODO: `./profiles/dev/app.nix` + # TODO: `./profiles/dev/web.nix` + ./profiles + + # --- Bookmarks --- + # TODO: `./bookmarks/cloud.nix` # Bookmarks for my cloud services + + # --- Firefox Versions, Releases, & Flavors --- + #./variants/default.nix # Firefox Stable + ./variants/nightly.nix # Firefox Nightly + # TODO: `./variants/librewolf.nix` # Librewolf fork (stable) + + # --- Settings --- + #./settings/arkenfox.nix # Security/privacy enhanced Firefox distro + ]; + + programs.firefox = { + enable = true; + + #finalPackage = + package = + if (pkgs.system != "x86_64-linux") + then + pkgs.firefox.override { + nativeMessagingHosts = + [pkgs.tridactyl-native] + ++ lib.optional osConfig.services.gnome.gnome-browser-connector.enable + pkgs.gnome-browser-connector; + } + else inputs.flake-firefox-nightly.packages.${pkgs.system}.firefox-bin; + + # Deprecated + #enableGnomeExtensions = lib.mkIf osConfig.services.gnome.gnome-browser-connector.enable true; + }; +} diff --git a/hm/profiles/apps/browser-firefox/extensions/adaptive-tab-bar-color.nix b/hm/profiles/apps/browser-firefox/extensions/adaptive-tab-bar-color.nix new file mode 100644 index 00000000..65c4ecad --- /dev/null +++ b/hm/profiles/apps/browser-firefox/extensions/adaptive-tab-bar-color.nix @@ -0,0 +1,49 @@ +{ inputs +, config +, lib +, pkgs +, program ? "firefox" +, profile ? "default" +, ... +}: +{ + imports = [ + # https://git.sr.ht/~rycee/nur-expressions/tree/master/item/pkgs/firefox-addons/flake.nix + #inputs.nur.hmModules. + ]; + + programs."${program}".profiles."${profile}" = { + extensions = [ pkgs.firefox-addons.adaptive-tab-bar-color ]; + settings = { + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + }; + + # https://gist.github.com/eilx/2e1346472598ddac5e2ec20f40695dfe + userChrome = '' + '' ++ (builtins.readFile ./adaptive-tab-bar-color_userChrome.css); + + userContent = '' + '' ++ (builtins.readFile ./adaptive-tab-bar-color_userContent.css); + + # Extra preferences to add to user.js + #extraConfig = '' + #''; + + # --- Extension ---------------------------------------- + # addons.json + #{ "slug": "adaptive-tab-bar-color", "pname": "adaptive-tab-bar-color" } + + # generated-firefox-addons.nix + #"adaptive-tab-bar-color" = buildFirefoxXpiAddon rec { + # pname = "adaptive-tab-bar-color"; + # url = "https://addons.mozilla.org/firefox/downloads/file/${id}/${pname}-${version}.xpi"; + ## url = "https://addons.mozilla.org/firefox/addon/adaptive-tab-bar-color"; + # meta = { + # homepage = "https://github.com/easonwong-de/Adaptive-Tab-Bar-Color"; + # description = "Changes the color of Firefox tab bar to match the website theme"; + # license = lib.licenses.mit; + # platforms = lib.platforms.all; + # }; + #}; + }; +} diff --git a/hm/profiles/apps/browser-firefox/extensions/adaptiveTabColor-userChrome.css b/hm/profiles/apps/browser-firefox/extensions/adaptiveTabColor-userChrome.css new file mode 100644 index 00000000..73fa4def --- /dev/null +++ b/hm/profiles/apps/browser-firefox/extensions/adaptiveTabColor-userChrome.css @@ -0,0 +1,92 @@ +/* +* +* Extension: +* - [Repo](https://github.com/YS-Wong/Adaptive-Tab-Bar-Color) +* - [Firefox Addons](https://addons.mozilla.org/en-US/firefox/addon/adaptive-tab-bar-color) +* +* File Location: +* - `~/.mozilla/firefox//chrome/firefox-gnome-theme/theme/extensions/adaptive-tab-color.css` +* +* Links: +* - [Firefox GNOME Theme](https://github.com/rafaelmardojai/firefox-gnome-theme) +* - [Issue for Adaptive-Tab-Bar-Color](https://github.com/rafaelmardojai/firefox-gnome-theme/issues/412) +* - [Gist w/ Adaptive-Tab-Bar-Color CSS](https://gist.github.com/eilx/2e1346472598ddac5e2ec20f40695dfe) +* +*/ + +/* + PROBLEMS + 1 - URL text's 'https://www.' and such appear as a darker shade of the main color. + I don't know how to change the shade of those parts to how it would be on a light theme, + so on a 'light' background the URL is currently just all black :( + 2 - There's no way to view a tab's container without being on that tab. I'm using + simple tab groups for my containers which 'fixes' this, but that's not really a solution :/ +*/ + +:root { + --gnome-toolbar-color: var(--lwt-text-color); + + /* I think it makes sense with the adaptive colors to 'blend' + * in by hiding these borders? Otherwise the alternative works decently + * enough but kinda falls apart with high color e.g. npmjs.com + */ +/* --gnome-toolbar-border-color: rgb(125 125 125 / .3); */ + --gnome-toolbar-border-color: transparent; + + --gnome-toolbar-background: var(--lwt-accent-color-inactive); + --gnome-toolbar-icon-fill: var(--toolbarbutton-icon-fill); + --gnome-inactive-toolbar-icon-fill: var(--toolbarbutton-icon-fill); + + --gnome-menu-background: var(--gnome-toolbar-background); + --gnome-menu-button-hover-background: var(--gnome-button-hover-background); + + --gnome-headerbar-background: var(--lwt-accent-color); + + --gnome-button-hover-background: var(--toolbarbutton-hover-background); + --gnome-button-active-background: var(--toolbarbutton-active-background); + --gnome-button-flat-hover-background: var(--gnome-button-hover-background); + --gnome-button-flat-active-background: var(--gnome-button-active-background); + + /* See problem 1 */ + --gnome-entry-color: var(--lwt-text-color); + --gnome-inactive-entry-color: var(--gnome-entry-color); + + --gnome-tabbar-tab-hover-background: var(--toolbarbutton-hover-background); + --gnome-tabbar-tab-active-background: var(--toolbarbutton-active-background); + /* Maybe there's a better option for this? */ + --gnome-tabbar-tab-active-hover-background: var(--toolbarbutton-hover-background); + + --gnome-tabbar-fade-background: var(--lwt-accent-color); +} + +/* Gives the tabbar a transition matching the headerbar */ +#TabsToolbar { + transition: var(--ext-theme-background-transition); +} + +/* == Container tab text readability issues (see issue #464) == + * Naturally this issue is 1000% worse with coloured backgrounds, + * Can't think of a way to keep the nice-looking tab text color and have any contrast + * so decided instead to make the url bar container identifier way more visible as a compromise + */ + +.tab-text { + color: var(--lwt-text-color); + transition: color 100ms; +} + +#userContext-icons { + margin: .4em 0; + border-radius: 1em; + padding: 0 .5em; + background-color: var(--identity-tab-color); +} + +#userContext-indicator { + fill: var(--lwt-text-color) !important; +} + +#userContext-label { + color: var(--lwt-text-color) !important; + filter: contrast(140%); +} diff --git a/hm/profiles/apps/browser-firefox/extensions/default.nix b/hm/profiles/apps/browser-firefox/extensions/default.nix new file mode 100644 index 00000000..c03cdac1 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/extensions/default.nix @@ -0,0 +1,239 @@ +# --- Extensions --- +# TODO: `./gnome.nix` # gnome-shell-connector & misc GNOME integration +# TODO: `./ublock/default.nix` # uBlock Origin ext, custom blocklists & rules +# TODO: `./vimium.nix` # Set global option for system-wide vim keybinds +# TODO: `./violentmonkey/default.nix` # Custom userScripts (firemonkey vs violentmonkey) +# TODO: `./bitwarden.nix` # Bitwarden password manager +# TODO: `./pass.nix` # Pass password manager +# TODO: `./keepass.nix` # Pass password manager + +{ inputs +, pkgs +#, config, lib, pkgs +, ... +}: +with pkgs.nur.repos.rycee.firefox-addons; +#with inputs.nur.repos.rycee.firefox-addons; +[ + #inputs.nur.repos.bandithedoge.firefoxAddons.downthemall + #inputs.nur.repos.bandithedoge.firefoxAddons.sponsorblock + #inputs.nur.repos.colinsane.firefox-extensions.bypass-paywalls-clean + #pkgs.nur.repos.bandithedoge.firefoxAddons.downthemall + #pkgs.nur.repos.bandithedoge.firefoxAddons.sponsorblock + #pkgs.nur.repos.colinsane.firefox-extensions.bypass-paywalls-clean # Error: Invalid meta attrset + + # --- User Scripts/Styles --- + firemonkey #greasemonkey tampermonkey violentmonkey + #stylus + + # --- Block Ads ----------- + adnauseam + #ghostery + #sponsorblock + #ublock-origin + #umatrix + #unpaywall + + # --- Block Tracking ------ + behave + canvasblocker + #censor-tracker + clearurls + #decentraleyes + #disable-javascript + #disconnect # Block trackers + #libredirect + localcdn #localcdn-fork-of-decentraleyes #localcdn + multi-account-containers + noscript + #pay-by-privacy-com # Generate virtual card number in 1 click at checkout + privacy-badger #privacy-badger17 # Block trackers + privacy-pass # Skip captchas/etc. in privacy-respecting way + #privacy-possum # falsify tracking data (pair w/ adnauseam) + #privacy-redirect # Redirect sites to privacy-respecting alternatives + #privacy-settings # Central location for privacy-related settings + #privacy-relay + #profile-switcher # Switch FF profiles (requires connector) + #redirector # custom URL redirects + skip-redirect + smart-referer + ubo-scope + + # --- Block Annoyances ---- + #behind-the-overlay-revival # Close popup overlays + buster-captcha-solver + #consent-o-matic + #i-dont-care-about-cookies + ninja-cookie # Remove cookie banners & reject non-essential + + # --- Desktop Integration - + #ff2mpv + #ghosttext + gnome-shell-integration + gsconnect + #notion-web-clipper + #open-in-browser + #org-capture # Emacs org-mode site capture + #plasma-integration + #pywalfox + #textern + + # --- Development --------- + #a11ycss + #enhanced-github + #gitpod + #gloc + #header-editor + #hoppscotch + lovely-forks + #modheader #modheader-firefox # Modify request headers + #octolinker + #octotree + #sourcegraph #sourcegraph-for-firefox + react-devtools + #reduxdevtools + #refined-github #refined-github- + #vue-js-devtools + #wappalyzer # Analyze technologies on sites + + # --- Downloading --------- + #ipfs-companion + #markdownload # Markdown web clipper + #musescore-downloader + #no-pdf-download + #pinboard # Pinboard.in clipper for notes + #save-page-we + #single-file + #video-downloadhelper + wayback-machine #wayback-machine_new + + # --- Email --------------- + #anonaddy + #mailvelope + #simplelogin + + # --- Keyboard Shortcuts -- + #firenvim + #gesturefy + #linkhints + #surfingkeys #surfingkeys_ff + #tridactyl #tridactyl-vim + #vim-vixen + #vimium-c + #vimium #vimium-ff + + # --- Password Managers --- + bitwarden #bitwarden-password-manager + #browserpass #browserpass-ce + #gopass-bridge + #keepass-helper #keepass-helper-url-in-title #keepass-helper + #keepassxc-browser + #lesspass + #okta-browser-plugin + + # --- Productivity -------- + #leechblock-ng + + # --- Search -------------- + #add-custom-search-engine + #c-c-search-extension + #duckduckgo-privacy-essentials #duckduckgo-for-firefox + #ecosia #ecosia-the-green-search + #js-search-extension + #rust-search-extension + #search-engines-helper + #search-by-image #search_by_image + #startpage-private-search + #ublacklist + + # --- Social -------------- + #betterttv + #facebook-container + #fediact # Simplifies interactions on other Mastodon instances + #keybase #keybase-for-firefox #keybase + #old-reddit-redirect + #reddit-enhancement-suite + #reddit-moderator-toolbox + #reddit-comment-collapser #reddit_comment_collapser + #streetpass-for-mastodon + + # --- Sync ---------------- + floccus + #xbs #xbrowsersync + + # --- Tabs ---------------- + #adsum-notabs + #auto-tab-discard + #close-other-windows + export-tabs-urls-and-titles + #onetab + #new-window-without-toolbar + #nighttab + #sidebery # Super nice tab tree manager w/ containers, groups, more + simple-tab-groups + #tab-counter-plus + #tab-reloader + #tab-retitle + tab-session-manager + tab-stash + #tab-unloader-for-tree-style-tab + #tabcenter-reborn + #tree-style-tab + #tst-tab-search #tst-search + + # --- NTP ------------------ + #momentumdash + #new-tab-override + #tabliss + + # --- Themes -------------- + #dark-mode-website-switcher + #firefox-color + #text-contrast-for-dark-themes + + # --- Translate ----------- + #firefox-translations + #languagetool + #to-deepl + + # --- Media --------------- + #blocktube + #df-youtube + #enhancer-for-youtube + #h264ify + #peertubeify + #view-image # Adds search by image button back to Google Images + #videospeed + #web-scrobbler # Playback scrobbler for various sites + #youchoose-ai + #youtube-recommended-videos + #youtube-shorts-block + + # --- History ------------- + #history-cleaner + #promnesia # Enhanced history + + # --- Misc ---------------- + #ether-metamask #metamask + #flagfox # Show country flag of content + #ipvfoo-pmarks # View server IP address + #laboratory-by-mozilla + #limit-limit-distracting-sites + #native-mathml + #news-feed-eradicator + #offline-qr-code-generator + #rabattcorner # Cashback + #smart-refresher + #statshunters # Show tiles on maps/routing sites + #switchyomega + #temporary-containers + + # --- Censorship --- + #snowflake #torproject-snowflake + #user-agent-string-switcher + #wallabagger + + #windscribe # Free VPN & ad blocker + #zoom-page-we + #zoom-redirector +] diff --git a/hm/profiles/apps/browser-firefox/extensions/generated-firefox-addons.nix b/hm/profiles/apps/browser-firefox/extensions/generated-firefox-addons.nix new file mode 100644 index 00000000..632ff7af --- /dev/null +++ b/hm/profiles/apps/browser-firefox/extensions/generated-firefox-addons.nix @@ -0,0 +1,93 @@ +{ buildFirefoxXpiAddon, fetchFromGitHub, fetchgit, fetchurl, lib, stdenv }: +{ + + # Notes: + # - Sidebery Git repo has `flake.nix`, but only provides devenv + # (https://github.com/mbnuqw/sidebery) + # - Based on Rycee's NUR: `pkgs.nur.rycee.firefox-addons` + # - Original file: auto-generated Nix configuration to create `firefox-addons` packages. + # - Original file: includes older revision of Sidebery addon. + # - Original file: `generated-firefox-addons.nix` + # (https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix) + # - This snippet exists solely for: + # - Tracking latest Sidebery code from Git + # - Apply custom `userChrome.css` styling to Sidebery panel & tabs to fit in better with the platform (GNOME / KDE). + "sidebery" = buildFirefoxXpiAddon rec { + pname = "sidebery"; + version = "5.0.0"; #rc4 + addonId = "{3c078156-979c-498b-8990-85f7987dd929}"; + + #version = "4.10.2"; + #url = "https://addons.mozilla.org/firefox/downloads/file/3994928/sidebery-${version}.xpi"; + #sha256 = "60e35f2bfac88e5b2b4e044722dde49b4ed0eca9e9216f3d67dafdd9948273ac"; + + src = fetchFromGitHub { + owner = "mbnuqw"; + repo = "sidebery"; + rev = "3bb0955ca8d71bc43c6e57ba1024bcec4bffc56a"; + #rev = "v5"; + sha256 = ""; + }; + + meta = with lib; { + homepage = "https://github.com/mbnuqw/sidebery"; + description = "Tabs tree and bookmarks in sidebar with advanced containers configuration."; + license = licenses.mit; + mozPermissions = [ "bookmarks" "contextualIdentities" "cookies" + "menus" "menus.overrideContext" "search" "sessions" "storage" "tabs" ]; + #optionalPermissions = [ "" "proxy" "webRequest" "webRequestBlocking" + # "bookmarks" "tabHide" "clipboardWrite" "history" "downloads" ]; + #]; + platforms = platforms.all; + }; + + }; + + # Additional CSS styles for Firefox userChrome to style tab sidebar extensions to fit GNOME / KDE. + "sidebery-gnome-css" = stdenv.mkDerivation { + pname = "sidebery-gnome-css"; + version = "12022.11.29"; # Latest release (as of Sept 23) = v12022.11.29 + + meta = with lib; { + homepage = "https://github.com/drannex42/FirefoxSidebar"; + description = "Firefox CSS theme for sidebar extensions like Sidebery."; + license = licenses.mit; + platforms = platforms.all; + }; + + src = fetchFromGitHub { + owner = "drannex42"; + repo = "FirefoxSidebar"; + rev = "60e064e67a5133ee520a972db8d338b3d224fa15"; + sha256 = ""; + }; + + # Files: + # + # ./sidebery-data.json # Extension settings to import into Sidebery settings + # + # ./userChrome.css # Main CSS stylesheet to import the others + # ./custom.css # Custom User CSS overrides + # ./prefs.css # Theme preferences + # + # ./themes/gtk_adwaita.css # Styles: GNOME Adwaita + # ./themes/gtk_breeze.css # Styles: KDE Breeze + # + # ./extensions/sidebar.css # Sidebar impl (default=true) + # ./extensions/window_controls.css # CSD / Window controls impl (default=true) + # ./extensions/bookmark_arrow.css # Add small arrow next to Bookmark dirs (default=false) + # ./extensions/superbox_removal.css # Add small arrow next to Bookmark dirs (default=true) + # ./extensions/avatar_size.css # Change Firefox account avatar size. (default=false) + # ./extensions/fix_hidden_bookmarks.css # Fix sidebar switcher if Bookmarks toolbar is hidden (default=false) + # ./extensions/hide_sidebar_switcher.css # Hide sidebar switcher. (default=false) + # + + }; + + # TODO: Import CSS stylesheets into Firefox configuration for each desired profile(s) + # TODO: Create custom CSS overrides for personal preferences & import CSS in Firefox profile userChrome.css. + # TODO: Implement some way of keeping this snippet up-to-date. + # TODO: Figure out how this file should be imported. + # TODO: Conditionally load the theme stylesheet based on desktop environment. + +} diff --git a/hm/profiles/apps/browser-firefox/extensions/tabCenterReborn-custom.css b/hm/profiles/apps/browser-firefox/extensions/tabCenterReborn-custom.css new file mode 100644 index 00000000..9dd123b6 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/extensions/tabCenterReborn-custom.css @@ -0,0 +1,41 @@ +/* --- Global Variables --------------------------------- */ +:root { + /* --- Existing --- */ + --tab-height-compact: 28px; /* Reduce tab height in compact mode */ + + /* --- Custom --- */ + --tab-thumbnail-background: #00000000; /* Transparent thumbnail background */ +} + + +/* --- Tab Type Styles ---------------------------------- */ +/* --- Discarded/unloaded Tabs --- */ +.tab.discarded { + font-style: italic; +} +.tab.discarded .tab-title { + opacity: 0.4; /* Default: 0.5 */ +} +.tab.discarded .tab-meta-image { + opacity: 0.4; /* Default: 0.5 */ +} + +/* --- Unread Tabs --- */ +.tab.unread { + /* color: red; */ + opacity: 0.8; +} + +/* --- Tab Styles --------------------------------------- */ +/* color for icon border + transparent icon bg */ +#tablist-wrapper:not(.shrinked) #tablist .tab-icon-wrapper, +#tablist-wrapper:not(.shrinked) #pinnedtablist:not(.compact){ + background-color: transparent; +} + +/* color for thumbnail bg color */ +#tablist-wrapper:not(.shrinked) #tablist .tab-meta-image, +#tablist-wrapper:not(.shrinked) #pinnedtablist:not(.compact) .tab-meta-image { + background-color: transparent !important; +} + diff --git a/hm/profiles/apps/browser-firefox/extensions/tabCenterReborn-gnomeTheme.css b/hm/profiles/apps/browser-firefox/extensions/tabCenterReborn-gnomeTheme.css new file mode 100644 index 00000000..e5b5c864 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/extensions/tabCenterReborn-gnomeTheme.css @@ -0,0 +1,271 @@ +/* CSS to add in tab center reborn Settings pages */ + +:root { + --tab-separator: transparent; + --tab-selected-line: transparent; + --tablist-separator: #cccccc; +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #303030; + --icons: rgb(251,251,254); + --tab-separator: transparent; + --tab-active-background: rgb(62,62,62); + --tab-active-text: rgb(251,251,254); + --tab-text: #fbfbfe; + --toolbar-background: rgb(43,42,51); + --toolbar-text: rgb(251, 251, 254); + --input-background: rgb(28,27,34); + --input-border: transparent; + --input-background-focus: rgb(66,65,77); + --input-selected-text: rgb(251,251,254); + --input-text: rgb(251,251,254); + --input-text-focus: rgb(251,251,254); + --identity-color-toolbar: rgb(251,251,254); + --tablist-separator: #333333; + } +} +/* fix autoscrolling bug when middle clicking */ +:root, +body { + overflow: hidden; +} + +/* Move topmenu to bottom */ +#topmenu { + order: 2; + background: transparent; + border: none; + display: flex; + flex-direction: column; +} +#settings { + margin-bottom: 2px; +} +#newtab { + margin-top: 2px; +} +#settings, +#newtab { + margin: 6px; + /*margin-left: 6px;*/ + /*margin-right: 6px;*/ + /*padding-bottom: 6px;*/ + /*width: 100%;*/ +} + +/* Hide filterbox & settings icon */ +/*#filterbox-icon,*/ +/*#filterbox-input,*/ +#settings { + display: none; +} + +#tablist-wrapper { + height: auto; + margin-inline: 6px; + /* adds margin above tabs to make the spacing even */ + margin-top: 5px; +} + +/* fix glitch with spacing in-between pinned tabs */ +#pinnedtablist:not(.compact) { + display: flex; + flex-direction: column; +} + +#tablist-wrapper::after { + content: ""; + margin: 2px 0; + border: 1px solid var(--tablist-separator); +} + +.tab, +.tab.active { + border-radius: 4px; + border-bottom: none !important; + margin: 1px 0; +} + +#pinnedtablist:not(.compact) .tab, +#tablist .tab { + padding: 0; +} + +#newtab::after { + content: "New tab"; + margin-left: 10px; + white-space: nowrap; + overflow: hidden; +} + +#filterlist::after { + margin-left: 10px; + white-space: nowrap; + overflow: hidden; +} + +#filterlist-icon, +#settings-icon, +#newtab-icon { + min-width: 16px; +} + + +/* the @media rule only allows these settings apply when the sidebar is expanded */ +@media (min-width: 49px) { + /* Move close button to left side */ + /*.tab-close { + left: 0; + margin-left: 3px; + }*/ + + /* Fix title gradient */ + /*#tablist .tab:hover > .tab-title-wrapper { + mask-image: linear-gradient(to left, transparent 0, black 2em); + }*/ + + /* Move tab text to right when hovering to accomodate for the close button */ + /*#tablist .tab:hover > .tab-title-wrapper { + margin-left: 28px; + transition: all 0.2s ease; + }*/ + + /* Move favicon to right when hovering to accomodate for the close button */ + /*#tablist .tab:hover > .tab-meta-image { + padding-left: 25px; + transition: all 0.2s ease; + }*/ +} + + +/*** Move container indicators to left ***/ +#tablist-wrapper { + margin-left: 0px; + padding-left: 6px; +} +#tablist, +#pinnedtablist:not(.compact) { + margin-left: -6px; + padding-left: 6px; +} +.tab { + overflow: visible; +} +#tablist .tab[data-identity-color] .tab-context, +#pinnedtablist:not(.compact) .tab[data-identity-color] .tab-context { + box-shadow: none !important; +} +#tablist .tab[data-identity-color] .tab-context::before, +#pinnedtablist:not(.compact) .tab[data-identity-color] .tab-context::before { + content: ""; + position: absolute; + top: 6px; + left: -6px; + bottom: 6px; + width: 3px; + border-radius: 0 5px 5px 0; + background: var(--identity-color); + transition: inset .1s; +} +#tablist .tab.active[data-identity-color] .tab-context::before, +#pinnedtablist:not(.compact) .tab.active[data-identity-color] .tab-context::before { + top: 1px; + bottom: 1px; +} + +/* center favicons within the tab */ +#tablist-wrapper.shrinked>:not(#pinnedtablist.compact) .tab-meta-image { + margin-left: 6px !important; +} + +/* hide certain items when collapsed */ +@media (max-width: 64px) { + /* using 64px minimum width to give the tab favicons more room during the transition */ + .tab-close, + .tab-pin { + visibility: collapse !important; + } + + /* hide scrollbar when sidebar is collapsed */ + #tablist { + scrollbar-width: none; + } +} + +@media (max-width: 48px) { + #settings-icon, + #tablist-wrapper .tab-title-wrapper, + #newtab::after, + #settings { + visibility: hidden !important; + } +} + + +/*** Better support for non-compact mode ***/ +#tablist-wrapper:not(.shrinked) .tab-meta-image { + display: flex; + align-items: center; + + width: 58px; + border: 0 !important; + margin-right: 4px; + border-radius: inherit; + background-position: center; + min-width: 0px !important; + background-color: var(--toolbar-background) !important; + transition: margin .4s; +} +#tablist-wrapper:not(.shrinked) .tab-icon-wrapper { + transition: margin .1s; + z-index: 2; +} +#tablist-wrapper:not(.shrinked) .tab-icon-overlay { + top: unset !important; + bottom: 8px; + left: 25px !important; + z-index: 4; + transition: inset .1s; +} + +/* If you want to disable the website previews, +comment out the @media line below and its closing bracket */ +@media (max-width: 49px) { + #tablist-wrapper:not(.shrinked) .tab-meta-image { + background-color: inherit !important; + border-width: 0 !important; + box-shadow: none !important; + height: 0 !important; + width: 26px; + margin-right: 0px; + } + #tablist-wrapper:not(.shrinked) .tab-icon-wrapper { + background-color: transparent !important; + margin-top: 0 !important; + margin-left: 3px !important; + box-shadow: none !important; + } + #tablist-wrapper:not(.shrinked) .tab-icon-overlay { + bottom: 12px; + left: 16px !important; + } +} + +/* middle click newtab workaround */ + +/* allows the #spacer element to take up more space */ +#spacer { + min-height: 100vh; +} + +/* moves the new tab button to the original position */ +#tablist-wrapper { + margin-bottom: -100vh; +} + +/* moves the new tab button separator to the original position */ +#tablist-wrapper::after { + transform: translateY(-100vh); +} diff --git a/hm/profiles/apps/browser-firefox/extensions/tabCenterReborn-userChrome.css b/hm/profiles/apps/browser-firefox/extensions/tabCenterReborn-userChrome.css new file mode 100644 index 00000000..ce0ac3c8 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/extensions/tabCenterReborn-userChrome.css @@ -0,0 +1,55 @@ +/* +* userChrome.css for firefox-gnome-theme compatibility with extension: `tabcenter-reborn` +* +* Extension: +* - https://framagit.org/ariasuni/tabcenter-reborn (current) +* - https://github.com/eoger/tabcenter-redux (archived) +* +* Setup: +* +* 1. Go to `about:config` +* 2. Set `toolkit.legacyUserProfileCustomizations.stylesheets = true` +* 3. Install extension: tab-center-reborn +* 4. Go to `about:addons` then click the overflow menu for `Tab Center Reborn` & select `Preferences` +* 5. Insert this CSS into `Custom Stylesheet` field. +* +* Links: +* +* - https://framagit.org/ariasuni/tabcenter-reborn/-/wikis/home +* +*/ + +/* Hide sidebar w/ only one tab open */ +#main-window[titlepreface^="[1] "] #sidebar-box[sidebarcommand="tabcenter-reborn_ariasuni-sidebar-action"] { + visibility: collapse; +} + +/* Hide sidebar header */ +#sidebar-box #sidebar-header { + visibility: collapse; +} + +/* Hide sidebar header for Tab-Center-Reborn only */ +#sidebar-box[sidebarcommand="tabcenter-reborn_ariasuni-sidebar-action"] #sidebar-header { + visibility: collapse; +} + +/* Reduce height of sidebar header +#sidebar-box #sidebar-header * { + margin-top: -3px !important; + margin-bottom: -3px !important; +} + +/* Move sidebar header to bottom */ +#sidebar-box { + -moz-box-direction: reverse; +} +#sidebar-switcher-arrow { + transform: rotate(180deg); +} + +/* Set max width of sidebar */ +#sidebar-box { + max-width: 192px; +} + diff --git a/hm/profiles/apps/browser-firefox/extensions/tabcenter-reborn.nix b/hm/profiles/apps/browser-firefox/extensions/tabcenter-reborn.nix new file mode 100644 index 00000000..5ecf316f --- /dev/null +++ b/hm/profiles/apps/browser-firefox/extensions/tabcenter-reborn.nix @@ -0,0 +1,34 @@ +{ inputs +, config +, lib +, pkgs +, program ? "firefox" +, profile ? "default" +, ... +}: +{ + imports = [ + ]; + + programs."${program}".profiles."${profile}" = { + extensions = [ pkgs.nur.repos.rycee.firefox-addons.tabcenter-reborn ]; + settings = { + "browser.tabs.inTitlebar" = 1; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "gnomeTheme.extensions.tabCenterReborn" = true; + "gnomeTheme.extensions.tabCenterReborn.alwaysOpen" = false; + }; + + userChrome = '' + @import ${pkgs.firefox-gnome-theme}/theme/extensions/tab-center-reborn.css; + '' ++ (builtins.readFile ./tabcenter-reborn_userChrome.css); + + userContent = '' + '' ++ (builtins.readFile ./tabcenter-reborn_userContent.css); + + # Extra preferences to add to user.js + #extraConfig = '' + #''; + + }; +} diff --git a/hm/profiles/apps/browser-firefox/policies.nix b/hm/profiles/apps/browser-firefox/policies.nix new file mode 100644 index 00000000..9ca87973 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/policies.nix @@ -0,0 +1,25 @@ +{ + config, + lib, + pkgs, + ... +}: { + # https://mozilla.github.io/policy-templates + programs.firefox.policies = { + BlockAboutAddons = false; + BlockAboutConfig = false; + BlockAboutProfiles = false; + BlockAboutSupport = false; + CaptivePortal = true; + DefaultDownloadDirectory = config.xdg.userDirs.downloads; + DisableFeedbackCommands = true; + DisableFirefoxStudies = true; + DisablePocket = true; + DisableTelemetry = true; + SearchBar = false; + ShowHomeButton = false; + UseSystemPrintDialog = true; + #WindowsSSO = false; + #"3rdparty" = {}; + }; +} diff --git a/hm/profiles/apps/browser-firefox/profiles/arkenfox.nix b/hm/profiles/apps/browser-firefox/profiles/arkenfox.nix new file mode 100644 index 00000000..64d04b91 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/profiles/arkenfox.nix @@ -0,0 +1,133 @@ +{ self, inputs +, config, lib, pkgs +, profile +, useFlake ? true +, setDefault ? false +, ... +}: + +# https://github.com/arkenfox/user.js +# https://arkenfox.github.io/gui/ + +let + arkenfox = { + base = builtins.readFile ./user.js; # TODO: Use fetcher + sections = { + enable = true; + "0000".enable = true; # Global + "0100".enable = true; # Startup + "0200".enable = true; # Geolocation / Language / Locale + "0300".enable = true; # Quieter Fox + "0400".enable = true; # Safe Browsing + "0600".enable = true; # Block Implicit Outbound + "0700".enable = true; # DNS / DoH / Proxy / SOCKS / IPv6 + "0800".enable = true; # Location Bar / Search Bar / Suggestions / History / Forms + "0900".enable = true; # Passwords + "1000".enable = true; # Disk Avoidance + "1200".enable = true; # TLS / SSL + "1400".enable = true; # Fonts + "1600".enable = true; # Headers / Referrers + "1700".enable = true; # Containers + "2000".enable = true; # Plugins / Media / WebRTC + "2400".enable = true; # DOM + "2600".enable = true; # Misc + + #"0000".enable = true; + "0001".enable = true; + "0002".enable = true; + "0003".enable = true; + "0004".enable = true; + "0005".enable = true; + "0006".enable = true; + "0007".enable = true; + "0008".enable = true; + "0009".enable = true; + "0010".enable = true; + "0011".enable = true; + "0012".enable = true; + "0013".enable = true; + "0014".enable = true; + "0015".enable = true; + "0016".enable = true; + "0017".enable = true; + "0018".enable = true; + "0019".enable = true; + "0020".enable = true; + "0021".enable = true; + "0022".enable = true; + "0023".enable = true; + "0024".enable = true; + "0025".enable = true; + "0026".enable = true; + }; + + # TODO: Add iPhone, Windows (1080p monitor) screen resolutions + # TODO: Check 5000s (optional) & 9000s (personal) + overrides.default = '' + + user_pref("browser.startup.page", 3); // Enable browser start page (3=restore-session) + + //user_pref("browser.formfill.enable", true); // Enable form auto-fill + + //user_pref("security.cert_pinning.enforcement_level", 2); // + + //user_pref("netowrk.http.referer.XOriginPolicy", 0); // Pair w/ Smart Referer extension (Strict mode + add exceptions) + + user_pref("media.eme.enabled", true); // Allow DRM + + user_pref("privacy.clearOnShutdown.cache", false); // [DEFAULT: true] + user_pref("privacy.clearOnShutdown.downloads", false); // [DEFAULT: true] + user_pref("privacy.clearOnShutdown.formdata", true); // [DEFAULT: true] + user_pref("privacy.clearOnShutdown.history", false); // [DEFAULT: true] + user_pref("privacy.clearOnShutdown.sessions", false); // [DEFAULT: true] + + user_pref("webgl.disabled", false); // [DEFAULT: true] + + //user_pref("privacy.resistFingerprinting.letterboxing", false); // Disable borders + user_pref("privacy.resistFingerprinting.letterboxing.dimensions", "800x600, 1000x1000, 1920x1080"); // [HIDDEN PREF] + // user_pref("privacy.window.maxInnerWidth", 1600); // 4502 [default 1600 in user.js v95] + // user_pref("privacy.window.maxInnerHeight", 900); // 4502 [default 900 in user.js v95] + + user_pref("browser.display.use_system_colors", true); + user_pref("widget.non-native-theme.enabled", false); + //user_pref("ui.use_standins_for_native_colors", ""); + + ''; + + overrides.loose = '' + + ''; + }; +in +{ + # --- Arkenfox Flake --- + #https://github.com/dwarfmaster/arkenfox-nixos + #https://arkenfox.dwarfmaster.net + #imports = [ inputs.arkenfox.hmModules.default ]; + imports = [ + lib.lists.optional useFlake inputs.arkenfox.hmModules.default + lib.lists.optional (!useFlake) inputs.nur.repos.ataraxiasjel.arkenfox-userjs + ]; + + programs.firefox = { + arkenfox = lib.mkIf useFlake { + enable = true; + #version = "113.0"; + }; + profiles = { + arkenfox = { + arkenfox = lib.mkIf useFlake arkenfox.sections; # arkenfox-nixos provides option: `.arkenfox.*` + extraConfig = lib.mkIf (!useFlake) arkenfox.base; # otherwise, configure using option: `.extraConfig` + }; + default = lib.mkIf setDefault { + arkenfox = lib.mkIf useFlake arkenfox.sections; + extraConfig = lib.mkIf (!useFlake) arkenfox.base; + }; + }; + }; + + # --- Manual Config --- + #programs.firefox.profiles.arkenfox.extraConfig = arkenfox.base; + #programs.firefox.profiles.default.extraConfig = arkenfox.base ++ arkenfox.overrides.default; + +} diff --git a/hm/profiles/apps/browser-firefox/profiles/base/default.nix b/hm/profiles/apps/browser-firefox/profiles/base/default.nix new file mode 100644 index 00000000..34b76f80 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/profiles/base/default.nix @@ -0,0 +1,113 @@ +{ + inputs, + config, + lib, + pkgs, + ... +}: { + # TODO: Recursively merge & override the default profile. + programs.firefox.profiles.base = { + name = "base"; + id = "base"; + isDefault = false; # config.services.xserver.; + + bookmarks = [ + # Nix libs + # Nix nix.conf manual + # Home-Manager options + # Home-Manager repo + # nixpkgs repo + + # Personal web servers + ]; + + containers = {}; + + #package = pkgs.firefox.override { + # nativeMessagingHosts = [pkgs.tridactyl-native]++lib.optional config.services.xserver.desktopManager.gnome.enable pkgs.gnome-browser-connector; + #}; + + #with inputs.nur.repos.rycee.firefox-addons; [ + extensions = with pkgs.nur.repos.rycee.firefox-addons; []; + + search = { + default = "DuckDuckGo"; + engines = { + "DuckDuckGo" = {urls = [{template = "https://duckduckgo.com/";}];}; + "Nix Packages" = { + definedAliases = ["@np" "@nixpkgs"]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + urls = [ + { + template = "https://search.nixos.org/packages"; + params = [ + { + name = "type"; + value = "packages"; + } + { + name = "query"; + value = "{searchTerms}"; + } + { + name = "channel"; + value = "unstable"; + } + ]; + } + ]; + }; + # TODO: Move to NixOS profile + "NixOS Options" = { + definedAliases = ["@no" "@nixos"]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + urls = [ + { + template = "https://search.nixos.org/options"; + params = [ + { + name = "type"; + value = "options"; + } + { + name = "query"; + value = "{searchTerms}"; + } + { + name = "channel"; + value = "unstable"; + } + ]; + } + ]; + }; + "NixOS Wiki" = { + urls = [ + { + template = "https://nixos.wiki/index.php?search={searchTerms}"; + } + ]; + iconUpdateURL = "https://nixos.wiki/favicon.png"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = ["@nw" "@nixwiki"]; + }; + }; + }; + + extraConfig = ""; + settings = { + # --- Options: Defaults = Set --- + "browser.theme.dark-private-windows" = false; + "browser.uidensity" = 0; + "svg.content-properties.content.enabled" = true; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + }; + + # TODO: @import "${pkgs.nur.repos.federicoschonborn.firefox-gnome-theme}/userChrome.css"; + # https://raw.githubusercontent.com/easonwong-de/Tab-Preview-On-Hover/main/CSS%20Theme/userChrome.css + userChrome = ""; + userContent = ""; + }; + + home.packages = []; +} diff --git a/hm/profiles/apps/browser-firefox/profiles/base/settings/default.nix b/hm/profiles/apps/browser-firefox/profiles/base/settings/default.nix new file mode 100644 index 00000000..8491e1cd --- /dev/null +++ b/hm/profiles/apps/browser-firefox/profiles/base/settings/default.nix @@ -0,0 +1,34 @@ +{ + config, + osConfig, + lib, + pkgs, + ... +}: { + imports = [ + #./certificates.nix + #./hardening.nix + #./trusted-sites.nix + ]; + + # Firefox only supports int, bool, and string types for preferences, but home-manager will automatically convert all other JSON-compatible values into strings. + programs.firefox.profiles.base.settings = let + site-list = builtins.concatStringsSep ", " (osConfig.networking.domains + ++ [ + "samlehman.me" + "samlehman.dev" + "samlehman.biz" + "samlehman.cloud" + "lehman.run" + "redstone.pw" + ]); + in { + # TODO: Test if attrset nesting works or need to use full option path string + # Auto GSS-API/SPNEGO auth for trusted sites + "network.negotiate-auth.trusted-uris" = site-list; + "network.negotiate-auth.delegation-urls" = site-list; + "network.automatic-ntlm-auth.trusted-uris" = site-list; + "network.automatic-ntlm-auth.allow-non-fqdn" = true; + "network.negotiate-auth.allow-non-fqdn" = true; + }; +} diff --git a/hm/profiles/apps/browser-firefox/profiles/color-tree-tabs.nix b/hm/profiles/apps/browser-firefox/profiles/color-tree-tabs.nix new file mode 100644 index 00000000..aa763fd9 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/profiles/color-tree-tabs.nix @@ -0,0 +1,106 @@ +{ + inputs, + config, + lib, + pkgs, + ... +}: let + isGnome = config.gtk.enable; + + gnome-theme = builtins.fetchGit { + url = "https://github.com/rafaelmardojai/firefox-gnome-theme"; + rev = "ec9421f82d922b7293ffd45a47f7abdee80038c6"; + }; + hover-tab = builtins.fetchGit { + url = "https://github.com/easonwong-de/Tab-Preview-On-Hover/tree/main/CSS%20Theme"; + rev = "585f559a1dbfc6effb460ece3c28d91d02a31472"; + }; + recolor-tab = builtins.fetchGit { + url = "https://github.com/Redundakitties/colorful-minimalist"; + rev = "bbb1dbb855de6c0cccf9f9e712ad42e955568193"; + }; + sidebar = builtins.fetchGit { + url = "https://github.com/drannex42/FirefoxSidebar"; + rev = "d99c43774b56226834c273c131563dfa9625f58d"; + }; + csshacks = builtins.fetchGit { + url = "https://github.com/MrOtherGuy/firefox-csshacks"; + rev = "67a9e9f9c96e6d007b4c57f1dd7eaceaee135178"; + }; +in { + # TODO: Recursively merge & override the default profile. + programs.firefox.profiles.colors = lib.mkIf isGnome { + name = "Colors"; + isDefault = true; # config.services.xserver.; + package = pkgs.firefox.override { + nativeMessagingHosts = [pkgs.tridactyl-native pkgs.gnome-browser-connector]; + }; + + # --- Extensions --- + # Sidebery + # https://addons.mozilla.org/en-US/firefox/addon/adaptive-tab-bar-colour + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + gnome-shell-integration + gsconnect + ]; + + # --- Settings --- + # TODO: Load sidebery-data.json into Sidebery extension settings. + settings = { + # --- Options: Defaults = Set --- + "browser.theme.dark-private-windows" = false; + "browser.uidensity" = 0; + "svg.content-properties.content.enabled" = true; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + # --- Options: Defaults = Unset --- + "gnomeTheme.normalWidthTabs" = false; + "gnomeTheme.closeOnlySelectedTabs" = true; + "gnomeTheme.hideUnifiedExtensions" = false; + "gnomeTheme.tabsAsHeaderbar" = false; + # --- Options: Changed from default --- + "gnomeTheme.activeTabContrast" = true; + "gnomeTheme.bookmarksToolbarUnderTabs" = true; + "gnomeTheme.hideWebrtcIndicator" = true; + "gnomeTheme.symbolicTabIcons" = true; + "gnomeTheme.systemIcons" = true; + # --- Color Blending --- + "layout.css.backdrop-filter.force-enabled" = true; + "layout.css.color-mix.enabled" = true; + "layout.css.color-mix.color-spaces.enabled" = true; + }; + + # --- Browser chrome theming --- + # TODO: @import "${pkgs.nur.repos.federicoschonborn.firefox-gnome-theme}/userChrome.css"; + # https://github.com/Redundakitties/colorful-minimalist + # https://raw.githubusercontent.com/easonwong-de/Tab-Preview-On-Hover/main/CSS%20Theme/userChrome.css + userChrome = '' + @import url(${gnome-theme}/userChrome.css); + @import url(${gnome-theme}/theme/extensions/adaptive-tab-bar-color.css); + @import url(${gnome-theme}/theme/extensions/tab-center-reborn.css); + @import url(${hover-tab}/CSS\ Theme/userChrome.css); + @import url(${recolor-tab}/hacks/sideberyModsLEFT.css); + /* sideberyModsLeftSlide.css, sideberyMods.css, menuShow.css */ + @import url(${sidebar}/userChrome.css); + @import url(${sidebar}/themes/gtk_adwaita.css); + @import url(${csshacks}/chrome/compact_extensions_panel.css); + @import url(${csshacks}/chrome/urlbar_connection_type_text_colors.css); + @import url(${csshacks}/chrome/urlbar_connection_type_background_colors.css); + @import url(${csshacks}/chrome/urlbar_container_color_border.css); + @import url(${csshacks}/chrome/multi-row-bookmarks.css); + @import url(${csshacks}/chrome/page_action_buttons_on_urlbar_hover.css); + /* @import url(${csshacks}/chrome/tab-hover-preview.css); */ + /* @import url(${csshacks}/chrome/autohide_sidebar.css); */ + ''; + + # --- Browser content theming --- + userContent = '' + @import url(${gnome-theme}/userContent.css); + ''; + }; + + home.packages = [ + # https://github.com/rafaelmardojai/firefox-gnome-theme + # TODO: Import this in userChrome / userContent + pkgs.nur.repos.federicoschonborn.firefox-gnome-theme + ]; +} diff --git a/hm/profiles/apps/browser-firefox/profiles/default.nix b/hm/profiles/apps/browser-firefox/profiles/default.nix new file mode 100644 index 00000000..6e0d9f16 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/profiles/default.nix @@ -0,0 +1,83 @@ +{ self +, inputs +, config +, lib +, pkgs +, ... +}: +#let +# #foldImport = with lib.lists; t: (fold (x: y: unique (x ++ import "../${t}/${y}.nix")) "default"); +# #importTitle = t: f: import "../${t}/${f}.nix"; +# importTitle = t: f: import "../${t}/${f}.nix" {inherit pkgs;}; +# importTitles = t: fs: lib.lists.forEach (fs++["default"]) (importTitle t); +# importTitleAttr = t: a: importTitles t a."${t}"; +# importAttrs = t: a: lib.list.fold (x: y: lib.attrsets.recursiveUpdate x y) {} (importTitleAttr t a); +# importLists = t: a: lib.list.fold (x: y: lib.lists.unique x++y) [] importTitleAttr t a; +# +# foldImportList = t: att: lib.lists.fold (x: y: lib.lists.unique (x ++ import "../${t}/${y}.nix")) "default"; +# foldImportListPkg = t: lib.lists.fold (x: y: lib.lists.unique (x ++ import "../${t}/${y}.nix" {inherit pkgs;})) "default"; +# foldImportAttrsPkg = t: att: lib.lists.fold (x: y: lib.attrsets.recursiveUpdate x (import "../${t}/${y}.nix" {inherit pkgs;})) "default" att."${t}"; +# foldImportStr = t: att: (lib.lists.concatStringSep "\n" ( +# lib.lists.forEach (att."${t}"++["default"]) (s: import "../styles/${t}/${s}.nix") +# )); +# mkFirefoxProfile = name: imports: overrides: { +# inherit name; +# isDefault = false; +# bookmarks = foldImportList imports.bookmarks; +# #forEach ([ "default" ] ++ imports) () +# #foldr (x: y: x ++ y) +# #(unique forEach ([ "default" ] ++ imports) (b: import "../bookmarks/${b}.nix")); +# #search.engines = import ../search {inherit pkgs;}; +# #extensions = import ../extensions {inherit pkgs;}; +# extensions = foldImportListPkg "extensions" imports; +# search.default = "DuckDuckGo"; +# search.engines = foldImportAttrsPkg "search" imports; +# settings = import ../settings; +# userChrome = foldImportStr "chrome" imports; +# userContent = foldImportStr "content" imports; +# } // overrides; +#in +let + ff-extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + #bitwarden + ]; +in +{ + # TODO: `../styles/chrome/gnome.nix` # firefox-gnome-theme port to Nix + # TODO: `../styles/chrome/mobile.nix` # firefox-mobile-css port to Nix, read global option + # TODO: `../styles/content/dark-mode.nix` # Adapt websites to light/dark mode + # TODO: `../styles/content/colors.nix` # Material You theming based on desktop wallpaper + + # Install firefox extension packages from rycee's NUR repo + home.packages = [ + pkgs.nur.repos.rycee.mozilla-addons-to-nix + ]; + + # Build default profile from imports + programs.firefox.profiles.default = { + isDefault = true; + name = "Default"; + + #bookmarks = import ../bookmarks; + #extensions = import ../extensions { inherit inputs pkgs; }; + extensions = ff-extensions; + #search.default = "DuckDuckGo"; + #settings = import ../settings; + }; + + programs.firefox.profiles.testing = { + isDefault = false; + id = 1; + name = "Testing"; + + bookmarks = import ../bookmarks; + #extensions = import ../extensions { inherit inputs pkgs; }; + extensions = ff-extensions; + search.default = "DuckDuckGo"; + search.engines = import ../search { inherit inputs pkgs; }; + settings = import ../settings; + userChrome = import ../styles/chrome; + userContent = import ../styles/content; + }; + +} diff --git a/hm/profiles/apps/browser-firefox/profiles/default/default.nix b/hm/profiles/apps/browser-firefox/profiles/default/default.nix new file mode 100644 index 00000000..6fcf589f --- /dev/null +++ b/hm/profiles/apps/browser-firefox/profiles/default/default.nix @@ -0,0 +1,51 @@ +{ inputs +, config, lib, pkgs +, ... +}: +{ + imports = [ + ]; + + programs.firefox.profiles.default = { + name = "Default"; + isDefault = true; + + bookmarks = import ../../bookmarks; + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + firemonkey + adnauseam + behave + canvasblocker + clearurls + localcdn + multi-account-containers + noscript + privacy-badger + privacy-pass + skip-redirect + smart-referrer + ubo-scope + buster-captcha-solver + ninja-cookie + gnome-shell-integration + gsconnect + lovely-forks + react-devtools + wayback-machine + bitwarden + floccus + export-tabs-urls-and-titles + sidebery + simple-tab-groups + tab-session-manager + tab-stash + ]; + search = { + default = "DuckDuckGo"; + engines = import ../../search { inherit inputs pkgs; }; + }; + settings = import ../../settings; + userChrome = import ../../styles/chrome; + userContent = import ../../styles/content; + }; +} diff --git a/hm/profiles/apps/browser-firefox/profiles/gnome/default.nix b/hm/profiles/apps/browser-firefox/profiles/gnome/default.nix new file mode 100644 index 00000000..db68cca9 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/profiles/gnome/default.nix @@ -0,0 +1,61 @@ +{ + inputs, + config, + lib, + pkgs, + ... +}: let + isGnome = config.gtk.enable; +in { + # TODO: Recursively merge & override the default profile. + programs.firefox.profiles.gnome = lib.mkIf isGnome { + name = "GNOME"; + isDefault = true; # config.services.xserver.; + package = pkgs.firefox.override { + nativeMessagingHosts = [pkgs.tridactyl-native pkgs.gnome-browser-connector]; + }; + + extensions = + # with inputs.nur.repos.rycee.firefox-addons; [ + with pkgs.nur.repos.rycee.firefox-addons; [ + gnome-shell-integration + gsconnect + ]; + + settings = { + # --- Options: Defaults = Set --- + "browser.theme.dark-private-windows" = false; + "browser.uidensity" = 0; + "svg.content-properties.content.enabled" = true; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + # --- Options: Defaults = Unset --- + "gnomeTheme.normalWidthTabs" = false; + "gnomeTheme.closeOnlySelectedTabs" = true; + "gnomeTheme.hideUnifiedExtensions" = false; + "gnomeTheme.tabsAsHeaderbar" = false; + # --- Options: Changed from default --- + "gnomeTheme.activeTabContrast" = true; + "gnomeTheme.bookmarksToolbarUnderTabs" = true; + "gnomeTheme.hideWebrtcIndicator" = true; + "gnomeTheme.symbolicTabIcons" = true; + "gnomeTheme.systemIcons" = true; + }; + + # TODO: @import "${pkgs.nur.repos.federicoschonborn.firefox-gnome-theme}/userChrome.css"; + # https://raw.githubusercontent.com/easonwong-de/Tab-Preview-On-Hover/main/CSS%20Theme/userChrome.css + userChrome = '' + @import "firefox-gnome-theme/userChrome.css"; + @import "firefox-gnome-theme/theme/extensions/adaptive-tab-bar-color.css"; + @import "firefox-gnome-theme/theme/extensions/tab-center-reborn.css"; + ''; + userContent = '' + @import "firefox-gnome-theme/userContent.css"; + ''; + }; + + home.packages = [ + # https://github.com/rafaelmardojai/firefox-gnome-theme + # TODO: Import this in userChrome / userContent + pkgs.nur.repos.federicoschonborn.firefox-gnome-theme + ]; +} diff --git a/hm/profiles/apps/browser-firefox/profiles/profiles.ini.bak b/hm/profiles/apps/browser-firefox/profiles/profiles.ini.bak new file mode 100644 index 00000000..d9b81be5 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/profiles/profiles.ini.bak @@ -0,0 +1,10 @@ +[Profile0] +Name=default +IsRelative=1 +Path=1w6jwqpv.default +Default=1 + +[General] +StartWithLastProfile=1 +Version=2 + diff --git a/hm/profiles/apps/browser-firefox/search/default.nix b/hm/profiles/apps/browser-firefox/search/default.nix new file mode 100644 index 00000000..42e1fc20 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/search/default.nix @@ -0,0 +1,28 @@ +#{ self, inputs, +# config, lib, pkgs, +{ pkgs, + ... +}: +# TODO: import "./personal.nix" +# TODO: import "./personal.nix" +# TODO: import "./privacy.nix" +# TODO: import "./archlinux.nix" +# TODO: import "./dev.nix" +# TODO: import "./torrent.nix" +# TODO: import "./unprivate.nix" +( + import ./nixos.nix { inherit pkgs; } +) // +{ + + # --- Search Engines --- + #programs.firefox.profiles.default.search.default = "DuckDuckGo"; + #programs.firefox.profiles.default.search.engines = { + # TODO: Determine if each engine should have its own file, or use groups of engines in files. + + # TODO: Move Google, Bing to `./unprivate.nix` + "Bing".metaData.hidden = true; + "DuckDuckGo".metaData.alias = "@d"; + "Google".metaData.alias = "@g"; # builtin engines only support specifying one additional alias + +} diff --git a/hm/profiles/apps/browser-firefox/search/nixos.nix b/hm/profiles/apps/browser-firefox/search/nixos.nix new file mode 100644 index 00000000..b95b1c0b --- /dev/null +++ b/hm/profiles/apps/browser-firefox/search/nixos.nix @@ -0,0 +1,31 @@ +#{ self, inputs, +# lib, pkgs, config, +{ pkgs, + ... +}: +{ + # TODO: Home Manager Options + # TODO: NixOS Options + # TODO: Nix Flakes + # TODO: NUR Repos + # TODO: Noogle.dev + + "Nix Packages" = { + urls = [{ + template = "https://search.nixos.org/packages"; + params = [ + { name = "type"; value = "packages"; } + { name = "query"; value = "{searchTerms}"; } + ]; + }]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@np" ]; + }; + + "NixOS Wiki" = { + urls = [{ template = "https://nixos.wiki/index.php?search={searchTerms}"; }]; + iconUpdateURL = "https://nixos.wiki/favicon.png"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = [ "@nw" ]; + }; +} diff --git a/hm/profiles/apps/browser-firefox/settings/arkenfox.nix b/hm/profiles/apps/browser-firefox/settings/arkenfox.nix new file mode 100644 index 00000000..feeafaf0 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/settings/arkenfox.nix @@ -0,0 +1,118 @@ +{ self, inputs, config, lib, pkgs, + profile, + ... +}: + +# https://github.com/arkenfox/user.js +# https://arkenfox.github.io/gui/ + +let + arkenfox = { + base = builtins.readFile ./user.js; # TODO: Use fetcher + sections = { + enable = true; + "0000".enable = true; # Global + "0100".enable = true; # Startup + "0200".enable = true; # Geolocation / Language / Locale + "0300".enable = true; # Quieter Fox + "0400".enable = true; # Safe Browsing + "0600".enable = true; # Block Implicit Outbound + "0700".enable = true; # DNS / DoH / Proxy / SOCKS / IPv6 + "0800".enable = true; # Location Bar / Search Bar / Suggestions / History / Forms + "0900".enable = true; # Passwords + "1000".enable = true; # Disk Avoidance + "1200".enable = true; # TLS / SSL + "1400".enable = true; # Fonts + "1600".enable = true; # Headers / Referrers + "1700".enable = true; # Containers + "2000".enable = true; # Plugins / Media / WebRTC + "2400".enable = true; # DOM + "2600".enable = true; # Misc + + #"0000".enable = true; + "0001".enable = true; + "0002".enable = true; + "0003".enable = true; + "0004".enable = true; + "0005".enable = true; + "0006".enable = true; + "0007".enable = true; + "0008".enable = true; + "0009".enable = true; + "0010".enable = true; + "0011".enable = true; + "0012".enable = true; + "0013".enable = true; + "0014".enable = true; + "0015".enable = true; + "0016".enable = true; + "0017".enable = true; + "0018".enable = true; + "0019".enable = true; + "0020".enable = true; + "0021".enable = true; + "0022".enable = true; + "0023".enable = true; + "0024".enable = true; + "0025".enable = true; + "0026".enable = true; + }; + + # TODO: Add iPhone, Windows (1080p monitor) screen resolutions + # TODO: Check 5000s (optional) & 9000s (personal) + overrides.default = '' + + user_pref("browser.startup.page", 3); // Enable browser start page (3=restore-session) + + //user_pref("browser.formfill.enable", true); // Enable form auto-fill + + //user_pref("security.cert_pinning.enforcement_level", 2); // + + //user_pref("netowrk.http.referer.XOriginPolicy", 0); // Pair w/ Smart Referer extension (Strict mode + add exceptions) + + user_pref("media.eme.enabled", true); // Allow DRM + + user_pref("privacy.clearOnShutdown.cache", false); // [DEFAULT: true] + user_pref("privacy.clearOnShutdown.downloads", false); // [DEFAULT: true] + user_pref("privacy.clearOnShutdown.formdata", true); // [DEFAULT: true] + user_pref("privacy.clearOnShutdown.history", false); // [DEFAULT: true] + user_pref("privacy.clearOnShutdown.sessions", false); // [DEFAULT: true] + + user_pref("webgl.disabled", false); // [DEFAULT: true] + + //user_pref("privacy.resistFingerprinting.letterboxing", false); // Disable borders + user_pref("privacy.resistFingerprinting.letterboxing.dimensions", "800x600, 1000x1000, 1920x1080"); // [HIDDEN PREF] + // user_pref("privacy.window.maxInnerWidth", 1600); // 4502 [default 1600 in user.js v95] + // user_pref("privacy.window.maxInnerHeight", 900); // 4502 [default 900 in user.js v95] + + user_pref("browser.display.use_system_colors", true); + user_pref("widget.non-native-theme.enabled", false); + //user_pref("ui.use_standins_for_native_colors", ""); + + ''; + + overrides.loose = '' + + ''; + }; + + settings = lib.mkIf config.programs.firefox.arkenfox { + }; +in +{ + # --- Arkenfox Flake --- + #https://github.com/dwarfmaster/arkenfox-nixos + #https://arkenfox.dwarfmaster.net + #imports = [ inputs.arkenfox.hmModules.default ]; + programs.firefox.arkenfox = { + enable = true; + #version = "112.0"; + }; + programs.firefox.profiles.arkenfox.arkenfox = arkenfox.sections; + programs.firefox.profiles.default.arkenfox = arkenfox.sections; + + # --- Manual Config --- + #programs.firefox.profiles.arkenfox.extraConfig = arkenfox.base; + #programs.firefox.profiles.default.extraConfig = arkenfox.base ++ arkenfox.overrides.default; + +} diff --git a/hm/profiles/apps/browser-firefox/settings/default.nix b/hm/profiles/apps/browser-firefox/settings/default.nix new file mode 100644 index 00000000..23c3f593 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/settings/default.nix @@ -0,0 +1,31 @@ +#{ self, modulesPath, inputs, outputs, config, lib, pkgs, +# host, network, repo, +# ... +#}: +#let +# gnome-settings = import ./gnome.nix; +#in gnome-settings // +import ./gnome.nix // +import ./privacy.nix // +{ + #imports = [ + # ./arkenfox.nix + # ./gnome.nix # firefox-gnome-theme + #]; + + #programs.firefox.profiles.default.settings = { + #}; + #profiles.firefox.profiles.default.settings = { + # "browser.startup.homepage" = "https://nixos.org"; + # "browser.search.region" = "US"; + # "browser.search.isUS" = true; + # "distribution.searchplugins.defaultLocale" = "en-US"; + # "general.useragent.locale" = "en-US"; + # "browser.bookmarks.showMobileBookmarks" = true; + # "browser.newtabpage.pinned" = [ + # { title = "NixOS"; url = "https://nixos.org"; } + # { title = "Config"; url = "about:config"; } + # ]; + #}; + +} diff --git a/hm/profiles/apps/browser-firefox/settings/gnome.nix b/hm/profiles/apps/browser-firefox/settings/gnome.nix new file mode 100644 index 00000000..cedd8274 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/settings/gnome.nix @@ -0,0 +1,25 @@ +#{ self, inputs, config, lib, pkgs, ... }: +{ + # https://github.com/rafaelmardojai/firefox-gnome-theme + #programs.firefox.profiles.*.settings = {...}; + + # --- Defaults Set --- + "browser.theme.dark-private-windows" = false; + "browser.uidensity" = 0; + "svg.content-properties.content.enabled" = true; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + + # --- Defaults Unset --- + "gnomeTheme.normalWidthTabs" = false; + "gnomeTheme.closeOnlySelectedTabs" = true; + "gnomeTheme.hideUnifiedExtensions" = false; + "gnomeTheme.tabsAsHeaderbar" = false; + + # --- Changed Options --- + "gnomeTheme.activeTabContrast" = true; + "gnomeTheme.bookmarksToolbarUnderTabs" = true; + "gnomeTheme.dragWindowHeaderbarButtons" = true; + "gnomeTheme.hideWebrtcIndicator" = false; + "gnomeTheme.symbolicTabIcons" = true; + "gnomeTheme.systemIcons" = true; +} diff --git a/hm/profiles/apps/browser-firefox/settings/prefs.js b/hm/profiles/apps/browser-firefox/settings/prefs.js new file mode 100644 index 00000000..ee5b9f02 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/settings/prefs.js @@ -0,0 +1,227 @@ +// Mozilla User Preferences + +// DO NOT EDIT THIS FILE. +// +// If you make changes to this file while the application is running, +// the changes will be overwritten when the application exits. +// +// To change a preference value, you can either: +// - modify it via the UI (e.g. via about:config in the browser); or +// - set it within a user.js file in your profile. + +user_pref("accessibility.typeaheadfind.flashBar", 0); +user_pref("app.normandy.first_run", false); +user_pref("app.normandy.migrationsApplied", 12); +user_pref("app.normandy.user_id", "d8a028e5-3b06-453c-9b3b-ac50eaf2599f"); +user_pref("app.update.lastUpdateTime.addon-background-update-timer", 1684338198); +user_pref("app.update.lastUpdateTime.browser-cleanup-thumbnails", 1684368807); +user_pref("app.update.lastUpdateTime.recipe-client-addon-run", 1684358247); +user_pref("app.update.lastUpdateTime.region-update-timer", 1684165850); +user_pref("app.update.lastUpdateTime.rs-experiment-loader-timer", 1684358127); +user_pref("app.update.lastUpdateTime.search-engine-update-timer", 1681741278); +user_pref("app.update.lastUpdateTime.services-settings-poll-changes", 1684338078); +user_pref("app.update.lastUpdateTime.telemetry_modules_ping", 1684165638); +user_pref("app.update.lastUpdateTime.xpi-signature-verification", 1684338318); +user_pref("browser.aboutConfig.showWarning", false); +user_pref("browser.bookmarks.addedImportButton", true); +user_pref("browser.bookmarks.defaultLocation", "ppzW9NubxMIt"); +user_pref("browser.bookmarks.editDialog.confirmationHintShowCount", 3); +user_pref("browser.bookmarks.editDialog.firstEditField", "tagsField"); +user_pref("browser.bookmarks.restore_default_bookmarks", false); +user_pref("browser.contentblocking.category", "standard"); +user_pref("browser.contentblocking.cfr-milestone.milestone-achieved", 10000); +user_pref("browser.contentblocking.cfr-milestone.milestone-shown-time", "1682602765887"); +user_pref("browser.contextual-services.contextId", "{bf1c9726-9c7a-4788-be11-b587e30e2d7c}"); +user_pref("browser.download.lastDir", "/home/sam/Code/piwc-website/frontend/assets"); +user_pref("browser.download.panel.shown", true); +user_pref("browser.download.save_converter_index", 0); +user_pref("browser.download.viewableInternally.typeWasRegistered.avif", true); +user_pref("browser.download.viewableInternally.typeWasRegistered.webp", true); +user_pref("browser.engagement.downloads-button.has-used", true); +user_pref("browser.laterrun.bookkeeping.profileCreationTime", 1680320051); +user_pref("browser.laterrun.bookkeeping.sessionCount", 25); +user_pref("browser.migration.version", 136); +user_pref("browser.newtabpage.activity-stream.discoverystream.rec.impressions", "{\"158892\":1680608988999,\"160749\":1680608988989,\"161272\":1680550155845,\"161274\":1680556889208,\"161277\":1680608988995,\"356787840\":1680608989006,\"356810338\":1680608988981}"); +user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false); +user_pref("browser.newtabpage.activity-stream.impressionId", "{2fa2c68f-50f3-467f-aae1-3756cb9103f0}"); +user_pref("browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.havePinned", "amazon,google"); +user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false); +user_pref("browser.newtabpage.activity-stream.topSitesRows", 4); +user_pref("browser.newtabpage.blocked", "{\"4gPpjkxgZzXPVtuEoAL9Ig==\":1,\"gLv0ja2RYVgxKdp0I5qwvA==\":1,\"T9nJot5PurhJSy8n038xGA==\":1,\"BRX66S9KVyZQ1z3AIk0A7w==\":1}"); +user_pref("browser.newtabpage.pinned", "[{\"url\":\"https://vault.bitwarden.com/\",\"label\":\"Bitwarden\",\"baseDomain\":\"vault.bitwarden.com\"},{\"url\":\"https://search.nixos.org/\",\"label\":\"NixOS Packages\",\"baseDomain\":\"search.nixos.org\"},{\"url\":\"https://discourse.nixos.org/\",\"label\":\"NixOS Discourse\",\"baseDomain\":\"discourse.nixos.org\"},{\"url\":\"https://rycee.gitlab.io/home-manager/options.html\",\"label\":\"HomeManager Options\",\"baseDomain\":\"rycee.gitlab.io\"},{\"url\":\"https://github.com/PresqueIsleWineDev\",\"label\":\"GitHub - PresqueIsleWineDev\",\"baseDomain\":\"github.com\"},{\"url\":\"https://www.piwine.com/winemaking.html\",\"label\":\"piwine.com\",\"baseDomain\":\"piwine.com\"},{\"url\":\"https://nix-community.github.io/home-manager/options.html\",\"label\":\"HomeManager Options\",\"baseDomain\":\"nix-community.github.io\"},{\"url\":\"https://google.com\",\"label\":\"@google\",\"searchTopSite\":true,\"baseDomain\":\"google.com\"},null,null,null,null,null,null,null,null,{\"url\":\"https://noogle.dev/\"}]"); +user_pref("browser.newtabpage.storageVersion", 1); +user_pref("browser.pageActions.persistedActions", "{\"ids\":[\"bookmark\",\"canvasblocker_kkapsner_de\",\"_testpilot-containers\",\"tab-stash_condordes_net\"],\"idsInUrlbar\":[\"canvasblocker_kkapsner_de\",\"_testpilot-containers\",\"tab-stash_condordes_net\",\"bookmark\"],\"idsInUrlbarPreProton\":[],\"version\":1}"); +user_pref("browser.pagethumbnails.storage_version", 3); +user_pref("browser.protections_panel.infoMessage.seen", true); +user_pref("browser.proton.toolbar.version", 3); +user_pref("browser.region.update.updated", 1684165850); +user_pref("browser.rights.3.shown", true); +user_pref("browser.safebrowsing.provider.mozilla.lastupdatetime", "1684361015264"); +user_pref("browser.safebrowsing.provider.mozilla.nextupdatetime", "1684382615264"); +user_pref("browser.search.region", "US"); +user_pref("browser.sessionstore.upgradeBackup.latestBuildID", "20230506144444"); +user_pref("browser.shell.checkDefaultBrowser", false); +user_pref("browser.shell.didSkipDefaultBrowserCheckOnFirstRun", true); +user_pref("browser.startup.couldRestoreSession.count", 2); +user_pref("browser.startup.homepage_override.buildID", "20230506144444"); +user_pref("browser.startup.homepage_override.mstone", "112.0.2"); +user_pref("browser.startup.lastColdStartupCheck", 1684354257); +user_pref("browser.startup.upgradeDialog.version", 106); +user_pref("browser.theme.dark-private-windows", false); +user_pref("browser.uiCustomization.state", "{\"placements\":{\"widget-overflow-fixed-list\":[],\"unified-extensions-area\":[\"_48748554-4c01-49e8-94af-79662bf34d50_-browser-action\",\"adnauseam_rednoise_org-browser-action\",\"canvasblocker_kkapsner_de-browser-action\",\"_testpilot-containers-browser-action\",\"chrome-gnome-shell_gnome_org-browser-action\",\"gsconnect_andyholmes_github_io-browser-action\",\"firemonkey_eros_man-browser-action\",\"_17165bd9-9b71-4323-99a5-3d4ce49f3d75_-browser-action\",\"_b86e4813-687a-43e6-ab65-0bde4ab75758_-browser-action\",\"wayback_machine_mozilla_org-browser-action\",\"_e58d3966-3d76-4cd9-8552-1582fbc800c1_-browser-action\",\"github-forks-addon_musicallyut_in-browser-action\",\"tab-stash_condordes_net-browser-action\",\"_36bdf805-c6f2-4f41-94d2-9b646342c1dc_-browser-action\"],\"nav-bar\":[\"back-button\",\"forward-button\",\"stop-reload-button\",\"customizableui-special-spring1\",\"urlbar-container\",\"customizableui-special-spring2\",\"downloads-button\",\"fxa-toolbar-menu-button\",\"_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action\"],\"toolbar-menubar\":[\"menubar-items\"],\"TabsToolbar\":[\"tabbrowser-tabs\",\"new-tab-button\",\"alltabs-button\"],\"PersonalToolbar\":[\"import-button\",\"personal-bookmarks\"]},\"seen\":[\"save-to-pocket-button\",\"developer-button\",\"_48748554-4c01-49e8-94af-79662bf34d50_-browser-action\",\"adnauseam_rednoise_org-browser-action\",\"_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action\",\"canvasblocker_kkapsner_de-browser-action\",\"_testpilot-containers-browser-action\",\"chrome-gnome-shell_gnome_org-browser-action\",\"gsconnect_andyholmes_github_io-browser-action\",\"firemonkey_eros_man-browser-action\",\"_17165bd9-9b71-4323-99a5-3d4ce49f3d75_-browser-action\",\"_b86e4813-687a-43e6-ab65-0bde4ab75758_-browser-action\",\"wayback_machine_mozilla_org-browser-action\",\"_e58d3966-3d76-4cd9-8552-1582fbc800c1_-browser-action\",\"github-forks-addon_musicallyut_in-browser-action\",\"tab-stash_condordes_net-browser-action\",\"_36bdf805-c6f2-4f41-94d2-9b646342c1dc_-browser-action\"],\"dirtyAreaCache\":[\"nav-bar\",\"PersonalToolbar\",\"TabsToolbar\",\"unified-extensions-area\",\"toolbar-menubar\"],\"currentVersion\":19,\"newElementCount\":2}"); +user_pref("browser.urlbar.placeholderName", "DuckDuckGo"); +user_pref("browser.urlbar.placeholderName.private", "DuckDuckGo"); +user_pref("browser.urlbar.quicksuggest.migrationVersion", 2); +user_pref("browser.urlbar.quicksuggest.scenario", "offline"); +user_pref("browser.urlbar.tipShownCount.searchTip_onboard", 4); +user_pref("browser.urlbar.tipShownCount.searchTip_redirect", 1); +user_pref("datareporting.policy.dataSubmissionPolicyAcceptedVersion", 2); +user_pref("datareporting.policy.dataSubmissionPolicyNotifiedTime", "1680320054323"); +user_pref("devtools.debugger.end-panel-size", 213); +user_pref("devtools.debugger.pending-selected-location", "{\"sourceId\":\"source-url-https://www.piwine.com/cgi-piwine/sb/order.cgi\",\"line\":1195,\"column\":12,\"sourceActorId\":\"server0.conn0.windowGlobal32212254779/source59\",\"url\":\"https://www.piwine.com/cgi-piwine/sb/order.cgi\"}"); +user_pref("devtools.debugger.prefs-schema-version", 11); +user_pref("devtools.debugger.start-panel-size", 183); +user_pref("devtools.everOpened", true); +user_pref("devtools.inspector.activeSidebar", "computedview"); +user_pref("devtools.inspector.selectedSidebar", "computedview"); +user_pref("devtools.netmonitor.columnsData", "[{\"name\":\"status\",\"minWidth\":30,\"width\":3.6},{\"name\":\"method\",\"minWidth\":30,\"width\":6.67},{\"name\":\"domain\",\"minWidth\":30,\"width\":15.84},{\"name\":\"file\",\"minWidth\":30,\"width\":35.78},{\"name\":\"url\",\"minWidth\":30,\"width\":25},{\"name\":\"initiator\",\"minWidth\":30,\"width\":13.33},{\"name\":\"type\",\"minWidth\":30,\"width\":6.67},{\"name\":\"transferred\",\"minWidth\":30,\"width\":13.33},{\"name\":\"contentSize\",\"minWidth\":30,\"width\":4.79},{\"name\":\"waterfall\",\"minWidth\":150,\"width\":11.54}]"); +user_pref("devtools.netmonitor.msg.visibleColumns", "[\"data\",\"time\"]"); +user_pref("devtools.toolbox.host", "right"); +user_pref("devtools.toolbox.previousHost", "bottom"); +user_pref("devtools.toolbox.selectedTool", "netmonitor"); +user_pref("devtools.toolbox.sidebar.width", 338); +user_pref("devtools.toolbox.splitconsoleEnabled", true); +user_pref("devtools.toolbox.splitconsoleHeight", 299); +user_pref("devtools.toolbox.zoomValue", "1.3"); +user_pref("devtools.toolsidebar-height.inspector", 350); +user_pref("devtools.toolsidebar-width.inspector", 700); +user_pref("devtools.toolsidebar-width.inspector.splitsidebar", 225); +user_pref("distribution.iniFile.exists.appversion", "112.0.2"); +user_pref("distribution.iniFile.exists.value", true); +user_pref("distribution.nixos.bookmarksProcessed", true); +user_pref("doh-rollout.doneFirstRun", true); +user_pref("doh-rollout.doorhanger-decision", "UIOk"); +user_pref("doh-rollout.home-region", "US"); +user_pref("doh-rollout.mode", 2); +user_pref("doh-rollout.self-enabled", true); +user_pref("doh-rollout.uri", "https://mozilla.cloudflare-dns.com/dns-query"); +user_pref("dom.forms.autocomplete.formautofill", true); +user_pref("dom.push.userAgentID", "d44b6fd7802343498c79ad96911bbe8c"); +user_pref("extensions.activeThemeID", "default-theme@mozilla.org"); +user_pref("extensions.blocklist.pingCountVersion", -1); +user_pref("extensions.databaseSchema", 35); +user_pref("extensions.getAddons.cache.lastUpdate", 1684338199); +user_pref("extensions.getAddons.databaseSchema", 6); +user_pref("extensions.lastAppBuildId", "20230506144444"); +user_pref("extensions.lastAppVersion", "112.0.2"); +user_pref("extensions.lastPlatformVersion", "112.0.2"); +user_pref("extensions.pendingOperations", false); +user_pref("extensions.pictureinpicture.enable_picture_in_picture_overrides", true); +user_pref("extensions.systemAddonSet", "{\"schema\":1,\"addons\":{}}"); +user_pref("extensions.ui.dictionary.hidden", true); +user_pref("extensions.ui.extension.hidden", false); +user_pref("extensions.ui.lastCategory", "addons://list/extension"); +user_pref("extensions.ui.locale.hidden", true); +user_pref("extensions.ui.plugin.hidden", false); +user_pref("extensions.ui.sitepermission.hidden", true); +user_pref("extensions.webcompat.enable_shims", true); +user_pref("extensions.webcompat.perform_injections", true); +user_pref("extensions.webcompat.perform_ua_overrides", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.@testpilot-containers", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.CanvasBlocker@kkapsner.de", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.adnauseam@rednoise.org", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.chrome-gnome-shell@gnome.org", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.firemonkey@eros.man", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.github-forks-addon@musicallyut.in", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.screenshots@mozilla.org", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.tab-stash@condordes.net", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.wayback_machine@mozilla.org", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.{36bdf805-c6f2-4f41-94d2-9b646342c1dc}", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.{446900e4-71c2-419f-a6a7-df9c091e268b}", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.{b86e4813-687a-43e6-ab65-0bde4ab75758}", true); +user_pref("extensions.webextensions.ExtensionStorageIDB.migrated.{e58d3966-3d76-4cd9-8552-1582fbc800c1}", true); +user_pref("extensions.webextensions.uuids", "{\"github-forks-addon@musicallyut.in\":\"7267cb75-4698-4321-bb88-d09f79ac849a\",\"smart-referer@meh.paranoid.pk\":\"c38c80cb-15ea-4555-a0ae-5c2eb330c9fd\",\"skipredirect@sblask\":\"a29b5a08-96e9-4f81-917f-42263543c8e1\",\"{b86e4813-687a-43e6-ab65-0bde4ab75758}\":\"953d992e-ba3b-4f51-b6ef-9f615093fe8a\",\"simple-tab-groups@drive4ik\":\"83db3e10-2743-446f-839e-7beeaa199f29\",\"tab-stash@condordes.net\":\"e7f0d221-f023-44fa-bf56-40819f35f977\",\"floccus@handmadeideas.org\":\"1960decd-cc72-473e-a8c1-e7dac5688958\",\"{73a6fe31-595d-460b-a920-fcc0f8843232}\":\"fc5b81fd-eabf-4144-b5ef-2813d58a8a6e\",\"uBO-Scope@raymondhill.net\":\"d85a718f-acd9-49a6-916b-1d5c12e528b4\",\"firemonkey@eros.man\":\"89fe0ae7-57a7-4542-99be-2025f209edf7\",\"{e58d3966-3d76-4cd9-8552-1582fbc800c1}\":\"a44c368f-0888-4431-94f2-b6ddfcdcb5cd\",\"gsconnect@andyholmes.github.io\":\"3f34f79a-20f7-4a2b-8cc7-e19d58795fa8\",\"wayback_machine@mozilla.org\":\"0e8759a0-a3b7-4be2-a1a9-dc986fc641e6\",\"Tab-Session-Manager@sienori\":\"42ff1fc8-8422-47f1-ac77-a364b23b6ba7\",\"@react-devtools\":\"234ae2b3-431e-4eff-91fa-ab829dead24b\",\"{446900e4-71c2-419f-a6a7-df9c091e268b}\":\"b9085331-6eeb-42b7-a722-b4507d7427a2\",\"debug@ninja-cookie.com\":\"66f4276f-cc3d-4bce-948b-8ce0c1aa57c2\",\"CanvasBlocker@kkapsner.de\":\"2bba602a-19e3-4bc3-99f7-9df2612623c9\",\"privacy@privacy.com\":\"3113308b-a2b9-4cb8-a9c9-0602f17e87f5\",\"chrome-gnome-shell@gnome.org\":\"4a225421-2060-4d45-9993-6defbf75f395\",\"{74145f27-f039-47ce-a470-a662b129930a}\":\"e48f296a-e197-45ca-be50-da420134e55d\",\"@testpilot-containers\":\"7207068c-0a1e-4d75-9e04-971a85c32cac\",\"jid1-MnnxcxisBPnSXQ@jetpack\":\"bff1a893-97ad-4418-86b8-da72d172c346\",\"{48748554-4c01-49e8-94af-79662bf34d50}\":\"07cafc19-9614-49da-b748-272fb2a29d4b\",\"adnauseam@rednoise.org\":\"393c32c4-d5bf-411a-a4d2-2d3c6f1c92eb\",\"formautofill@mozilla.org\":\"16adf5e1-3cc6-44c6-9e16-9e1339803bfe\",\"pictureinpicture@mozilla.org\":\"8b02cf8c-1bfd-4d40-86c0-5a923da05107\",\"screenshots@mozilla.org\":\"0ab7b6a7-f7b7-4843-aa72-5c4bf6bc3086\",\"webcompat-reporter@mozilla.org\":\"afe18ac3-d16c-4572-8a58-2fff100cc2bf\",\"webcompat@mozilla.org\":\"0037762a-450a-4c4d-8578-85a1cc528ab6\",\"default-theme@mozilla.org\":\"75e994d9-edc3-481a-8af8-d9800aa9f470\",\"addons-search-detection@mozilla.com\":\"833ffc39-6f3f-4920-a0f6-301ba99644f6\",\"google@search.mozilla.org\":\"abc629dc-e421-4e12-b0cf-dc0d1c5cb75a\",\"amazondotcom@search.mozilla.org\":\"29765256-5281-43eb-a72b-40e1b070ce9f\",\"wikipedia@search.mozilla.org\":\"ac2c8570-57b9-4493-9a48-7dd9b3017d41\",\"bing@search.mozilla.org\":\"5d0610e6-9e94-4aaa-88c4-e36502a1fe68\",\"ddg@search.mozilla.org\":\"b77fdf20-3e65-4908-9603-6f170cb660c2\",\"ebay@search.mozilla.org\":\"8cf0bff0-192f-4f65-a51a-bd05381e9664\",\"{17165bd9-9b71-4323-99a5-3d4ce49f3d75}\":\"f99eeebd-ffa2-442a-8ae7-32e2db721928\",\"{36bdf805-c6f2-4f41-94d2-9b646342c1dc}\":\"e416dd8f-e45e-46ac-a215-ff92dc31a624\"}"); +user_pref("findbar.highlightAll", true); +user_pref("gecko.handlerService.defaultHandlersVersion", 1); +user_pref("idle.lastDailyNotification", 1684360437); +user_pref("media.gmp-gmpopenh264.abi", "x86_64-gcc3"); +user_pref("media.gmp-gmpopenh264.hashValue", "94531e267314de661b2205c606283fb066d781e5c11027578f2a3c3aa353437c2289544074a28101b6b6f0179f0fe6bd890a0ae2bb6e1cf9053650472576366c"); +user_pref("media.gmp-gmpopenh264.lastDownload", 1680320131); +user_pref("media.gmp-gmpopenh264.lastInstallStart", 1680736276); +user_pref("media.gmp-gmpopenh264.lastUpdate", 1680320131); +user_pref("media.gmp-gmpopenh264.version", "1.8.1.2"); +user_pref("media.gmp-manager.buildID", "20230506144444"); +user_pref("media.gmp-manager.lastCheck", 1684272306); +user_pref("media.gmp-manager.lastEmptyCheck", 1684272307); +user_pref("media.gmp.storage.version.observed", 1); +user_pref("media.videocontrols.picture-in-picture.video-toggle.has-used", true); +user_pref("network.dns.disablePrefetch", true); +user_pref("network.http.speculative-parallel-limit", 0); +user_pref("network.predictor.enabled", false); +user_pref("network.prefetch-next", false); +user_pref("pdfjs.enableScripting", false); +user_pref("pdfjs.enabledCache.state", true); +user_pref("pdfjs.migrationVersion", 2); +user_pref("places.database.lastMaintenance", 1683909892); +user_pref("privacy.purge_trackers.date_in_cookie_database", "0"); +user_pref("privacy.purge_trackers.last_purge", "1684360437512"); +user_pref("privacy.sanitize.pending", "[{\"id\":\"newtab-container\",\"itemsToClear\":[],\"options\":{}}]"); +user_pref("privacy.userContext.enabled", true); +user_pref("privacy.userContext.extension", "@testpilot-containers"); +user_pref("privacy.userContext.ui.enabled", true); +user_pref("security.sandbox.content.tempDirSuffix", "24bf6eb5-4f8d-4105-953c-420d5b3ed5fd"); +user_pref("services.settings.blocklists.addons-bloomfilters.last_check", 1684356364); +user_pref("services.settings.blocklists.gfx.last_check", 1684356364); +user_pref("services.settings.clock_skew_seconds", 0); +user_pref("services.settings.last_etag", "\"1684360088679\""); +user_pref("services.settings.last_update_seconds", 1684368686); +user_pref("services.settings.main.addons-manager-settings.last_check", 1684356364); +user_pref("services.settings.main.anti-tracking-url-decoration.last_check", 1684356364); +user_pref("services.settings.main.cfr.last_check", 1684356364); +user_pref("services.settings.main.cookie-banner-rules-list.last_check", 1684356364); +user_pref("services.settings.main.devtools-compatibility-browsers.last_check", 1684356364); +user_pref("services.settings.main.devtools-devices.last_check", 1684356364); +user_pref("services.settings.main.doh-config.last_check", 1684356364); +user_pref("services.settings.main.doh-providers.last_check", 1684356364); +user_pref("services.settings.main.fxmonitor-breaches.last_check", 1684356364); +user_pref("services.settings.main.hijack-blocklists.last_check", 1684356364); +user_pref("services.settings.main.language-dictionaries.last_check", 1684356364); +user_pref("services.settings.main.message-groups.last_check", 1684356364); +user_pref("services.settings.main.nimbus-desktop-experiments.last_check", 1684356364); +user_pref("services.settings.main.normandy-recipes-capabilities.last_check", 1684356364); +user_pref("services.settings.main.partitioning-exempt-urls.last_check", 1684356364); +user_pref("services.settings.main.password-recipes.last_check", 1684356364); +user_pref("services.settings.main.password-rules.last_check", 1684356364); +user_pref("services.settings.main.personality-provider-models.last_check", 1684356364); +user_pref("services.settings.main.personality-provider-recipe.last_check", 1684356364); +user_pref("services.settings.main.pioneer-study-addons-v1.last_check", 1684356364); +user_pref("services.settings.main.public-suffix-list.last_check", 1684356364); +user_pref("services.settings.main.query-stripping.last_check", 1684356364); +user_pref("services.settings.main.quicksuggest.last_check", 1684356364); +user_pref("services.settings.main.search-config.last_check", 1684356364); +user_pref("services.settings.main.search-default-override-allowlist.last_check", 1684356364); +user_pref("services.settings.main.search-telemetry-v2.last_check", 1684356364); +user_pref("services.settings.main.sites-classification.last_check", 1684356364); +user_pref("services.settings.main.tippytop.last_check", 1684356364); +user_pref("services.settings.main.top-sites.last_check", 1684356364); +user_pref("services.settings.main.url-classifier-skip-urls.last_check", 1684356364); +user_pref("services.settings.main.websites-with-shared-credential-backends.last_check", 1684356364); +user_pref("services.settings.main.whats-new-panel.last_check", 1684356364); +user_pref("services.settings.security-state.cert-revocations.last_check", 1684357265); +user_pref("services.settings.security-state.intermediates.last_check", 1684357265); +user_pref("services.settings.security-state.onecrl.last_check", 1684356364); +user_pref("services.sync.clients.lastSync", "0"); +user_pref("services.sync.declinedEngines", ""); +user_pref("services.sync.engine.addresses.available", true); +user_pref("services.sync.globalScore", 0); +user_pref("services.sync.nextSync", 0); +user_pref("storage.vacuum.last.index", 1); +user_pref("storage.vacuum.last.places.sqlite", 1682951156); +user_pref("svg.context-properties.content.enabled", true); +user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); +user_pref("toolkit.startup.last_success", 1684354256); +user_pref("toolkit.telemetry.cachedClientID", "2818bdbe-bb5e-4a77-8b39-a4dc7bba00cc"); +user_pref("toolkit.telemetry.pioneer-new-studies-available", true); +user_pref("toolkit.telemetry.previousBuildID", "20230506144444"); +user_pref("toolkit.telemetry.reportingpolicy.firstRun", false); +user_pref("trailhead.firstrun.didSeeAboutWelcome", true); diff --git a/hm/profiles/apps/browser-firefox/settings/privacy.nix b/hm/profiles/apps/browser-firefox/settings/privacy.nix new file mode 100644 index 00000000..5301937c --- /dev/null +++ b/hm/profiles/apps/browser-firefox/settings/privacy.nix @@ -0,0 +1,4 @@ +{ + "privacy.globalprivacycontrol.enable" = true; + "privacy.globalprivacycontrol.functionality.enable" = true; +} diff --git a/hm/profiles/apps/browser-firefox/styles/chrome/default.nix b/hm/profiles/apps/browser-firefox/styles/chrome/default.nix new file mode 100644 index 00000000..16063364 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/styles/chrome/default.nix @@ -0,0 +1,16 @@ +# TODO: Conditionally load based on GNOME shell +#'' +# ${if config.services.xserver.desktopManager.gnome.enable then (import ./gnome.nix) else "" } +#'' +( + import ./gnome.nix +) + +( + import ./sidebery.nix +) + +'' +'' + +#'' +# #@import "autohide_sidebar.css" +#'' diff --git a/hm/profiles/apps/browser-firefox/styles/chrome/gnome.nix b/hm/profiles/apps/browser-firefox/styles/chrome/gnome.nix new file mode 100644 index 00000000..72a19647 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/styles/chrome/gnome.nix @@ -0,0 +1,7 @@ +# TODO: @import "${pkgs.firefox-gnome-theme/userChrome.css}"; +'' + @import "firefox-gnome-theme/userChrome.css"; + @import "firefox-gnome-theme/theme/extensions/adaptive-tab-bar-color.css"; + @import "firefox-gnome-theme/theme/extensions/tab-center-reborn.css"; + +'' diff --git a/hm/profiles/apps/browser-firefox/styles/chrome/sidebery.nix b/hm/profiles/apps/browser-firefox/styles/chrome/sidebery.nix new file mode 100644 index 00000000..b6416244 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/styles/chrome/sidebery.nix @@ -0,0 +1,9 @@ +# TODO: @import "${pkgs.firefox-sidebar}/userChrome.css"; +'' + @import "firefox-sidebar/userChrome.css"; + @import "firefox-sidebar/themes/gtk_adwaita.css"; +'' +# firefox-sidebar/extensions/{avatar_size,bookmark_arrow,fix_hidden_bookmarks,hide_sidebar_switcher,sidebar,superbox_removal,window_controls}.css +# Enabled by default: +# - prefs.css, custom.css +# - extensions/{sidebar,superbox_removal,window_controls}.css diff --git a/hm/profiles/apps/browser-firefox/styles/content/default.nix b/hm/profiles/apps/browser-firefox/styles/content/default.nix new file mode 100644 index 00000000..0d615ae6 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/styles/content/default.nix @@ -0,0 +1,6 @@ +# TODO: Conditionally load based on GNOME shell +( + import ./gnome.nix +) + +'' +'' diff --git a/hm/profiles/apps/browser-firefox/styles/content/gnome.nix b/hm/profiles/apps/browser-firefox/styles/content/gnome.nix new file mode 100644 index 00000000..dfd3fe00 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/styles/content/gnome.nix @@ -0,0 +1,6 @@ +# TODO: Create package for this +# TODO: @import "${pkgs.firefox-gnome-theme/userChrome.css}"; +'' + @import "firefox-gnome-theme/userContent.css"; +'' +# programs.firefox.profiles.*.userContent = '' ''; diff --git a/hm/profiles/apps/browser-firefox/styles/csshacks.nix b/hm/profiles/apps/browser-firefox/styles/csshacks.nix new file mode 100644 index 00000000..813748ce --- /dev/null +++ b/hm/profiles/apps/browser-firefox/styles/csshacks.nix @@ -0,0 +1,303 @@ +{ self +, inputs +, config +, lib +, pkgs +, ... +}: +let + # TODO: Use fetchers from nixpkgs (bc non-blocking/async) + gnome = builtins.fetchGit { + url = "https://github.com/rafaelmardojai/firefox-gnome-theme"; + rev = "ec9421f82d922b7293ffd45a47f7abdee80038c6"; + }; + sidebar = builtins.fetchGit { + url = "https://github.com/drannex42/FirefoxSidebar"; + rev = "d99c43774b56226834c273c131563dfa9625f58d"; + }; + alpha = builtins.fetchGit { + url = "https://github.com/Tagggar/Firefox-Alpha"; + rev = "78bf9a9ea57538b0a58212731e81dea80d490105"; + }; + csshacks = builtins.fetchGit { + url = "https://github.com/MrOtherGuy/firefox-csshacks"; + rev = "67a9e9f9c96e6d007b4c57f1dd7eaceaee135178"; + }; + impossible = builtins.fetchGit { + url = "https://github.com/Naezr/ImpossibleFox"; + rev = "a0a34595bc498abdab0e8c52c424762b994a6283"; + }; + material = builtins.fetchGit { + url = "https://github.com/muckSponge/MaterialFox"; + rev = "8b1a7b10da0751a1f63e51eac428ba1eb1094b5f"; + }; + rounded = builtins.fetchGit { + url = "https://github.com/Etesam913/rounded-fox"; + rev = "fbcffb41d67123f42a48430510991ba5503c0587"; + }; + wave = builtins.fetchGit { + url = "https://github.com/QNetITQ/WaveFox"; + rev = "b4ddefc4e2bfccd7f809eca2b819e9a95ffbf2c2"; + }; + csshack-cool = [ + "auto_devtools_theme_for_rdm.css" + "selected_tab_as_urlbar.css" + "urlbar_info_icons_on_hover.css" + "urlbar_connection_type_background_colors.css" + "urlbar_connection_type_text_colors.css" + ]; + csshack-list = [ + "auto_devtools_theme_for_rdm.css" + "autohide_bookmarks_and_main_toolbars.css" + "autohide_bookmarks_toolbar.css" + "autohide_main_toolbar.css" + "autohide_menubar.css" + "autohide_navigation_button.css" + "autohide_sidebar.css" + "autohide_tabstoolbar.css" + "autohide_toolbox.css" + "button_effect_icon_glow.css" + "button_effect_scale_onclick.css" + "button_effect_scale_onhover.css" + "buttonlike_toolbarbuttons.css" + "centered_statuspanel.css" + "centered_tab_content.css" + "centered_tab_label.css" + "classic_firefox_menu_button.css" + "classic_grid_main_menu_popup.css" + "click_selected_tab_to_focus_urlbar.css" + "color_variable_template.css" + "combined_favicon_and_tab_close_button.css" + "combined_tabs_and_main_toolbars.css" + "compact_extensions_panel.css" + "compact_proton.css" + "compact_urlbar_megabar.css" + "context_menus_more_proton.css" + "curved_tabs.css" + "custom_default_tab_favicons.css" + "custom_menupopup_check_icons.css" + "dark_checkboxes_and_radios.css" + "disable_newtab_on_middle_click.css" + "drag_window_from_urlbar.css" + "fake_statusbar_w_bookmarksbar.css" + "fake_statusbar_w_menubar.css" + "fake_tab_tooltip.css" + "fake_urlbar_dropmarker.css" + "grid_overflow_menu.css" + "hide_statuspanel_when_fullscreen.css" + "hide_tabs_scrollbuttons.css" + "hide_tabs_toolbar.css" + "hide_tabs_toolbar_osx.css" + "hide_tabs_toolbar_w_alltabs_button.css" + "hide_tabs_with_one_tab.css" + "hide_tabs_with_one_tab_w_window_controls.css" + "hide_toolbox_top_bottom_borders.css" + "hide_urlbar_first_row.css" + "icon_only_tabs.css" + "iconized_main_menu.css" + "iconized_menubar_items.css" + "inline_tab_audio_icons.css" + "integrated_searchbar_popup.css" + "less_static_throbber.css" + "linux_gtk_window_control_patch.css" + "loading_indicator_bounding_line.css" + "loading_indicator_rotating_image.css" + "menubar_in_main_toolbar.css" + "menubar_in_tabs_toolbar.css" + "menubar_in_tabs_toolbar_oneliner_compatible.css" + "menulike_bookmarks_folder_popups.css" + "menupopup_forced_color_schemes.css" + "minimal_in-UI_scrollbars.css" + "minimal_text_fields.css" + "minimal_toolbarbuttons.css" + "minimal_toolbarbuttons_v2.css" + "minimal_toolbarbuttons_v3.css" + "more_visible_tab_icon.css" + "multi-row_bookmarks.css" + "multi-row_main_toolbar.css" + "multi-row_oneliner_combo_patch.css" + "multi-row_tabs.css" + "multi-row_tabs_below_content.css" + "multi-row_tabs_separate_pinned_row_patch.css" + "multi-row_tabs_window_control_patch.css" + "navbar_below_content.css" + "navbar_tabs_oneliner.css" + "navbar_tabs_oneliner_menu_buttons_on_right.css" + "navbar_tabs_oneliner_tabs_on_left.css" + "navbar_tabs_responsive_oneliner.css" + "navigation_buttons_inside_urlbar.css" + "newtab_button_always_on_hover.css" + "non_floating_sharp_tabs.css" + "normal_pinned_tabs.css" + "numbered_tabs.css" + "overlay_menubar.css" + "overlay_sidebar_header.css" + "overlay_tab_audio_icons.css" + "page_action_buttons_on_hover.css" + "page_action_buttons_on_urlbar_hover.css" + "pinned_tabs_on_right.css" + "privatemode_indicator_as_menu_button.css" + "proton_dark_light_notifications.css" + "reload_button_in_urlbar.css" + "round_caption_buttons.css" + "round_ui_items.css" + "rounded_menupopups.css" + "scrollable_menupopups.css" + "scrollable_urlbar_popup.css" + "selected_tab_as_urlbar.css" + "selected_tab_gradient_border.css" + "sharp_menupopup_corners.css" + "show_navbar_on_focus_only.css" + "show_toolbars_in_popup_windows.css" + "show_window_title_in_menubar.css" + "shrinking_pinned_tabs.css" + "status_inside_menubar.css" + "status_inside_urlbar.css" + "status_inside_urlbar_v2.css" + "tab_animated_active_border.css" + "tab_close_button_always_on_hover.css" + "tab_closing_animation.css" + "tab_effect_scale_onclick.css" + "tab_line_loading_indicator.css" + "tab_loading_progress_bar.css" + "tab_loading_progress_throbber.css" + "tab_separator_lines.css" + "tabs_animated_gradient_border.css" + "tabs_below_content.css" + "tabs_fill_available_width.css" + "tabs_on_bottom.css" + "tabs_on_bottom_menubar_on_top_patch.css" + "textual_context_navigation.css" + "textual_searchbar_one-offs.css" + "toggle_tabs_toolbar_with_alt.css" + "toolbarbuttons_icon+label.css" + "toolbarbuttons_in_tabs_periphery.css" + "toolbars_below_content.css" + "urlbar_centered_text.css" + "urlbar_connection_type_background_colors.css" + "urlbar_connection_type_text_colors.css" + "urlbar_container_color_border.css" + "urlbar_info_icons_on_hover.css" + "urlbar_popup_full_width.css" + "urlbar_results_in_two_rows.css" + "urlbar_visible_on_active_tab_click.css" + "verical_bookmarks_toolbar.css" + "verical_context_navigation.css" + "verical_context_navigation_v2.css" + "verical_menubar.css" + "verical_popup_menubar.css" + "verical_tabs.css" + "verical_urlbar_one-off_items.css" + "window_control_fallback_for_custom_windows_theme.css" + "window_control_force_linux_system_style.css" + "window_control_placeholder_support.css" + ]; + combos = { + default = '' + @import url(firefox-gnome-theme/userChrome.css); + @import url(csshacks/chrome/auto_devtools_theme.css); + @import url(csshacks/chrome/auto_devtools_theme_for_rdm.css); + @import url(csshacks/chrome/hide_tabs_scrollbuttons.css); + @import url(csshacks/chrome/autohide_sidebar.css); + @import url(csshacks/chrome/compact_extensions_panel.css); + @import url(csshacks/chrome/compact_proton.css); + @import url(csshacks/chrome/urlbar_info_icons_on_hover.css); + @import url(csshacks/chrome/page_action_buttons_on_urlbar_hover.css); + @import url(csshacks/chrome/drag_window_from_urlbar.css); + @import url(csshacks/chrome/urlbar_connection_type_text_colors.css); + ''; + + # Shows single bar of tabs, with active tab becoming URL bar. + # TODO: Fix hover, search box sizing/location, remove excess padding on right (by close icon), + # TODO: Force active tab to stay in view, prefer ~25% sizing on hover, scroll other tabs to left/right behind (like accordion) + # TODO: Show original UI elements in URLbox/tab. + # TODO: Apply GNOME/Adwaita-like styles to tabs. + singlebar = '' + @import url(csshacks/chrome/hide_tabs_scrollbuttons.css); + @import url(csshacks/chrome/selected_tab_as_urlbar.css); + @import url(csshacks/chrome/click_selected_tab_to_focus_urlbar.css); + @import url(csshacks/chrome/window_control_placeholder_support.css); + ''; + # TODO: Tabs above urlbar/toolbar, fix missing window system icons (close), reverse search results box, offset search results by height of urlbar. + bottom-nav = '' + @import url(csshacks/chrome/toolbars_below_content.css); + @import url(csshacks/chrome/tabs_below_content.css); + @import url(csshacks/chrome/navbar_below_content.css); + @import url(csshacks/chrome/linux_gtk_window_control_patch.css); + ''; + }; + hasGtk = config.services.xserver.desktopManager.gnome.enable || config.gtk.iconCache.enable; + hasSidebery = true; # TODO: Figure out how to deduce this from config. + hasAdaptive = true; + hasBreeze = config.qt.style == "breeze"; + useGtk = (hasGtk || !hasBreeze); +in +{ + #userChrome = (import ./chrome/default.nix); + userChrome = '' + @import "${gnome}/userChrome.css"; + @import "${gnome}/theme/extensions/adaptive-tab-bar-color.css"; + @import "${gnome}/theme/extensions/tab-center-reborn.css"; + @import "${sidebar}/userChrome.css"; + @import "${sidebar}/themes/gtk_adwaita.css"; + @import "${csshacks}/chrome/autohide_sidebar.css"; + @import "${csshacks}/chrome/compact_extensions_panel.css"; + @import "${csshacks}/chrome/urlbar_connection_type_text_colors.css"; + @import "${csshacks}/chrome/urlbar_connection_type_background_colors.css"; + @import "${csshacks}/chrome/urlbar_container_color_border.css"; + @import "${csshacks}/chrome/multi-row-bookmarks.css"; + @import "${csshacks}/chrome/page_action_buttons_on_urlbar_hover.css"; + @import "${csshacks}/chrome/tab-hover-preview.css"; + ''; + + #userChrome = lib.mkIf (useGtk || hasSidebery) + #'' + # @import "${gnome}/userChrome.css"; + # @import "${if hasSidebery then "${sidebery}/userChrome.css" else "${gnome}/theme/extensions/tab-center-reborn.css"}"; + # @import "${sidebar}/themes/gtk_${if hasBreeze then "breeze.css" else "adwaita.css"}"; + # ${optionalString hasAdaptive "@import \"${gnome}/theme/extensions/adaptive-tab-bar-color.css\";} + #''; + # --- ORIGINAL --- + #userChrome = '' + # @import "firefox-gnome-theme/userChrome.css"; + # @import "firefox-gnome-theme/theme/extensions/adaptive-tab-bar-color.css"; + # @import "firefox-gnome-theme/theme/extensions/tab-center-reborn.css"; + # @import "firefox-sidebar/userChrome.css"; + # @import "firefox-sidebar/themes/gtk_adwaita.css"; + #''; + # @import "firefox-gnome-theme/userChrome.css"; + # @import "rounded-fox/userchrome.css"; + # @import "firefox-csshacks/.css"; + # @import "CompactFox/.css"; + + userContent = (import ./content/default.nix); + # @import "firefox-gnome-theme/userContent.css"; +} +# +# --- Themes --- +# https://github.com/rafaelmardojai/firefox-gnome-theme (Use: Adwaita theme) +# https://github.com/drannex42/FirefoxSidebar (Use: Auto-hide sidebar) +# https://github.com/QNetITQ/WaveFox (Use: Tab shape options, shared URL & tab bar) +# https://github.com/Naezr/ImpossibleFox (Use: URL bar inside tab, multi-line tab bar) +# https://github.com/Tagggar/Firefox-Alpha (Use: Blend bars into background) +# https://github.com/Etesam913/rounded-fox (Use: Hiding URL bar, inner rounded content corners) +# https://github.com/black7375/Firefox-UI-Fix +# https://github.com/Tnings/CompactFox +# https://gist.github.com/qaz69wsx/1739d185cff0a15929ac04c3f277a525 (Use: Compact unified extensions menu) +# +# --- Extensions --- +# https://github.com/mbnuqw/sidebery +# https://addons.mozilla.org/ru/firefox/addon/adaptive-tab-bar-colour/ +# +# --- Desires --- +# - Multi-row tab bar +# - URL bar in active tab +# - Auto-hide sidebar until hover +# - Auto-hide navigation buttons when inaccessible +# - Auto-hide navigation buttons until hover +# - Auto-hide URL bar icons until hover +# - Compact extension menus +# - Adaptive recolor to page contents +# - Colored URL bar to show HTTPS status +# - Hide sidebar header row + diff --git a/hm/profiles/apps/browser-firefox/styles/default.nix b/hm/profiles/apps/browser-firefox/styles/default.nix new file mode 100644 index 00000000..fc80e673 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/styles/default.nix @@ -0,0 +1,288 @@ +{ self +, inputs +, config +, lib +, pkgs +, ... +}: +let + # TODO: Use fetchers from nixpkgs (bc non-blocking/async) + gnome = builtins.fetchGit { url = "https://github.com/rafaelmardojai/firefox-gnome-theme"; rev = "ec9421f82d922b7293ffd45a47f7abdee80038c6"; }; + sidebar = builtins.fetchGit { url = "https://github.com/drannex42/FirefoxSidebar"; rev = "d99c43774b56226834c273c131563dfa9625f58d"; }; + csshacks = builtins.fetchGit { url = "https://github.com/MrOtherGuy/firefox-csshacks"; rev = "67a9e9f9c96e6d007b4c57f1dd7eaceaee135178"; }; + alpha = builtins.fetchGit { url = "https://github.com/Tagggar/Firefox-Alpha"; rev = "78bf9a9ea57538b0a58212731e81dea80d490105"; }; + impossible = builtins.fetchGit { url = "https://github.com/Naezr/ImpossibleFox"; rev = "a0a34595bc498abdab0e8c52c424762b994a6283"; }; + material = builtins.fetchGit { url = "https://github.com/muckSponge/MaterialFox"; rev = "8b1a7b10da0751a1f63e51eac428ba1eb1094b5f"; }; + rounded = builtins.fetchGit { url = "https://github.com/Etesam913/rounded-fox"; rev = "fbcffb41d67123f42a48430510991ba5503c0587"; }; + wave = builtins.fetchGit { url = "https://github.com/QNetITQ/WaveFox"; rev = "b4ddefc4e2bfccd7f809eca2b819e9a95ffbf2c2"; }; + + combos = { + default = '' + @import url(firefox-gnome-theme/userChrome.css); + @import url(csshacks/chrome/auto_devtools_theme.css); + @import url(csshacks/chrome/auto_devtools_theme_for_rdm.css); + @import url(csshacks/chrome/autohide_sidebar.css); + @import url(csshacks/chrome/hide_tabs_scrollbuttons.css); + @import url(csshacks/chrome/compact_extensions_panel.css); + @import url(csshacks/chrome/compact_proton.css); + @import url(csshacks/chrome/urlbar_info_icons_on_hover.css); + @import url(csshacks/chrome/page_action_buttons_on_urlbar_hover.css); + @import url(csshacks/chrome/drag_window_from_urlbar.css); + @import url(csshacks/chrome/urlbar_connection_type_text_colors.css); + ''; + + # Shows single bar of tabs, with active tab becoming URL bar. + # TODO: Fix hover, search box sizing/location, remove excess padding on right (by close icon), + # TODO: Force active tab to stay in view, prefer ~25% sizing on hover, scroll other tabs to left/right behind (like accordion) + # TODO: Show original UI elements in URLbox/tab. + # TODO: Apply GNOME/Adwaita-like styles to tabs. + singlebar = '' + @import url(csshacks/chrome/hide_tabs_scrollbuttons.css); + @import url(csshacks/chrome/selected_tab_as_urlbar.css); + @import url(csshacks/chrome/click_selected_tab_to_focus_urlbar.css); + @import url(csshacks/chrome/window_control_placeholder_support.css); + ''; + # TODO: Tabs above urlbar/toolbar, fix missing window system icons (close), reverse search results box, offset search results by height of urlbar. + bottom-nav = '' + @import url(csshacks/chrome/toolbars_below_content.css); + @import url(csshacks/chrome/tabs_below_content.css); + @import url(csshacks/chrome/navbar_below_content.css); + @import url(csshacks/chrome/linux_gtk_window_control_patch.css); + ''; + }; + #hasGtk = config.services.xserver.desktopManager.gnome.enable || config.gtk.iconCache.enable; + #hasSidebery = true; # TODO: Figure out how to deduce this from config. + #hasAdaptive = true; + #hasBreeze = config.qt.style == "breeze"; + #useGtk = (hasGtk || !hasBreeze); +in +{ + #userChrome = (import ./chrome/default.nix); + userChrome = '' + @import url(${gnome}/userChrome.css); + @import url(${gnome}/theme/extensions/adaptive-tab-bar-color.css); + @import url(${gnome}/theme/extensions/tab-center-reborn.css); + @import url(${sidebar}/userChrome.css); + @import url(${sidebar}/themes/gtk_adwaita.css); + @import url(${csshacks}/chrome/auto_devtools_theme.css); + @import url(${csshacks}/chrome/auto_devtools_theme_for_rdm.css); + @import url(${csshacks}/chrome/autohide_sidebar.css); + @import url(${csshacks}/chrome/compact_extensions_panel.css); + @import url(${csshacks}/chrome/compact_proton.css); + @import url(${csshacks}/chrome/drag_window_from_urlbar.css); + @import url(${csshacks}/chrome/hide_tabs_scrollbuttons.css); + @import url(${csshacks}/chrome/multi-row-bookmarks.css); + @import url(${csshacks}/chrome/page_action_buttons_on_urlbar_hover.css); + @import url(${csshacks}/chrome/urlbar_connection_type_text_colors.css); + @import url(${csshacks}/chrome/urlbar_container_color_border.css); + @import url(${csshacks}/chrome/urlbar_info_icons_on_hover.css); + #TabsToolbar { + display: none; + } + #sidebar-header { + display: none; + } + ''; + #@import "${csshacks}/chrome/tab-hover-preview.css"; # TODO: No CSS file, found elsewhere? + + #userChrome = lib.mkIf (useGtk || hasSidebery) + #'' + # @import "${gnome}/userChrome.css"; + # @import "${if hasSidebery then "${sidebery}/userChrome.css" else "${gnome}/theme/extensions/tab-center-reborn.css"}"; + # @import "${sidebar}/themes/gtk_${if hasBreeze then "breeze.css" else "adwaita.css"}"; + # ${optionalString hasAdaptive "@import \"${gnome}/theme/extensions/adaptive-tab-bar-color.css\";} + #''; + # --- ORIGINAL --- + #userChrome = '' + # @import "firefox-gnome-theme/userChrome.css"; + # @import "firefox-gnome-theme/theme/extensions/adaptive-tab-bar-color.css"; + # @import "firefox-gnome-theme/theme/extensions/tab-center-reborn.css"; + # @import "firefox-sidebar/userChrome.css"; + # @import "firefox-sidebar/themes/gtk_adwaita.css"; + #''; + # @import "firefox-gnome-theme/userChrome.css"; + # @import "rounded-fox/userchrome.css"; + # @import "firefox-csshacks/.css"; + # @import "CompactFox/.css"; + + userContent = (import ./content/default.nix); + # @import "firefox-gnome-theme/userContent.css"; +} +# +# --- Themes --- +# https://github.com/rafaelmardojai/firefox-gnome-theme (Use: Adwaita theme) +# https://github.com/drannex42/FirefoxSidebar (Use: Auto-hide sidebar) +# https://github.com/QNetITQ/WaveFox (Use: Tab shape options, shared URL & tab bar) +# https://github.com/Naezr/ImpossibleFox (Use: URL bar inside tab, multi-line tab bar) +# https://github.com/Tagggar/Firefox-Alpha (Use: Blend bars into background) +# https://github.com/Etesam913/rounded-fox (Use: Hiding URL bar, inner rounded content corners) +# https://github.com/black7375/Firefox-UI-Fix +# https://github.com/Tnings/CompactFox +# https://gist.github.com/qaz69wsx/1739d185cff0a15929ac04c3f277a525 (Use: Compact unified extensions menu) +# +# --- Extensions --- +# https://github.com/mbnuqw/sidebery +# https://addons.mozilla.org/ru/firefox/addon/adaptive-tab-bar-colour/ +# +# --- Desires --- +# - Multi-row tab bar +# - URL bar in active tab +# - Auto-hide sidebar until hover +# - Auto-hide navigation buttons when inaccessible +# - Auto-hide navigation buttons until hover +# - Auto-hide URL bar icons until hover +# - Compact extension menus +# - Adaptive recolor to page contents +# - Colored URL bar to show HTTPS status +# - Hide sidebar header row + + + + + +#csshack-list = [ +# "auto_devtools_theme_for_rdm.css" +# "autohide_bookmarks_and_main_toolbars.css" +# "autohide_bookmarks_toolbar.css" +# "autohide_main_toolbar.css" +# "autohide_menubar.css" +# "autohide_navigation_button.css" +# "autohide_sidebar.css" +# "autohide_tabstoolbar.css" +# "autohide_toolbox.css" +# "button_effect_icon_glow.css" +# "button_effect_scale_onclick.css" +# "button_effect_scale_onhover.css" +# "buttonlike_toolbarbuttons.css" +# "centered_statuspanel.css" +# "centered_tab_content.css" +# "centered_tab_label.css" +# "classic_firefox_menu_button.css" +# "classic_grid_main_menu_popup.css" +# "click_selected_tab_to_focus_urlbar.css" +# "color_variable_template.css" +# "combined_favicon_and_tab_close_button.css" +# "combined_tabs_and_main_toolbars.css" +# "compact_extensions_panel.css" +# "compact_proton.css" +# "compact_urlbar_megabar.css" +# "context_menus_more_proton.css" +# "curved_tabs.css" +# "custom_default_tab_favicons.css" +# "custom_menupopup_check_icons.css" +# "dark_checkboxes_and_radios.css" +# "disable_newtab_on_middle_click.css" +# "drag_window_from_urlbar.css" +# "fake_statusbar_w_bookmarksbar.css" +# "fake_statusbar_w_menubar.css" +# "fake_tab_tooltip.css" +# "fake_urlbar_dropmarker.css" +# "grid_overflow_menu.css" +# "hide_statuspanel_when_fullscreen.css" +# "hide_tabs_scrollbuttons.css" +# "hide_tabs_toolbar.css" +# "hide_tabs_toolbar_osx.css" +# "hide_tabs_toolbar_w_alltabs_button.css" +# "hide_tabs_with_one_tab.css" +# "hide_tabs_with_one_tab_w_window_controls.css" +# "hide_toolbox_top_bottom_borders.css" +# "hide_urlbar_first_row.css" +# "icon_only_tabs.css" +# "iconized_main_menu.css" +# "iconized_menubar_items.css" +# "inline_tab_audio_icons.css" +# "integrated_searchbar_popup.css" +# "less_static_throbber.css" +# "linux_gtk_window_control_patch.css" +# "loading_indicator_bounding_line.css" +# "loading_indicator_rotating_image.css" +# "menubar_in_main_toolbar.css" +# "menubar_in_tabs_toolbar.css" +# "menubar_in_tabs_toolbar_oneliner_compatible.css" +# "menulike_bookmarks_folder_popups.css" +# "menupopup_forced_color_schemes.css" +# "minimal_in-UI_scrollbars.css" +# "minimal_text_fields.css" +# "minimal_toolbarbuttons.css" +# "minimal_toolbarbuttons_v2.css" +# "minimal_toolbarbuttons_v3.css" +# "more_visible_tab_icon.css" +# "multi-row_bookmarks.css" +# "multi-row_main_toolbar.css" +# "multi-row_oneliner_combo_patch.css" +# "multi-row_tabs.css" +# "multi-row_tabs_below_content.css" +# "multi-row_tabs_separate_pinned_row_patch.css" +# "multi-row_tabs_window_control_patch.css" +# "navbar_below_content.css" +# "navbar_tabs_oneliner.css" +# "navbar_tabs_oneliner_menu_buttons_on_right.css" +# "navbar_tabs_oneliner_tabs_on_left.css" +# "navbar_tabs_responsive_oneliner.css" +# "navigation_buttons_inside_urlbar.css" +# "newtab_button_always_on_hover.css" +# "non_floating_sharp_tabs.css" +# "normal_pinned_tabs.css" +# "numbered_tabs.css" +# "overlay_menubar.css" +# "overlay_sidebar_header.css" +# "overlay_tab_audio_icons.css" +# "page_action_buttons_on_hover.css" +# "page_action_buttons_on_urlbar_hover.css" +# "pinned_tabs_on_right.css" +# "privatemode_indicator_as_menu_button.css" +# "proton_dark_light_notifications.css" +# "reload_button_in_urlbar.css" +# "round_caption_buttons.css" +# "round_ui_items.css" +# "rounded_menupopups.css" +# "scrollable_menupopups.css" +# "scrollable_urlbar_popup.css" +# "selected_tab_as_urlbar.css" +# "selected_tab_gradient_border.css" +# "sharp_menupopup_corners.css" +# "show_navbar_on_focus_only.css" +# "show_toolbars_in_popup_windows.css" +# "show_window_title_in_menubar.css" +# "shrinking_pinned_tabs.css" +# "status_inside_menubar.css" +# "status_inside_urlbar.css" +# "status_inside_urlbar_v2.css" +# "tab_animated_active_border.css" +# "tab_close_button_always_on_hover.css" +# "tab_closing_animation.css" +# "tab_effect_scale_onclick.css" +# "tab_line_loading_indicator.css" +# "tab_loading_progress_bar.css" +# "tab_loading_progress_throbber.css" +# "tab_separator_lines.css" +# "tabs_animated_gradient_border.css" +# "tabs_below_content.css" +# "tabs_fill_available_width.css" +# "tabs_on_bottom.css" +# "tabs_on_bottom_menubar_on_top_patch.css" +# "textual_context_navigation.css" +# "textual_searchbar_one-offs.css" +# "toggle_tabs_toolbar_with_alt.css" +# "toolbarbuttons_icon+label.css" +# "toolbarbuttons_in_tabs_periphery.css" +# "toolbars_below_content.css" +# "urlbar_centered_text.css" +# "urlbar_connection_type_background_colors.css" +# "urlbar_connection_type_text_colors.css" +# "urlbar_container_color_border.css" +# "urlbar_info_icons_on_hover.css" +# "urlbar_popup_full_width.css" +# "urlbar_results_in_two_rows.css" +# "urlbar_visible_on_active_tab_click.css" +# "verical_bookmarks_toolbar.css" +# "verical_context_navigation.css" +# "verical_context_navigation_v2.css" +# "verical_menubar.css" +# "verical_popup_menubar.css" +# "verical_tabs.css" +# "verical_urlbar_one-off_items.css" +# "window_control_fallback_for_custom_windows_theme.css" +# "window_control_force_linux_system_style.css" +# "window_control_placeholder_support.css" +#]; diff --git a/hm/profiles/apps/browser-firefox/styles/gnome.nix b/hm/profiles/apps/browser-firefox/styles/gnome.nix new file mode 100644 index 00000000..93e414f8 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/styles/gnome.nix @@ -0,0 +1,15 @@ + +{ self, inputs, + config, lib, pkgs, + ... +}: +{ + userChrome = + import ./chrome/gnome.nix ++ + import ./chrome/default.nix + ; + userContent = + import ./content/gnome.nix ++ + import ./content/default.nix + ; +} diff --git a/hm/profiles/apps/browser-firefox/styles/systemColor.css b/hm/profiles/apps/browser-firefox/styles/systemColor.css new file mode 100644 index 00000000..882f09df --- /dev/null +++ b/hm/profiles/apps/browser-firefox/styles/systemColor.css @@ -0,0 +1,502 @@ +/* Found: HERE (https://pastebin.com/uqJ2tziQ) */ + +/* light */ +:root:not(:-moz-lwtheme), +:root[style*="--lwt-accent-color: rgb(240, 240, 244)"] { + --lwt-accent-color:color-mix(in lab, AccentColor 25%, #ffffff) !important; + --toolbar-bgcolor: color-mix(in lab, AccentColor 35%, #ffffff) !important; + --lwt-selected-tab-background-color: color-mix(in lab, AccentColor 22%, #fff) !important; + --tab-selected-bgcolor: color-mix(in lab, AccentColor 22%, #fff) !important; + --toolbar-field-background-color: color-mix(in lab, AccentColor 15%, #ffffff) !important; + --lwt-accent-color-inactive: black !important; + --lwt-text-color: black !important; + --toolbar-color: black!important; + --toolbarbutton-icon-fill: black !important; + --chrome-content-separator-color: rgba(0, 0, 0, 0.4) !important; + --lwt-toolbarbutton-icon-fill-attention: #0078D4 !important; + --toolbarbutton-icon-fill-attention: #0078D4 !important; + --lwt-tab-text: var(--toolbar-color) !important; + --urlbar-box-bgcolor: color-mix(in lab, AccentColor 10%, #ffffff) !important; + --autocomplete-popup-background: color-mix(in lab, AccentColor 10%, #ffffff) !important; + --input-bgcolor: color-mix(in lab, AccentColor 10%, #ffffff) !important; + --arrowpanel-background: color-mix(in lab, AccentColor 10%, #ffffff) !important; + --toolbar-field-color: #000 !important; + --toolbar-field-border-color: #0000 !important; + --toolbar-field-focus-background-color: var(--toolbar-field-background-color) !important; + --toolbar-field-focus-color: var(--toolbar-field-color) !important; + --toolbar-field-focus-border-color: transparent !important; + --urlbar-box-hover-bgcolor: rgba(0, 0, 0, 0.09) !important; + --urlbar-box-focus-bgcolor: rgba(0, 0, 0, 0.22) !important; + --urlbar-icon-fill-opacity: 0.6 !important; + --urlbar-popup-url-color: #0072C9 !important; + --lwt-brighttext-url-color: var(--urlbar-popup-url-color) !important; + --autocomplete-popup-color: #fff !important; + --autocomplete-popup-highlight-background: #f2f2f2 !important; + --autocomplete-popup-hover-background: #e5e5e5 !important; + --autocomplete-popup-separator-color: #dadada00 !important; + --button-bgcolor: #EDEDED !important; + --button-hover-bgcolor: #e5e5e5 !important; + --button-active-bgcolor: #d5d5d5 !important; + --button-primary-bgcolor: #0078D4 !important; + --button-primary-hover-bgcolor: #006CBE !important; + --button-primary-active-bgcolor: #1683D8 !important; + --button-primary-color: #fff !important; + --error-text-color: #FF9AA2 !important; + --input-color: #2b2b2b !important; + --input-border-color: #bebebe !important; + --input-error-border-color: #FF848A !important; + --zoom-controls-bgcolor: #4A4A4A !important; + --arrowpanel-color: #1c1c1c !important; + --panel-description-color: #000a !important; + --panel-disabled-color: #9E9E9E !important; + --arrowpanel-dimmed: #565656 !important; + --arrowpanel-dimmed-further: #707070 !important; + --panel-item-hover-bgcolor: #eee !important; + --panel-item-active-bgcolor: #ddd !important; + --arrowpanel-border-color: #dadada !important; + --panel-separator-color: var(--chrome-content-separator-color) !important; + --panel-banner-item-update-supported-bgcolor: #188038 !important; + --focus-outline-color: #0055D7 !important; + --panel-shortcut-color: inherit !important; + --uc-urlbar-shadow: 0 0 4px rgba(0, 0, 0, 0.1); + --toolbarbutton-hover-background: rgba(0, 0, 0, 0.08) !important; + --toolbarbutton-active-background: rgba(0, 0, 0, 0.12) !important; + --uc-private-browsing-indicator: var(--button-primary-bgcolor); + --uc-private-browding-indicator-hover: var(--button-primary-hover-bgcolor); + --uc-private-browding-indicator-active: var(--button-primary-active-bgcolor); + --uc-private-browding-indicator-text: var(--button-primary-color); + --tab-icon-overlay-stroke: #fff !important; + --tab-icon-overlay-fill: #252525 !important; +} + +/* dark */ +:root[lwt-default-theme-in-dark-mode="true"], +:root[style*="--lwt-accent-color: rgb(28, 27, 34)"] { + --lwt-accent-color: color-mix(in lab, AccentColor 35%, #000000) !important; + --toolbar-bgcolor: color-mix(in lab, AccentColor 35%, #000000) !important; + --lwt-selected-tab-background-color: color-mix(in lab, AccentColor 55%, #000000) !important; + --tab-selected-bgcolor: color-mix(in lab, AccentColor 55%, #000000) !important; + --toolbar-field-background-color: color-mix(in lab, AccentColor 45%, #000000) !important; + --chrome-content-separator-color: AccentColor !important; + --autocomplete-popup-separator-color: color-mix(in lab, AccentColor 50%, #000000) !important; + --panel-separator-color: color-mix(in lab, AccentColor 50%, #000000) !important; + --autocomplete-popup-background: color-mix(in lab, AccentColor 30%, #000000) !important; + --arrowpanel-background: color-mix(in lab, AccentColor 30%, #000000) !important; + --input-bgcolor: color-mix(in lab, AccentColor 30%, #000000) !important; + --button-bgcolor: color-mix(in lab, AccentColor 30%, #000000) !important; + --lwt-text-color: #fff !important; + --toolbar-color: #fff !important; + --lwt-accent-color-inactive: color-mix(in lab, AccentColor 0%, #000000) !important; + --toolbarbutton-icon-fill: #fff !important; + --lwt-toolbarbutton-icon-fill-attention: #4C98D1 !important; + --toolbarbutton-icon-fill-attention: #4C98D1 !important; + --lwt-tab-text: var(--toolbar-color) !important; + --toolbar-field-color: #fff !important; + --toolbar-field-border-color: #0000 !important; + --toolbar-field-focus-background-color: var(--toolbar-field-background-color) !important; + --toolbar-field-focus-color: var(--toolbar-field-color) !important; + --toolbar-field-focus-border-color: transparent !important; + --urlbar-box-bgcolor: rgba(255, 255, 255, 0.11) !important; + --urlbar-box-hover-bgcolor: rgba(255, 255, 255, 0.11) !important; + --urlbar-box-focus-bgcolor: rgba(255, 255, 255, 0.28) !important; + --urlbar-icon-fill-opacity: 1 !important; + --urlbar-popup-url-color: #75B6E8 !important; + --lwt-brighttext-url-color: var(--urlbar-popup-url-color) !important; + --autocomplete-popup-color: #fff !important; + --autocomplete-popup-highlight-background: #383838 !important; + --autocomplete-popup-hover-background: #444444 !important; + --button-hover-bgcolor: #646464 !important; + --button-active-bgcolor: #575757 !important; + --button-primary-bgcolor: #006CBE !important; + --button-primary-hover-bgcolor: #0078D4 !important; + --button-primary-active-bgcolor: #005CA3 !important; + --button-primary-color: #fff !important; + --error-text-color: #FF9AA2 !important; + --input-color: #fff !important; + --input-border-color: #8A8A8A !important; + --input-error-border-color: #FF848A !important; + --zoom-controls-bgcolor: #4A4A4A !important; + --arrowpanel-color: #fff !important; + --panel-description-color: #fffb !important; + --panel-disabled-color: #ABABAA !important; + --arrowpanel-dimmed: #565656 !important; + --arrowpanel-dimmed-further: #707070 !important; + --panel-item-hover-bgcolor: #646464 !important; + --panel-item-active-bgcolor: #2d2d2d !important; + --arrowpanel-border-color: #2a2a2a !important; + --panel-banner-item-update-supported-bgcolor: #81C995 !important; + --focus-outline-color: #63ADE5 !important; + --panel-shortcut-color: inherit !important; + --toolbarbutton-hover-background: rgba(255, 255, 255, 0.1) !important; + --toolbarbutton-active-background: rgba(255, 255, 255, 0.16) !important; + --uc-private-browsing-indicator: var(--button-primary-bgcolor); + --uc-private-browsing-indicator-hover: var(--button-primary-hover-bgcolor); + --uc-private-browsing-indicator-active: var(--button-primary-active-bgcolor); + --uc-private-browsing-indicator-text: var(--button-primary-color); + --tab-icon-overlay-stroke: #4b4b4b !important; + --tab-icon-overlay-fill: #fff !important; +} + + +.popup-internal-box:not(:-moz-lwtheme), +panel[type="autocomplete-richlistbox"]>.autocomplete-richlistbox:not(:-moz-lwtheme), +.menupopup-arrowscrollbox:not(:-moz-lwtheme) { + background-color: color-mix(in lab, AccentColor 10%, #ffffff) !important; + border: 0px solid yellow !important; + border-radius: 12px !important; + font-size: 12px !important; +} + +.popup-internal-box:-moz-lwtheme, +panel[type="autocomplete-richlistbox"]>.autocomplete-richlistbox:-moz-lwtheme, +.menupopup-arrowscrollbox:-moz-lwtheme { + background-color: color-mix(in lab, AccentColor 30%, #000000) !important; + border: 0px solid yellow !important; + border-radius: 12px !important; + font-size: 12px !important; +} + +menupopup menuseparator:not(:-moz-lwtheme) { + border-top: 1px solid color-mix(in lab, AccentColor 25%, #fff) !important; +} + +menupopup menuseparator:-moz-lwtheme { + border-top: 1px solid color-mix(in lab, AccentColor 50%, #000000) !important; +} + +#navigator-toolbox:not(:-moz-lwtheme), .browser-toolbar:not(:-moz-lwtheme) { + background: color-mix(in lab, AccentColor 7%, #ffffff) !important; +} + +#urlbar { + --urlbar-box-bgcolor: inherit !important; + --urlbar-box-hover-bgcolor: inherit !important; + --urlbar-box-focus-bgcolor: inherit !important; +} + +/* Change Colour of page when loading */ +:root:not(:-moz-lwtheme) #tabbrowser-tabpanels, +:root[style*="--lwt-accent-color: rgb(240, 240, 244)"] #tabbrowser-tabpanels { + background-color: #f7f7f7 !important; +} + +:root[lwt-default-theme-in-dark-mode="true"] #tabbrowser-tabpanels, +:root[style*="--lwt-accent-color: rgb(28, 27, 34)"] #tabbrowser-tabpanels { + background-color: color-mix(in lab, AccentColor 15%, #000000) !important; +} + +/* make the titlebar buttons black/white on default themes */ +:root:not(:-moz-lwtheme)[tabsintitlebar] .titlebar-buttonbox, +:root[style*="--lwt-accent-color: rgb(240, 240, 244)"][tabsintitlebar] .titlebar-buttonbox { + color: #000 !important; +} + +:root[lwt-default-theme-in-dark-mode="true"][tabsintitlebar] .titlebar-buttonbox, +:root[style*="--lwt-accent-color: rgb(28, 27, 34)"][tabsintitlebar] .titlebar-buttonbox { + color: #fff !important; +} + +#statuspanel-label { + background-color: var(--toolbar-field-focus-background-color) !important; + color: var(--toolbar-field-focus-color) !important; + border-color: transparent !important; + box-shadow: 0 2px 5px #0004, 0 0 0 1px #0002 !important; +} + +@media (prefers-color-scheme: dark) { + #statuspanel-label { + box-shadow: 0 2px 5px #0004, 0 0 0 1px #0004 !important; + } +} + +@media (-moz-platform: windows) { + tooltip { + background-color: var(--arrowpanel-background) !important; + color: var(--arrowpanel-color) !important; + border-color: var(--arrowpanel-border-color) !important; + } + + .titlebar-button:not(.titlebar-close):hover { + background-color: color-mix(in srgb, currentColor 11%, transparent) !important; + } + + .titlebar-button:hover:active { + background-color: color-mix(in srgb, currentColor 20%, transparent) !important; + } + + .titlebar-close:hover { + stroke: white !important; + background-color: #e81123 !important; + } + + .titlebar-close:hover:active { + background-color: #EF6B76 !important; + } + + toolbar[brighttext] .titlebar-close:hover:active { + background-color: #9C1420 !important; + } + + /* library window theme */ + window#places { + --organizer-color: #000 !important; + --organizer-deemphasized-color: #666 !important; + --organizer-toolbar-background: #f7f7f7 !important; + --organizer-pane-background: #f7f7f7 !important; + --organizer-content-background: #f7f7f7 !important; + --organizer-hover-background: #00000025 !important; + --organizer-selected-background: #006CBE80 !important; + --organizer-outline-color: #0055D7a0 !important; + --organizer-toolbar-field-background: #fff !important; + --organizer-toolbar-field-background-focused: #fff !important; + --organizer-border-color: #bfbfbf !important; + scrollbar-color: #0006 #f7f7f740 !important; + } + + #placesViewsBox #downloadsListBox richlistitem[selected="true"] { + background-color: #006CBE !important; + color: #fff !important; + } + + #placeContentColumns :is(treecol, treecolpicker) { + background-color: #f7f7f7 !important; + color: #000 !important; + border-inline-start: 1px solid #bfbfbf !important; + box-shadow: inset 0 -1px #bfbfbf !important; + appearance: none !important; + } + + #placeContentColumns :is(treecol, treecolpicker):where(:hover) { + background-color: #cecece !important; + color: #000 !important; + } + + @media (prefers-color-scheme: dark) { + window#places { + --organizer-color: #fff !important; + --organizer-deemphasized-color: #bbb !important; + --organizer-toolbar-background: #3B3B3B !important; + --organizer-pane-background: #2B2B2B !important; + --organizer-content-background: #1C1C1C !important; + --organizer-hover-background: #ffffff25 !important; + --organizer-selected-background: #006CBE80 !important; + --organizer-outline-color: #63ADE5 !important; + --organizer-toolbar-field-background: #2B2B2B !important; + --organizer-toolbar-field-background-focused: #2B2B2B !important; + --organizer-border-color: #686868 !important; + scrollbar-color: #fff6 #2B2B2B40 !important; + } + + #placesViewsBox #downloadsListBox richlistitem[selected="true"] { + background-color: #006CBE !important; + color: #fff !important; + } + + #placeContentColumns :is(treecol, treecolpicker) { + background-color: #3B3B3B !important; + color: #fff !important; + border-inline-start: 1px solid #686868 !important; + box-shadow: inset 0 -1px #686868 !important; + } + + #placeContentColumns :is(treecol, treecolpicker):where(:hover) { + background-color: #4A4A4A !important; + color: #fff !important; + } + } +} + +/* side bar theme */ +#sidebar-box:not([lwt-sidebar]) { + --sidebar-background-color: #f7f7f7 !important; + --sidebar-text-color: #000 !important; + appearance: none !important; +} + +#sidebar-box[style*="--sidebar-background-color: rgb(56, 56, 61"] { + --sidebar-background-color: #3B3B3B !important; + --sidebar-text-color: #fff !important; +} + +#browser:not([style*="--sidebar-border-color"]) { + --sidebar-border-color: #bfbfbf !important; +} + +#browser[style*="--sidebar-border-color: rgba(255, 255, 255"] { + --sidebar-border-color: #686868 !important; +} + +.sidebar-panel:not([lwt-sidebar]) { + color: #000 !important; +} + +@-moz-document url(chrome://browser/content/syncedtabs/sidebar.xhtml) { + body { + background: transparent !important; + } +} + +.sidebar-panel[lwt-sidebar-brighttext][style*="--lwt-sidebar-background-color: rgb(56, 56, 61)"], +body[lwt-sidebar-brighttext][style*="--lwt-sidebar-background-color: rgb(56, 56, 61)"] { + --lwt-sidebar-background-color: #3B3B3B !important; + --lwt-sidebar-text-color: #fff !important; + scrollbar-color: #fff6 #3B3B3B40 !important; +} + +@media(-moz-platform: windows) { + .sidebar-panel:not([lwt-sidebar]) #sidebar-search-container>#search-box, + .sidebar-panel:not([lwt-sidebar]) #viewButton { + appearance: none !important; + background-color: #fff !important; + color: inherit !important; + border: 1px solid #bfbfbf !important; + border-radius: 2px !important; + } + + .sidebar-panel[lwt-sidebar-brighttext][style*="--lwt-sidebar-background-color: rgb(56, 56, 61)"] #sidebar-search-container>#search-box, + .sidebar-panel[lwt-sidebar-brighttext][style*="--lwt-sidebar-background-color: rgb(56, 56, 61)"] #viewButton { + appearance: none !important; + background-color: #2B2B2B !important; + color: inherit !important; + border: 1px solid #686868 !important; + border-radius: 2px !important; + } +} + +/* Linux / GTK csd support */ +@media (-moz-gtk-csd-available) { + :root:not(:-moz-lwtheme) { + --toolbar-bgcolor: color-mix(in srgb, -moz-dialog 80%, #fff) !important; + --toolbar-bgimage: none !important; + --toolbar-color: -moz-dialogtext !important; + --tab-selected-bgimage: none !important; + --chrome-content-separator-color: ThreeDShadow !important; + --panel-separator-color: ThreeDShadow !important; + --button-bgcolor: color-mix(in srgb, currentColor 10%, transparent) !important; + --button-hover-bgcolor: color-mix(in srgb, currentColor 14%, transparent) !important; + --button-active-bgcolor: color-mix(in srgb, currentColor 20%, transparent) !important; + --button-color: currentColor !important; + --button-primary-bgcolor: -moz-accent-color !important; + --button-primary-hover-bgcolor: color-mix(in srgb, black 10%, -moz-accent-color) !important; + --button-primary-active-bgcolor: color-mix(in srgb, black 20%, -moz-accent-color) !important; + --button-primary-color: -moz-accent-color-foreground !important; + --autocomplete-popup-hover-background: var(--arrowpanel-dimmed) !important; + --autocomplete-popup-separator-color: color-mix(in srgb, currentColor 14%, transparent) !important; + --urlbar-box-bgcolor: var(--button-bgcolor) !important; + --urlbar-box-focus-bgcolor: var(--button-bgcolor) !important; + --urlbar-box-hover-bgcolor: var(--button-hover-bgcolor) !important; + --urlbar-box-active-bgcolor: var(--button-active-bgcolor) !important; + --urlbar-box-text-color: inherit !important; + --urlbar-box-hover-text-color: var(--urlbar-box-text-color) !important; + --urlbar-icon-fill-opacity: 0.9 !important; + --urlbar-popup-url-color: -moz-nativehyperlinktext !important; + --lwt-brighttext-url-color: #00ddff !important; + --toolbarbutton-icon-fill-attention: -moz-nativehyperlinktext !important; + --focus-outline-color: -moz-accent-color !important; + --arrowpanel-background: Field !important; + --arrowpanel-color: FieldText !important; + --arrowpanel-border-color: ThreeDShadow !important; + --arrowpanel-dimmed: color-mix(in srgb, currentColor 17%, transparent) !important; + --arrowpanel-dimmed-further: color-mix(in srgb, currentColor 30%, transparent) !important; + --panel-description-color: GrayText !important; + --panel-disabled-color: GrayText !important; + --toolbarbutton-icon-fill: currentColor !important; + --toolbar-field-background-color: Field !important; + --toolbar-field-color: FieldText !important; + --toolbar-field-border-color: ThreeDShadow !important; + --toolbar-field-focus-background-color: Field !important; + --toolbar-field-focus-color: FieldText !important; + --toolbar-field-focus-border-color: -moz-accent-color !important; + --toolbarbutton-hover-background: color-mix(in srgb, -moz-dialogtext 14%, transparent) !important; + --toolbarbutton-active-background: color-mix(in srgb, -moz-dialogtext 20%, transparent) !important; + --uc-urlbar-shadow: none; + --autocomplete-popup-highlight-color: FieldText !important; + --autocomplete-popup-highlight-background: color-mix(in srgb, currentColor 8%, transparent) !important; + --autocomplete-popup-hover-background: color-mix(in srgb, currentColor 12%, transparent) !important; + --autocomplete-popup-separator-color: #0000 !important; + --panel-item-hover-bgcolor: color-mix(in srgb, currentColor 17%, transparent) !important; + --panel-item-active-bgcolor: color-mix(in srgb, currentColor 30%, transparent) !important; + --panel-separator-color: ThreeDShadow !important; + --panel-banner-item-update-supported-bgcolor: #1bba6b !important; + --focus-outline-color: -moz-accent-color !important; + --uc-private-browsing-indicator: -moz-accent-color !important; + --uc-private-browding-indicator-hover: var(--button-primary-hover-bgcolor); + --uc-private-browding-indicator-active: var(--button-primary-active-bgcolor); + --uc-private-browding-indicator-text: var(--button-primary-color); + } + + #sidebar-box:not([lwt-sidebar]) { + --sidebar-background-color: -moz-dialog !important; + --sidebar-text-color: -moz-dialog-text !important; + } + + #browser:not([style*="--sidebar-border-color"]) { + --sidebar-border-color: ThreeDShadow !important; + } + + .sidebar-panel:not([lwt-sidebar]) { + color: -moz-dialogtext !important; + } + + @media (prefers-color-scheme: light) { + :root:not(:-moz-lwtheme) { + --toolbar-bgcolor: color-mix(in srgb, -moz-dialog 65%, #fff) !important; + --urlbar-icon-fill-opacity: 0.7 !important; + --toolbar-field-border-color: transparent !important; + --toolbar-field-background-color: color-mix(in srgb, Field 90%, -moz-dialogtext) !important; + --toolbar-field-color: FieldText !important; + --toolbar-field-focus-background-color: Field !important; + --toolbar-field-focus-color: FieldText !important; + } + } + + @media (prefers-color-scheme: dark) { + :root:not(:-moz-lwtheme) { + --toolbar-bgcolor: color-mix(in srgb, -moz-dialog 90%, #fff) !important; + --urlbar-icon-fill-opacity: 1.0 !important; + --toolbar-field-border-color: transparent !important; + --toolbar-field-background-color: color-mix(in srgb, Field 90%, -moz-dialogtext) !important; + --toolbar-field-color: FieldText !important; + --toolbar-field-focus-background-color: color-mix(in srgb, Field 90%, -moz-dialogtext) !important; + --toolbar-field-focus-color: FieldText !important; + } + } +} + + +#navigator-toolbox { + border-bottom: 0px solid var(--chrome-content-separator-color) !important; + box-shadow: none !important; +} + +.tab-throbber:not([pinned]), .tab-icon-pending:not([pinned]), .tab-icon-image:not([pinned]), .tab-sharing-icon-overlay:not([pinned]), .tab-icon-overlay:not([pinned]) { + margin-left: 4px !important; +} + +:root[tabsintitlebar] .tab-label { + font-size: 11px !important; } + +.tab-content[pinned="true"] { + padding-inline: 24px !important; +} + +.tab-throbber:not([pinned]), .tab-icon-pending:not([pinned]), .tab-icon-image:not([pinned]), .tab-sharing-icon-overlay:not([pinned]), .tab-icon-overlay:not([pinned]) { + margin-inline-end: 10px !important; +} + +.tabbrowser-tab:is([visuallyselected="true"], +[multiselected])>.tab-stack>.tab-background { + box-shadow: rgba(255, 255, 255, 0.015) 0px 1px 3px 0px, rgba(255, 255, 255, 0.15) 0px 0px 0px 1px !important; } + + + +.tabbrowser-tab { +opacity: 0.6 !important; font-weight: 400 !important; } + +.tabbrowser-tab:is([selected], [multiselected]) { + font-weight: 600 !important; + opacity: 1 !important; + } + + +#nav-bar {margin-top: -4px !important} diff --git a/hm/profiles/apps/browser-firefox/styles/user.js.bak b/hm/profiles/apps/browser-firefox/styles/user.js.bak new file mode 100644 index 00000000..5e3ab85a --- /dev/null +++ b/hm/profiles/apps/browser-firefox/styles/user.js.bak @@ -0,0 +1,20 @@ +// Generated by Home Manager. + +user_pref("browser.bookmarks.file", "/nix/store/0qdqhbcd2w2k5r94bpiln7kpxy885bqn-firefox-bookmarks.html"); +user_pref("browser.places.importBookmarksHTML", true); +user_pref("gnomeTheme.activeTabContrast", true); +user_pref("gnomeTheme.bookmarksToolbarUnderTabs", true); +user_pref("gnomeTheme.closeOnlySelectedTabs", true); +user_pref("gnomeTheme.dragWindowHeaderbarButtons", true); +user_pref("gnomeTheme.hideUnifiedExtensions", false); +user_pref("gnomeTheme.hideWebrtcIndicator", false); +user_pref("gnomeTheme.normalWidthTabs", false); +user_pref("gnomeTheme.symbolicTabIcons", true); +user_pref("gnomeTheme.systemIcons", true); +user_pref("gnomeTheme.tabsAsHeaderbar", false); +user_pref("privacy.globalprivacycontrol.enable", true); +user_pref("privacy.globalprivacycontrol.functionality.enable", true); +user_pref("svg.content-properties.content.enabled", true); + + + diff --git a/hm/profiles/apps/browser-firefox/styles/userChrome.1.bak b/hm/profiles/apps/browser-firefox/styles/userChrome.1.bak new file mode 100644 index 00000000..8b280db0 --- /dev/null +++ b/hm/profiles/apps/browser-firefox/styles/userChrome.1.bak @@ -0,0 +1,38 @@ +@import "firefox-gnome-theme/userChrome.css"; +@import "autohide_sidebar.css"; +@import "page_action_buttons_on_urlbar_hover.css"; +@import "compact_extensions_panel.css"; +@import "urlbar_connection_type_text_colors.css"; +@import "urlbar_container_color_border.css"; +@import "multi-row_bookmarks.css"; +@import "tab-hover-preview.css"; +/* +@import "firefox-sidebar/userChrome.css"; +@import "urlbar_connection_type_background_colors.css"; +@import "floating_findbar_on_top.css"; +@import "custom_menupopup_check_icons.css"; +*/ +@import "overlay_sidebar_header.css"; +@import "autohide_navigation_button.css"; +@import "grid_overflow_menu.css"; +@import "newtab_button_always_on_hover.css"; + * @import "urlbar_info_icons_on_hover.css"; + * + * + * + * --lwt-accent-color-inactive: color-mix(in lab, AccentColor 35%, #000000) !important; + * + * https://github.com/lassekongo83/adw-gtk3/blob/main/gtk4.md + * https://github.com/lassekongo83/adw-gtk3#readme + * + * https://github.com/advanced03/FirefoxFluentTheme + * https://github.com/datguypiko/Firefox-Mod-Blur + * https://github.com/Redundakitties/colorful-minimalist + * https://github.com/Bali10050/FirefoxCSS + * https://github.com/easonwong-de/Tab-Preview-On-Hover + * https://github.com/easonwong-de/Adaptive-Tab-Bar-Colour + * https://github.com/Neikon/Minimal-VivaldiFox-Theme + * https://pastebin.com/uqJ2tziQ # Adapt to system color scheme + * https://github.com/Neikon/Fox11 + */ + diff --git a/hm/profiles/apps/browser-firefox/variants/nightly.nix b/hm/profiles/apps/browser-firefox/variants/nightly.nix new file mode 100644 index 00000000..db59372a --- /dev/null +++ b/hm/profiles/apps/browser-firefox/variants/nightly.nix @@ -0,0 +1,21 @@ +{ self +, inputs +, config +, lib +, pkgs +, ... +}: +{ + #nixpkgs.overlays = [ + # inputs.nixpkgs-mozilla.overlay # Imported in flake + #]; + + home.packages = [ + # https://github.com/mozilla/nixpkgs-mozilla + # Docs say to build w/ flag --impure + #pkgs.latest.firefox-nightly-bin #firefox-{,beta,nightly,esr}-bin + + # https://github.com/colemickens/flake-firefox-nightly + #inputs.firefox.packages.${pkgs.system}.firefox-nightly-bin # TODO: Add to inputs in flake.nix + ]; +} diff --git a/hm/profiles/apps/browser-firefox/wrapper.nix b/hm/profiles/apps/browser-firefox/wrapper.nix new file mode 100644 index 00000000..231f646e --- /dev/null +++ b/hm/profiles/apps/browser-firefox/wrapper.nix @@ -0,0 +1,68 @@ +{ + config, + osConfig, + lib, + pkgs, + ... +}: +# +# Wrapped Firefox package with default extensions & policies +# - Import in NixOS options, home-manager options, nix-darwin options to share config. +# +# https://github.com/NixOS/nixpkgs/blob/master/doc/packages/firefox.section.md +# +lib.wrapFirefox pkgs.firefox-esr-unwrapped { + # Install Firefox Addons + # TODO: Create NUR repo for extensions missing from upstream + rycee's repo + nixExtensions = with pkgs.nur.repos.rycee.firefox-addons; [ + # Upstream Packaged Extensions + # NUR Packaged Extensions + # Unpackaged Extensions + (pkgs.fetchFirefoxAddon { + name = "privacy.com"; + url = "https://addons.mozilla.org/firefox/downloads/file//--.xpi"; + hash = "sha256-"; + }) + (pkgs.fetchFirefoxAddon { + name = "canvas-blocker"; + url = "https://addons.mozilla.org/firefox/downloads/file//--.xpi"; + hash = "sha256-"; + }) + (pkgs.fetchFirefoxAddon { + name = "adaptive-tab-bar-color"; + url = "https://addons.mozilla.org/firefox/downloads/file//--.xpi"; + hash = "sha256-"; + }) + ]; + + # https://github.com/mozilla/policy-templates/blob/master/linux/policies.json + extraPolicies = { + CaptivePortal = false; + DisableFirefoxStudies = true; + DisablePocket = true; + DisableTelemetry = true; + DisableFirefoxAccounts = true; + FirefoxHome = { + Pocket = false; + Snippets = false; + }; + UserMessaging = { + ExtensionRecommendations = false; + FeatureRecommendations = lib.mkDefault false; + MoreFromMozilla = lib.mkDefault false; + SkipOnboarding = true; + UrlbarInterventions = lib.mkDefault false; + WhatsNew = lib.mkDefault true; + Locked = false; + }; + SecurityDevices = { + # Use a proxy module rather than `nixpkgs.config.firefox.smartcardSupport = true` + "PKCS#11 Proxy Module" = "${pkgs.p11-kit}/lib/p11-kit-proxy.so"; + }; + }; + + extraPrefs = '' + // Show more ssl cert infos + lockPref("security.identityblock.show_extended_validation", true); + ''; +} diff --git a/hm/profiles/apps/browser-tor/default.nix b/hm/profiles/apps/browser-tor/default.nix new file mode 100644 index 00000000..0173f10c --- /dev/null +++ b/hm/profiles/apps/browser-tor/default.nix @@ -0,0 +1,10 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ ]; + home.packages = lib.mkIf (pkgs.system == "x86_64-linux") [ pkgs.tor-browser-bundle-bin ]; +} diff --git a/hm/profiles/apps/browsers.nix b/hm/profiles/apps/browsers.nix new file mode 100644 index 00000000..031fd2e3 --- /dev/null +++ b/hm/profiles/apps/browsers.nix @@ -0,0 +1,35 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + ./browser-chromium + #./browser-chromium/brave.nix + #./browser-chromium/chromite.nix + #./browser-chromium/ungoogled.nix + + ./browser-firefox + #./browser-firefox/arkenfox.nix + #./browser-firefox/librewolf.nix + #./browser-firefox/iceraven.nix + + #] ++ lib.optionals (pkgs.system == "x86_64-linux") [./browser-tor] + #./browser-tor + ]; + + # https://gist.github.com/quidome/4e225db4b1611a9624d3927919f96bc6 + #config = lib.mkIf config.services.xserver.desktopManager.gnome.enable { + # services.xserver.desktopManager.gnome.extraGSettingsOverrides = '' + # ''; + #}; + #dconf.settings = { + # "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1" = { + # binding = "b"; + # command = "browser-chooser"; + # name = "launch browserchooser"; + # }; + #}; +} diff --git a/hm/profiles/apps/chat-discord/default.nix b/hm/profiles/apps/chat-discord/default.nix new file mode 100644 index 00000000..e51dfc4f --- /dev/null +++ b/hm/profiles/apps/chat-discord/default.nix @@ -0,0 +1,13 @@ +{ pkgs, config, lib, ... }: +{ + imports = [ + + # TODO: Conditional on GTK-based desktop + ./gtkcord.nix + + # TODO: QT clients? + # TODO: Better ElectronJS clients? + # TODO: Proprietary client + ]; + +} diff --git a/hm/profiles/apps/chat-discord/gtkcord.nix b/hm/profiles/apps/chat-discord/gtkcord.nix new file mode 100644 index 00000000..cec12f62 --- /dev/null +++ b/hm/profiles/apps/chat-discord/gtkcord.nix @@ -0,0 +1,4 @@ +{ inputs, config, lib, pkgs, ... }: +{ + home.packages = [ pkgs.gtkcord4 ]; +} diff --git a/hm/profiles/apps/chat-matrix/default.nix b/hm/profiles/apps/chat-matrix/default.nix new file mode 100644 index 00000000..9957fdd4 --- /dev/null +++ b/hm/profiles/apps/chat-matrix/default.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: +{ + imports = [ + #./cinny.nix + ./element.nix + #./fluffychat.nix + #./neko.nix + #./schlidichat.nix + #./syphon.nix + ]; +} diff --git a/hm/profiles/apps/chat-matrix/element.nix b/hm/profiles/apps/chat-matrix/element.nix new file mode 100644 index 00000000..53d779d3 --- /dev/null +++ b/hm/profiles/apps/chat-matrix/element.nix @@ -0,0 +1,3 @@ +{ pkgs, ... }: { + home.packages = [ pkgs.element-desktop ]; +} diff --git a/hm/profiles/apps/chat-pidgin/default.nix b/hm/profiles/apps/chat-pidgin/default.nix new file mode 100644 index 00000000..61565112 --- /dev/null +++ b/hm/profiles/apps/chat-pidgin/default.nix @@ -0,0 +1,44 @@ +{ inputs, config, lib, pkgs, ... }: +{ + #imports = [ ./chat.nix ]; + # TODO: Move purple/pidgin plugins to ./app-chat.nix + home.packages = [ + # --- Purple Plugins --- + + # OMEMO Encryption for libpurple + pkgs.purple-lurch + + # Plugin for SMS via ModemManager + pkgs.purple-mm-sms + + # Plugin for HTTP file upload over XMPP protocol + pkgs.purple-xmpp-http-upload + + # Collection of plugins for purple clients + pkgs.purple-plugin-pack + + pkgs.purple-discord + pkgs.purple-facebook + pkgs.purple-googlechat + pkgs.purple-hangouts + pkgs.purple-slack + pkgs.purple-vk-plugin + #pkgs.tdlib-purple + + pkgs.purple-matrix + pkgs.purple-signald + + # --- Pidgin Plugins --- + pkgs.pidgin-carbons + pkgs.pidgin-latex + pkgs.pidgin-indicator + pkgs.pidgin-msn-pecan + pkgs.pidgin-opensteamworks + pkgs.pidgin-skypeweb + pkgs.pidgin-window-merge + pkgs.pidgin-xmpp-receipts + #gnomeExtensions.pidgin-im-integration + ]; + + # TODO: Add browser webapps for missing social networks +} diff --git a/hm/profiles/apps/chat-signal/default.nix b/hm/profiles/apps/chat-signal/default.nix new file mode 100644 index 00000000..af0d6bfb --- /dev/null +++ b/hm/profiles/apps/chat-signal/default.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + imports = [ + ./electron.nix + #./axolotl.nix + #./flare.nix + ]; + +} diff --git a/hm/profiles/apps/chat-signal/electron.nix b/hm/profiles/apps/chat-signal/electron.nix new file mode 100644 index 00000000..afc11133 --- /dev/null +++ b/hm/profiles/apps/chat-signal/electron.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + home.packages = [ pkgs.signal-desktop ]; +} diff --git a/hm/profiles/apps/chat-twitch/chatterino.nix b/hm/profiles/apps/chat-twitch/chatterino.nix new file mode 100644 index 00000000..17ec405c --- /dev/null +++ b/hm/profiles/apps/chat-twitch/chatterino.nix @@ -0,0 +1,19 @@ +{ inputs, config, lib, pkgs, ... }: { + imports = [ + #./chatterino.nix + ]; + + services.mpd.enable = true; + home.packages = [ + pkgs.chatterino2 + pkgs.streamlink + + # --- MPD Client --- + # Used by chatterino to open video + #pkgs.mpd + #pkgs.mpdas + #pkgs.mpdris2 + #pkgs.mpd-mpris + pkgs.ymuse # GTK app # TODO: Only use for GTK environments. + ]; +} diff --git a/hm/profiles/apps/chat-twitch/default.nix b/hm/profiles/apps/chat-twitch/default.nix new file mode 100644 index 00000000..51cc781e --- /dev/null +++ b/hm/profiles/apps/chat-twitch/default.nix @@ -0,0 +1,7 @@ +{ config, lib, pkgs, ... }: +{ + imports = [ + ./chatterino.nix + ]; + +} diff --git a/hm/profiles/apps/default.nix b/hm/profiles/apps/default.nix new file mode 100644 index 00000000..4ecd867f --- /dev/null +++ b/hm/profiles/apps/default.nix @@ -0,0 +1,31 @@ +{ inputs, lib, config, pkgs, ... }: +{ + imports = [ + #./browsers.nix + ./browser-chromium + ./browser-firefox + #./browser-tor + + ./chat-matrix + ./chat-pidgin + #./chat-beeper + #./chat-discord + ./chat-signal + + ./libreoffice + #./onlyoffice + + #./passwords.nix + #./bitwarden + #./keepass + #./nextcloud-passwords + #./pass + ]; + + home.packages = [ + pkgs.hunspell + pkgs.hunspellDicts.en_US + pkgs.onlyoffice-bin + ]; + +} diff --git a/hm/profiles/apps/libreoffice/default.nix b/hm/profiles/apps/libreoffice/default.nix new file mode 100644 index 00000000..82dc7a35 --- /dev/null +++ b/hm/profiles/apps/libreoffice/default.nix @@ -0,0 +1,10 @@ +{ pkgs, ... }: { + imports = [ ]; + + home.packages = [ + pkgs.libreoffice-fresh + #pkgs.libreoffice-fresh-unwrapped + #pkgs.libreoffice + ]; + +} diff --git a/hm/profiles/cachix-agent.nix b/hm/profiles/cachix-agent.nix new file mode 100644 index 00000000..5d39e222 --- /dev/null +++ b/hm/profiles/cachix-agent.nix @@ -0,0 +1,16 @@ +{ + config, + lib, + pkgs, + user, + ... +}: { + services.cachix-agent = { + name = "home-manager-${user}"; + enable = true; + #credentialsFile = "${config.sops.secrets.cachix-agent-token.path}"; + }; + sops.secrets.cachix-agent-token = { + path = config.services.cachix-agent.credentialsFile; + }; +} diff --git a/hm/profiles/crypto/default.nix b/hm/profiles/crypto/default.nix new file mode 100644 index 00000000..e162e1d8 --- /dev/null +++ b/hm/profiles/crypto/default.nix @@ -0,0 +1,28 @@ +{ + inputs, + self, + config, + lib, + pkgs, + ... +}: { + imports = [ + #./age.nix # age secret encryption + ./gpg.nix # GPG client + #./gpg # GPG client + #./gpg/agent.nix # GPG agent + #./sops.nix # sops secret encryption + #./ssh/config.nix # SSH client config + #./ssh/certs.nix # SSH cert authentication + #./ssh/keys.nix # SSH key authentication + #./tls.nix # TLS certificates + #./keyring/pass.nix # services.pass-secret-service.enable + #./keyring/password-store.nix # services.password-store-sync.enable + #./storage/luks.nix # Per-user disk encryption using LUKS2 containers + #./storage/ecryptfs.nix # Per-user disk encryption using ecryptfs + #./storage/fcryptfs.nix # Per-user disk encryption using fcryptfs + #./storage/gocryptfs.nix # Per-user disk encryption using gocryptfs + #./storage/gocryptfs.nix # TODO: Other dir encryption method supported by Vaults GTK4 app + #./vault.nix # Hashicorp Vault + ]; +} diff --git a/hm/profiles/crypto/gpg.nix b/hm/profiles/crypto/gpg.nix new file mode 100644 index 00000000..19247ca2 --- /dev/null +++ b/hm/profiles/crypto/gpg.nix @@ -0,0 +1,107 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +# Good overview of GPG: +# - https://rgoulter.com/blog/posts/programming/2022-06-10-a-visual-explanation-of-gpg-subkeys.html +# +# TODO: Unify all secret-related config +# TODO: Move all GNOME-related config to ./gnome/default.nix or ./gnome/keys.nix +# TODO: Figure out how to use pinentry ${pkgs.gcr_4}/libexec/gcr4-ssh-askpass everywhere +# TODO: Use pkgs.gpg with binary built with "large secure memory buffer" (for option: enable-large-rsa) +# TODO: Avoid hard-coding default key as string +# TODO: Set services.gpg-agent.pinentryFlavor conditionally based on default desktop +# TODO: Set programs.gpg.settings.photo-viewer = "" based on desktop environment / terminal photo viewer program +# TODO: Set programs.gpg.settings.use-agent = true when any GPG agent program is enabled (services.gpg-agent.enable) +{ + programs.gpg = { + # --- Basic GnuPG Options --- + # See: man gpg(1) + # https://gnupg.org/documentation/manuals/gnupg24/gpg.1.html + enable = true; + homedir = "${config.xdg.dataHome}/gnupg"; # Set GPGHOME to follow XDG Spec + settings = { + enable-progress-filter = true; + list-options = [ + "show-uid-validity" + "show-keyring" + #"show-photos" + ]; + no-comments = false; + photo-viewer = "${pkgs.lsix}/bin/lsix"; #"org.gnome.Loupe"; + use-agent = true; + utf8-strings = true; + verify-options = [ + "show-uid-validity" + #"show-photos" + ]; + with-fingerprint = true; + #agent-program = ""; # Agent program for secret key operations + #dirmngr-program = ""; # Keyserver access program, default: /usr/local/bin/dirmngr + #enable-large-rsa = true; # + #show-keyserver-urls = true; # invalid + #show-notations = true; # invalid + #show-policy-urls = true; # invalid + #show-sig-expire = true; # invalid + #show-usage = true; # invalid + }; + #package = pkgs.gnupg + #mutableKeys = false; # Default: true + #mutableTrust = true; # Default: true + # --- Smartcard Daemon --- + # pkgs.gnupg-pkcs11-scd # scdaemon that enables use of PKCS#11 tokens w/ GnuPG + # See: man scdaemon(1) + #scdaemonSettings = { + # disable-ccid = true; + #}; + # --- External Public Keys --- + # WARN: Entries here will be added to the world-viewable Nix store + #publicKeys = [ + #{ + # source = ./pubkeys.txt; + # text = ""; # Text of OpenPGP public key + # trust = "full"; # unknown | never | marginal | full | ultimate + #} + #]; + }; + + # --- GnuPG Agent --- + services.gpg-agent = { + enable = true; # Use agent to manage access to GPG keys + enableExtraSocket = true; # Enable extra socket of GnuPG key agent, useful for GPG Agent forwarding + enableScDaemon = true; # Enable scdaemon tool, enables ability to do smartcard operations + enableSshSupport = lib.mkIf (!config.services.gnome-keyring.enable) true; # Use GnuPG agent for SSH keys + defaultCacheTtl = 1800; + defaultCacheTtlSsh = 1800; + #grabKeyboardAndMouse = true; + #maxCacheTtl = null; + #maxCacheTtlSsh = null; + # TODO: Also set services.dbus.packages = [ pkgs.gcr ]; + verbose = true; + extraConfig = '' + allow-loopback-pinentry + ''; + # Which GPG keys (by keygrip) to expose as SSH keys + #sshKeys = [ + # "" + #]; + }; + + # --- Keychain --- + #programs.keychain.agents = [ + #]; + + # --- PAM --- + # TODO: See if pam_gnupg is used with existing config + # TODO: Enable pam_gnupg if not already (to unlock GPG keys on login) + + # --- GNOME Keyring --- + # --- libsecret --- + # --- Secret Service --- + # --- age/rage --- + # --- agenix/sops-nix --- + # --- SSH Agent --- + # --- SSH Client --- +} diff --git a/hm/profiles/default.nix b/hm/profiles/default.nix new file mode 100644 index 00000000..46942df8 --- /dev/null +++ b/hm/profiles/default.nix @@ -0,0 +1,77 @@ +{ + inputs, + nixosConfig, + osConfig, + config, + lib, + pkgs, + ... +}: let + inherit (pkgs) system; + #system = pkgs.system; + arch = lib.lists.elemAt (lib.strings.splitString "-" system) 0; + platform = lib.lists.elemAt (lib.strings.splitString "-" system) 1; +in { + imports = [ + ./modules + + ./crypto + ./apps + ./gnome + ./editor + ./fonts.nix + ./git + ./languages/nodejs.nix + ./languages/python.nix + ./languages/rust.nix + ./nix + ./ollama.nix + ./roles/dev + ./roles/sysadmin + ./search + ./shell + ./social + ./virt + ./xdg.nix + ./cachix-agent.nix + + # TODO: Conditionally load ./nixos.nix when system is NixOS-based + #./_system/${system} + #./_arch/${arch} + #./_platform/${platform} + #./_host/${osConfig.networking.hostName} + ]; + + home = { + stateVersion = "23.11"; + enableDebugInfo = true; + enableNixpkgsReleaseCheck = true; + #extraOutputsToInstall = [ "doc" "info" "devdoc" "dev" "bin" ]; + sessionPath = with config.xdg.userDirs.extraConfig; [ + XDG_APPS_DIR + XDG_BIN_DIR + ]; + packages = [ + #pkgs.ripgrep-all # Fast grep w/ ability to search in PDFs, eBooks, Office docs, archives, & more + pkgs.repgrep # Interactive replacer for ripgrep + + #pkgs.python311Full + #pkgs.python312 + #pkgs.python311 + #pkgs.python310 + + pkgs.ntfs3g + #pkgs.rustup + ]; + }; + + programs = { + ripgrep.enable = true; + home-manager.enable = true; + }; + + services.home-manager.autoUpgrade = { + enable = true; + frequency = "weekly"; + }; +} diff --git a/hm/profiles/desktop/audio.nix b/hm/profiles/desktop/audio.nix new file mode 100644 index 00000000..4eadb448 --- /dev/null +++ b/hm/profiles/desktop/audio.nix @@ -0,0 +1,23 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + # Note: System audio config in ../../../profiles/desktop/{default,pipewire}.nix + # This file is just for user utils that don't get installed for all users by default + + imports = [ + #./audio/alsa.nix + #./audio/jack.nix + #./audio/pipewire.nix + #./audio/pulseaudio.nix + #./audio/pulseeffects.nix + ../shell/common/audio.nix # CLI controls for MPRIS & other audio sources + + ]; + +} + + diff --git a/hm/profiles/desktop/default.nix b/hm/profiles/desktop/default.nix new file mode 100644 index 00000000..b40eba26 --- /dev/null +++ b/hm/profiles/desktop/default.nix @@ -0,0 +1,19 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + ./audio.nix + ./flatpak.nix + ./rofi.nix + ./fonts.nix + + #./polybar.nix + #./touchpad.nix + #./udiskie.nix + #./wayland.nix + ]; +} diff --git a/hm/profiles/desktop/flatpak.nix b/hm/profiles/desktop/flatpak.nix new file mode 100644 index 00000000..0bb254a7 --- /dev/null +++ b/hm/profiles/desktop/flatpak.nix @@ -0,0 +1,19 @@ +{ self, inputs +, config, lib, pkgs +, options +, flatpak-repos ? { flathub = "https://flathub.org/repo/flathub.flatpakrepo"; } +, ... +}: +#lib.attrsets.recursiveUpdate +{ + +} +#(lib.optionalAttrs (options?services.flatpak.packages) { +# services.flatpak.remotes = flatpak-repos; +# services.flatpak.preInitCommand = ""; +# services.flatpak.postInitCommand = ""; +# +# # TODO: Add all default packages (runtimes, SDKs, themes, libs, plugins, codecs, etc.) +# services.flatpak.packages = [ +# ]; +#}) diff --git a/hm/profiles/desktop/fonts.nix b/hm/profiles/desktop/fonts.nix new file mode 100644 index 00000000..1e0633eb --- /dev/null +++ b/hm/profiles/desktop/fonts.nix @@ -0,0 +1,9 @@ +{ inputs, lib, config, pkgs, ... }: { + imports = [ + # TODO: Split ../fonts.nix into ../desktop/fonts.nix & ../shell/fonts.nix + #inputs.home-extra-xhmm.homeManagerModules.desktop.fonts + ]; + + #fonts.fonts = [ #types.package + #]; +} diff --git a/hm/profiles/desktop/gtk.nix b/hm/profiles/desktop/gtk.nix new file mode 100644 index 00000000..9ebcb55c --- /dev/null +++ b/hm/profiles/desktop/gtk.nix @@ -0,0 +1,180 @@ +{ + config, + lib, + pkgs, + osConfig, + ... +}: +# --- Docs --- +# https://nix-community.github.io/home-manager/options.html#opt-gtk.enable +# https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/named-colors.html +# https://github.com/lassekongo83/adw-colors +# https://gitlab.gnome.org/GNOME/libadwaita (libadwaita source code) +# +# TODO: Handle flatpaks +# - flatpak install org.gtk.Gtk3theme.adw-gtk3 org.gtk.Gtk3theme.Adw-gtk3-dark +# - sudo flatpak override --filesystem=xdg-config/gtk-3.0:ro +# - sudo flatpak override --filesystem=xdg-config/gtk-4.0:ro +# +# TODO: Create theme packages: +# - Kvantum: https://github.com/GabePoel/KvLibadwaita +# - Firefox: https://github.com/rafaelmardojai/firefox-gnome-theme +# - Steam: https://github.com/tkashkin/Adwaita-for-Steam +# - VSCode: https://github.com/piousdeer/vscode-adwaita +# - Discord: https://github.com/GeopJr/DNOME +# - Obsidian: https://github.com/birneee/obsidian-adwaita-theme +# - xfwm4: https://github.com/FabianOvrWrt/adw-xfwm4 +# - GTK colorschemes: https://github.com/lassekongo83/adw-colors +{ + # TODO: https://gitlab.com/rmnvgr/nightthemeswitcher-gnome-shell-extension + # TODO: Diff b/w: + # - gsettings set org.gnome.desktop.interface gtk-theme 'adw-gtk3' + # - dconf write /org/gnome/desktop/interface gtk-theme "'adw-gtk3'" + #home.packages = + # [ + # pkgs.gnomeExtensions.night-theme-switcher + # pkgs.vimPlugins.adwaita-nvim + # pkgs.vscode-extensions.piousdeer.adwaita-theme + # pkgs.gnome.adwaita-icon-theme + # pkgs.adwaita-qt + # pkgs.adwaita-qt6 + # pkgs.adw-gtk3 + # ] + # #++ lib.optionals config.mobile.enable [pkgs.fcitx5-gtk] + # ++ lib.optionals pkgs.platforms.isDarwin [pkgs.gtk-mac-integration-gtk2]; + + #services.darkman = let + # # TODO: Gradience generation + # gtk3-mode = mode: let + # # TODO: Qt theme? + # cursor-theme = + # if mode == "dark" + # then "Simp1e-Adw" + # else "Simp1e-Adw-Dark"; # Reversed for better contrast + # gtk3-theme = + # if mode == "dark" + # then "Adw-gtk3-dark" + # else "Adw-gtk3"; + # gtk-color-palette = ""; # Palette used in color selector + # gtk-color-scheme = ""; # List of symbolic names & color equivalents + # # Set dconf settings + # # TODO: /org/gnome/shell/extensions/nightthemeswitcher/gtk-variants + # # - day 'adw-gtk3' + # # - night 'adw-gtk3-dark' + # # - enabled true + # # TODO: /org/gnome/shell/extensions/nightthemeswitcher/shell-variants + # # - day '' + # # - night 'Custom-Accent-Colors' + # # - enabled true + # # TODO: /org/gnome/shell/extensions/nightthemeswitcher/cursor-variants + # # - day 'Simp1e-Adw-Dark' + # # - night 'Simp1e-Adw' + # # - enabled true + # # TODO: /org/gnome/desktop/interface + # # - gtk-color-scheme + # # TODO: /org/gnome/desktop/background + # # - picture-uri + # # - picture-uri-dark + # # - primary-color + # # - secondary-color + # in + # with config.xdg; '' + # ${pkgs.dconf}/bin/dconf write /org/gnome/desktop/interface/cursor-theme "'${cursor-theme}'" + # ${pkgs.dconf}/bin/dconf write /org/gnome/desktop/interface/gtk-theme "'${gtk3-theme}'" + # if [[ -f "${configHome}/gtk-3.0/mode.css" ] && [ -f "${configHome}/gtk-3.0/${mode}.css" ]]; then + # unlink "${configHome}/gtk-3.0/mode.css" && \ + # ln -s "${configHome}/gtk-3.0/gtk-${mode}.css" "${configHome}/gtk-3.0/mode.css" + # fi + # ''; + #in { + #lightModeScripts = { + # gtk3 = gtk3-mode "light"; + # gtk4 = '' + # ${pkgs.dconf}/bin/dconf write /org/gnome/desktop/interface/color-scheme "'prefer-light'" + # ''; + #}; + # + #darkModeScripts = { + # gtk3 = gtk3-mode "dark"; + # gtk4 = '' + # ${pkgs.dconf}/bin/dconf write /org/gnome/desktop/interface/color-scheme "'prefer-dark'" + # ''; + #}; + #}; + + #xdg.configFile = { + # "gtk-3.0/gtk-dark.css".text = ""; + # "gtk-3.0/gtk-light.css".text = ""; + # "gtk-4.0/gtk-dark.css".text = ""; + # "gtk-4.0/gtk-light.css".text = ""; + # "gtk-4.0/gtk.css".text = '' + # @import url("mode.css"); + # ''; + #}; + + # Always import `mode.css` (set to either `dark.css` or `light.css` depending on mode) + # TODO: @import url("common.css"); + # TODO: @import url("wallpaper.css"); + #gtk.gtk3.extraCss = '' + # @import url("mode.css"); + #''; + + #------------------------------------------------------------------------------- + #------------------------------------------------------------------------------- + #------------------------------------------------------------------------------- + #------------------------------------------------------------------------------- + #------------------------------------------------------------------------------- + #------------------------------------------------------------------------------- + + # Allow fontconfig to discover fonts & configs installed thru `home.packages` & `nix-env` + #fonts.fontconfig.enable = true; + + #gtk = { + # enable = true; + # cursorTheme = { + # name = "Simp1e-Adw"; + # package = pkgs.simp1e-cursors; + # }; + # iconTheme = { + # name = "MoreWaita"; #"Adwaita"; + # package = pkgs.nur.repos.federicoschonborn.morewaita; + # }; + # + # # TODO: Fix setting GTK theme forcing either light or dark mode for GTK2/3, Electron.js, QT apps. + # #theme = { + # # name = "Adw-gtk3-dark"; + # # package = pkgs.adw-gtk3; + # #}; + # + # gtk4.extraConfig = { + # gtk-theme-name = "Adwaita"; + # #gtk-application-prefer-dark-theme = 1; + # }; + # gtk3 = { + # bookmarks = with config.xdg.userDirs.extraConfig; [ + # "file:///${XDG_BACKUP_DIR} Backup" + # "file:///${XDG_BOOKS_DIR} Books" + # "file:///${XDG_CODE_DIR} Code" + # "file:///${XDG_NOTES_DIR} Notes" + # #"file:///${XDG_AUDIO_DIR} Audio" + # "file:///${config.xdg.userDirs.templates} Templates" + # "file:///${config.xdg.userDirs.publicShare} Public" + # #"google-drive://${email}/${gdrive-hash} Google Drive" + # #"google-drive://${email}/${gdrive-shared-hash} Google Drive: Shared" + # ]; + # extraConfig = { + # gtk-theme-name = "Adw-gtk3-dark"; + # #gtk-application-prefer-dark-theme = 1; + # }; + # }; + # gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; # Follow XDG spec + #}; + + #home.packages = [ + # pkgs.adw-gtk3 + # pkgs.gnome.adwaita-icon-theme + # pkgs.plotinus + # #pkgs.nur.repos.ilya-fedin.gtk-layer-background # Desktop background using GTK wayland layer + #]; + #home.sessionVariables.GTK3_MODULES = "${pkgs.plotinus}/lib/libplotinus.so"; +} diff --git a/hm/profiles/desktop/polybar.nix b/hm/profiles/desktop/polybar.nix new file mode 100644 index 00000000..49d67e1c --- /dev/null +++ b/hm/profiles/desktop/polybar.nix @@ -0,0 +1,59 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + ]; + + services.polybar = { + enable = true; + + package = pkgs.polybar.override { + i3GapsSupport = true; + alsaSupport = true; + iwSupport = true; + githubSupport = true; + }; + + config = { + "bar/top" = { + monitor = "\${env:MONITOR:eDP1}"; + width = "100%"; + height = "3%"; + radius = 0; # TODO: Pass user style preferences + modules-center = "date"; + }; + "module/date" = { + type = "internal/date"; + internal = 5; + date = "%d %m"; #, %y"; + time = "%H:%M"; # TODO: AM/PM? + label = "%time% on %date%"; # "%date% @ %time%"; + #format-prefix-foreground = "\''${colors.foreground-alt}"; + }; + }; + + # Script to start polybars. Set all necessary env vars here. + script = '' + polybar bar & + ''; + + settings = { + "module/volume" = { + type = "internal/pulseaudio"; + format.volume = " "; + label.muted.text = "🔇"; + label.muted.foreground = "#666"; + ramp.volume = [ "🔈" "🔉" "🔊" ]; + click.right = "pavucontrol &"; + }; + }; + + extraConfig = '' + ''; + + }; +} diff --git a/hm/profiles/desktop/rofi.nix b/hm/profiles/desktop/rofi.nix new file mode 100644 index 00000000..2192609a --- /dev/null +++ b/hm/profiles/desktop/rofi.nix @@ -0,0 +1,7 @@ +{ inputs, config, lib, pkgs, ... }: +{ + home.packages = [ + # TODO: https://github.com/Git-Fal7/gtk-rofi + pkgs.rofi + ]; +} diff --git a/hm/profiles/desktop/secureboot-notify.nix b/hm/profiles/desktop/secureboot-notify.nix new file mode 100644 index 00000000..d39a07bd --- /dev/null +++ b/hm/profiles/desktop/secureboot-notify.nix @@ -0,0 +1,31 @@ +{ inputs +, config +, lib +, pkgs +, osConfig +, ... +}: +{ + imports = [ + ]; + + #xdg.desktopEntries.secureboot-test = { + # name = "Secure Boot Test"; + # type = "Application"; + #}; + + systemd.user.services.notify-secureboot-uki = { + Unit = { + Description = "Notify user if Secure Boot is enabled with Unified Kernel Image (UKI) support."; + }; + Service = { + ConditionSecurity = "measured-uki"; + ExecStart = "${pkgs.notify-desktop}/bin/notify-desktop --app-name=\"Secure Boot\" \"Enabled (UKI)\""; + # --expire-time=3000 + # --urgency=low + # --icon=\"\" + # --replaces-id=\"\" + # --category=\"\" + }; + }; +} diff --git a/hm/profiles/desktop/touchpad.nix b/hm/profiles/desktop/touchpad.nix new file mode 100644 index 00000000..aaedd527 --- /dev/null +++ b/hm/profiles/desktop/touchpad.nix @@ -0,0 +1,40 @@ +{ + config, + lib, + pkgs, + ... +}: let + # TODO: TEST ME + # TODO: Use `services.xserver.wayland` to set xdotool/ydotool + dotool = pkgs.ydotool; +in { + services.fusuma = { + enable = false; + extraPackages = [pkgs.xdotool pkgs.ydotool]; + settings = { + threshold = {swipe = 0.1;}; + interval = {swipe = 0.7;}; + pinch = { + "in" = { + command = "${lib.getExe pkgs.ydotool} key Ctrl+Super+Up"; + threshold = 0.75; + }; + "out" = { + command = "${lib.getExe pkgs.ydotool} key Ctrl+Super+Down"; + threshold = 0.75; + }; + }; + swipe = { + "3" = { + left = { + command = "ydotool key super+alt+Right"; + threshold = 0.1; + }; + right.command = "ydotool key super+alt+Left"; + up.command = "ydotool key super+alt+Up"; + down.command = "ydotool key super+alt+Down"; + }; + }; + }; + }; +} diff --git a/hm/profiles/desktop/udiskie.nix b/hm/profiles/desktop/udiskie.nix new file mode 100644 index 00000000..c2ce882c --- /dev/null +++ b/hm/profiles/desktop/udiskie.nix @@ -0,0 +1,28 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +# udiskie: Userspace mount daemon +# Note: Requires loading ../../../profiles/hardware/udisks2.nix +{ + imports = [ + ]; + + services.udiskie = { + enable = true; + automount = true; + notify = true; + tray = "auto"; + settings = { + program_options = { + udisks_version = 2; + tray = true; + }; + icon_names.media = [ + "media" #"media-optical" + ]; + }; + }; +} diff --git a/hm/profiles/desktop/wayland.nix b/hm/profiles/desktop/wayland.nix new file mode 100644 index 00000000..31cc1bab --- /dev/null +++ b/hm/profiles/desktop/wayland.nix @@ -0,0 +1,30 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + ]; + + xdg.configFile = + let + flags = '' + --enable-features=UseOzonePlatform,WaylandWindowDecorations,WebUIDarkMode,AutoDarkMode,WebAppEnableDarkMode,MobileLayoutTheme + --ozone-platform-hint=wayland + --enable-raster-side-dark-mode-for-images + --webview-selective-image-inversion-darkening + ''; + in + { + electron = { + target = "${config.xdg.configHome}/electron-flags.conf"; + text = flags; + }; + chromium = { + target = "${config.xdg.configHome}/chromium-flags.conf"; + text = flags; + }; + }; +} diff --git a/hm/profiles/devices/arch/riscv.nix b/hm/profiles/devices/arch/riscv.nix new file mode 100644 index 00000000..818d4c8a --- /dev/null +++ b/hm/profiles/devices/arch/riscv.nix @@ -0,0 +1,13 @@ +{ inputs +, config, lib, pkgs +, ... +}: +{ + imports = [ + ]; + + home.packages = [ + pkgs.nur.repos.uniquepointer.riscv64-linux-gnu-toolchain + pkgs.nur.repos.YisuiMilena.devtools-riscv64 + ]; +} diff --git a/hm/profiles/devices/default.nix b/hm/profiles/devices/default.nix new file mode 100644 index 00000000..56acace0 --- /dev/null +++ b/hm/profiles/devices/default.nix @@ -0,0 +1,44 @@ +{ self +, inputs +, config +, lib +, pkgs +, ... +}: +{ + + # + # TODO: Better code organization for devices. Potential boundaries for code-splitting: + # Starting OSes: Android, Android TV, Fuschia, WearOS, Windows, other proprietary OSes + # Target OSes + # - Android ROMs: AOSP, CalyxOS, DivestOS, GrapheneOS, LineageOS + # - Watch OSes: AsteroidOS, InfiniTime + # - Linux Distros: Debian, NixOS, PostmarketOS + # - Purpose-OSes: OpenWRT + # CPU Architectures: x86_64, aarch32, aarch64, riscv + # Hardware OEMs: Asus, Google, Fairphone, Huawei, Lenovo, Librem, OnePlus, Oppo, Pine64, Raspberry Pi, Xiaomi + # SOC OEMs: Google Tensor, Qualcomm Snapdragon, Rockchip, ESP32 + # Hardware models: cheetah, enchilada, fajita, flame, pinetime, sawfish, raspi5, raspi4, raspi3, raspi0-w, raspi400 + # + # TODO: What tools do we want to install to NixOS machines? + # - Flashable images for target OSes + # - Flashing utils for starting OSes or device hardware + # - Interaction/management utils for target OSes + # - Recovery utils for device hardware + # - SSH hosts for target OSes + # - Sync utils for target OSes + # + # TODO: Find some way of distinguishing between starting OS and used OS. + # i.e. Android phones remaining on Android-based OS, should install tools to interact with Android & apps installed on Android devices (KDE Connect, android-tools, etc.) + # i.e. Android phones moving to Linux-based OS, should install tools for flashing new OS to hardware. (android-tools, pmbootstrap, etc.) + # + + imports = [ + ./oem/samsung.nix + #./oem/pine64.nix + ./os/android + ./os/asteriodos.nix + ./os/postmarketos.nix + ]; + +} diff --git a/hm/profiles/devices/esp32.nix b/hm/profiles/devices/esp32.nix new file mode 100644 index 00000000..40f9b824 --- /dev/null +++ b/hm/profiles/devices/esp32.nix @@ -0,0 +1,16 @@ +{ self +, inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + ../../../profiles/server/iot/esphome.nix + #./arch/arm32.nix + #./arch/arm64.nix + #./arch/riscv.nix + ]; + +} diff --git a/hm/profiles/devices/esp8266.nix b/hm/profiles/devices/esp8266.nix new file mode 100644 index 00000000..40f9b824 --- /dev/null +++ b/hm/profiles/devices/esp8266.nix @@ -0,0 +1,16 @@ +{ self +, inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + ../../../profiles/server/iot/esphome.nix + #./arch/arm32.nix + #./arch/arm64.nix + #./arch/riscv.nix + ]; + +} diff --git a/hm/profiles/devices/fajita.nix b/hm/profiles/devices/fajita.nix new file mode 100644 index 00000000..2d6630cd --- /dev/null +++ b/hm/profiles/devices/fajita.nix @@ -0,0 +1,120 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + # TODO: Reorganize this file + # - OnePlus 6T (fajita) + # - OnePlus 6 (enchilada) + # - OnePlus (all) + # - Android (all) + imports = [ + ./oem/oneplus.nix + ./os/android + ./os/postmarketos.nix + ]; + + # --- Downloads ------------------------------------------ + # TODO: Download Windows binaries & create fetchers + # - OnePlus MSM flasher tool + # - OnePlus ADB/Fastboot drivers + # - Qualcomm EDL drivers + # - Android platform-tools (ADB/fastboot) + + # TODO: Download stock OxygenOS firmware images & OTA images + # - Convert T-Mobile variant OxygenOS 9.x.y to International Unlocked variant 9.x.y (9.0.11) + # - Update International Unlocked 9.x.y to Android 10 + # - Update International Unlocked Android 10 to Android 11 + # - Update International Unlocked Android 11 to Android 11 latest + + # TODO: Download custom Android images + # - LineageOS latest + # - TWRP recovery latest + # - Magisk latest + + # --- Packaging ------------------------------------------ + # TODO: Create Bottle for Windows flashing utilities & drivers + # - Qualcomm EDL drivers + # - Google generic ADB/Fastboot drivers + # - OnePlus ADB/Fastboot drivers + # - OnePlus MSM flasher (for EDL mode) + # - Android platform-tools (ADB & fastboot) + + # --- Building Images ------------------------------------ + # TODO: Build new dual-boot images combining Android & Linux + # - PostmarketOS & OxygenOS 11.1.2.2 + # - NixOS & OxygenOS 11.1.2.2 + # - PostmarketOS & LineageOS + # - NixOS & LineageOS + + # --- Scripts: User Instruction -------------------------- + # TODO: Instruct user how to enter EDL mode + # TODO: Instruct user how to enable ADB debugging + # TODO: Instruct user what to do on their device + + # --- Scripts: Setup ------------------------------------- + # TODO: Reboot into recovery mode + # TODO: Reboot into fastboot mode + # TODO: Reboot into EDL mode + # TODO: Reboot into system + + # TODO: Unlock bootloader + # TODO: Unlock locked partitions + + # TODO: Detect T-Mobile or International Unlocked variant + # TODO: Detect OxygenOS version & select upgrade path + + # --- Scripts: Flashing Android -------------------------- + # TODO: Convert T-Mobile version to international unlocked version + # TODO: Update international unlocked OxygenOS 9.x.y to Android 10 + # TODO: Update international unlocked OxygenOS 10.x.y to Android 11 + # TODO: Update international unlocked OxygenOS 11.x.y to Android 11 latest (11.1.2.2) + # TODO: Update international unlocked OxygenOS (any) to 11.1.2.2 + # TODO: Update T-Mobile variant OxygenOS (any) to 11.1.2.2 + + # TODO: Flash LineageOS over OxygenOS 11.1.2.2 + # TODO: Flash TWRP recovery + # TODO: Flash Magisk on Android partition + + # --- Scripts: Flashing Linux ---------------------------- + # TODO: Configure pmbootstrap w/ `pmbootstrap init` + # TODO: Flash pmbootstrap image with full disk encryption (regular partitioning) + # TODO: Flash pmbootstrap image with full disk encryption (dual-boot partitioning) + # TODO: Flash pmbootstrap image with full disk encryption (userdata partitioning) + # - Regular partitioning + # - Dual-boot partitioning + # - Userdata partitioning (possible to combine with dual-boot?) + + # --- Miscellaneous -------------------------------------- + # TODO: Integrate with Robotnix (https://github.com/nix-community/robotnix) + # TODO: Build custom `LOGO.img` from user-supplied image file? + # TODO: Make flashing scripts able to handle passing slot number via arguments & multi-slot + # TODO: Patch Android system images? (e.g. install Magisk, install system apps, etc.) + # - Install Magisk + MagiskHide + # - Install GApps or MicroG + # - Install additional system apps + # - Camera: Pixel Camera + # - Launcher: Lawnchair | NeoLauncher | Kaevsito | Simple Mobile Launcher | Pixel Launcher + # - Store: F-Droid | NeoStore | Droid-ify | Aurora Store (with privileged extension) + # - Store privileged extension + # TODO: Script to configure settings according to preferences after ADB debugging is enabled + # - Android (generic) + # - LineageOS specific + # - OxygenOS specific + # TODO: Script to install userspace applications + # - NixOnDroid + # - Termux & Termux plugins + + home.packages = [ + #pkgs.payload-flasher-go + + # TODO: Create package for version `34.x.y` + pkgs.android-tools + + # TODO: Create package for version `2.0.0` instead of `1.53.0` or `1.51.0` + pkgs.pmbootstrap + ]; + +} diff --git a/hm/profiles/devices/oem/google.nix b/hm/profiles/devices/oem/google.nix new file mode 100644 index 00000000..520711a7 --- /dev/null +++ b/hm/profiles/devices/oem/google.nix @@ -0,0 +1,22 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + #../os/android/13.nix + #../os/android/14.nix + #../os/android/aosp.nix + #../os/android/calyxos.nix + #../os/android/grapheneos.nix + #../os/postmarketos.nix + ]; + + home.packages = [ + ]; + + # TODO: Install Bottles with OnePlus MDM tool + # TODO: Generic flasher scripts for OnePlus devices +} diff --git a/hm/profiles/devices/oem/oneplus.nix b/hm/profiles/devices/oem/oneplus.nix new file mode 100644 index 00000000..370e52da --- /dev/null +++ b/hm/profiles/devices/oem/oneplus.nix @@ -0,0 +1,18 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + #../os/android + #../os/postmarketos.nix + ]; + + home.packages = [ + ]; + + # TODO: Install Bottles with OnePlus MDM tool + # TODO: Generic flasher scripts for OnePlus devices +} diff --git a/hm/profiles/devices/oem/pine64.nix b/hm/profiles/devices/oem/pine64.nix new file mode 100644 index 00000000..61bb11fc --- /dev/null +++ b/hm/profiles/devices/oem/pine64.nix @@ -0,0 +1,13 @@ +{ self, inputs +, config, lib, pkgs +, ... +}: +{ + imports = [ + ]; + + home.packages = [ + pkgs.rkdeveloptool-pine64 # Rockchip tool to communicate with Rockusb devices (pine64 fork) + ]; + +} diff --git a/hm/profiles/devices/oem/samsung.nix b/hm/profiles/devices/oem/samsung.nix new file mode 100644 index 00000000..1444b8ff --- /dev/null +++ b/hm/profiles/devices/oem/samsung.nix @@ -0,0 +1,16 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + #../os/android + ]; + + home.packages = [ + #pkgs.heimdall + pkgs.heimdall-gui + ]; +} diff --git a/hm/profiles/devices/os/android/default.nix b/hm/profiles/devices/os/android/default.nix new file mode 100644 index 00000000..2e478dfd --- /dev/null +++ b/hm/profiles/devices/os/android/default.nix @@ -0,0 +1,55 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + # https://github.com/tadfisher/android-nixpkgs + #inputs.nixpkgs-android.hmModule + #{ + # #inherit config lib pkgs; + # android-sdk = { + # enable = true; + # #path = "${config.xdg.dataHome}/android/sdk"; + # # nix flake show github:tadfisher/android-nixpkgs + # packages = sdk: with sdk; [ + # build-tools-34-0-0 + # cmdline-tools-latest + # emulator + # platform-tools + # platforms-android-34 + # sources-android-34 + # ]; + # }; + #} + #lib.lists.optional + #config.gtk.enable + #../../desktop/gnome/apps/phone.nix + ]; + + home.packages = lib.mkIf (pkgs.system == "x86_64-linux") [ + # --- ADB & Fastboot --- + #pkgs.android-tools + inputs.nixpkgs-android.packages.${pkgs.system}.platform-tools + #inputs.nixpkgs-android.sdk + #(sdkPkgs: with sdkPkgs; [ + # build-tools-34-0-0 + # cmdline-tools-latest + # emulator + # platform-tools + # platforms-android-34 + #]) + + pkgs.payload-dumper-go # Android OTA payload dumper + #pkgs.nur.repos.aleksana.payload-dumper-go # Android OTA payload dumper + #pkgs.nur.repos.wolfangaukang.device-flasher # Flash CalyxOS to Android device + + #self.packages.fastboot-flash-slot + #self.packages.fajita-flash-oem + #self.packages.fajita-flash-all + #self.packages.fajita-convert-international + ]; + +} diff --git a/hm/profiles/devices/os/asteriodos.nix b/hm/profiles/devices/os/asteriodos.nix new file mode 100644 index 00000000..c9e7351a --- /dev/null +++ b/hm/profiles/devices/os/asteriodos.nix @@ -0,0 +1,37 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + # https://asteroidos.org + # https://wiki.asteroidos.org + imports = [ + ]; + + home.packages = [ + pkgs.android-tools # Android SDK platform tools (ADB / fastboot) + #pkgs.python311Packages.mpd2 # Python MPD lib + #pkgs.python311Packages.pydbus # Python D-Bus lib | dbus-python dbus-fast + #pkgs.python311Packages.pyowm # Python wrapper around OpenWeatherMap web API + #pkgs.python310Packages.mpd2 # Python MPD lib + #pkgs.python310Packages.pydbus # Python D-Bus lib | dbus-python dbus-fast + #pkgs.python310Packages.pyowm # Python wrapper around OpenWeatherMap web API + pkgs.yarn + #pkgs.dhcp # Provides dhclient? # Removed: end-of-life (2023-08-08) + pkgs.dialog + pkgs.connmanFull + pkgs.connman-gtk + ]; + + # TODO: Build fastboot image: [asteriod-image-sawfish.ext4](https://release.asteroidos.org/nightlies/sawfish/asteroid-image-sawfish.ext4) + # TODO: Build fastboot image: [zImage-dtb-sawfish.fastboot](https://release.asteroidos.org/nightlies/sawfish/zImage-dtb-sawfish.fastboot) + # TODO: Create package/app: [AsteriodOS WebInstaller](https://github.com/AsteroidOS/asteroid-webinstall) + # - Deps: yarn, + # TODO: Create package/app: [atx/AsteroidOSLinux](https://github.com/atx/AsteroidOSLinux) + # - Deps: pydbus, python-mpd2, pyown + # TODO: Create package: [AsteriodOS/asteroid-ctrl](https://github.com/AsteroidOS/asteroid-ctrl) + # TODO: Install unofficial-watchfaces + # - Deps: dialog or whiptail +} diff --git a/hm/profiles/devices/os/postmarketos.nix b/hm/profiles/devices/os/postmarketos.nix new file mode 100644 index 00000000..b82cac1b --- /dev/null +++ b/hm/profiles/devices/os/postmarketos.nix @@ -0,0 +1,214 @@ +{ inputs +, config +, lib +, pkgs +, user +, ... +}: +{ + imports = [ ]; + + home = { + packages = [ pkgs.pmbootstrap ]; + shellAliases = { + pmb = "${pkgs.pmbootstrap}/bin/pmbootstrap"; + pmbI = "pmb init"; + pmbi = "pmb install --fde --add unl0kr"; + pmbc = "pmb config"; + pmbf = "fastboot erase dtbo && pmb flasher flash_rootfs --partition=userdata && pmb flasher flash_kernel"; + pmbp = "pmb pull"; + pmbu = "pmb update"; + pmbv = "pmb --version"; + }; + file = { + flash-pmos = { + enable = true; + executable = true; + #onChange = ""; + target = ".local/bin/flash-pmos"; + text = '' + #!/usr/bin/env bash + pmbootstrap install --fde --add unl0kr && \ + fastboot erase dtbo && sleep 3 && \ + pmbootstrap flasher flash_rootfs --partition=userdata && sleep 5 && \ + pmbootstrap flasher flash_kernel && sleep 5 && \ + fastboot reboot bootloader + ''; + }; + update-pmos = { + executable = true; + target = ".local/bin/update-pmos"; + text = '' + #!/usr/bin/env bash + pmbootstrap pull && \ + pmbootstrap aportupgrade --all && \ + pmbootstrap index # && \ + ''; + }; + }; + }; + + # TODO: Convert to Nix, use lib to write as TOML + # TODO: Merge with device configs, fajita0, fajita1, smtaba8 + # TODO: Set keymap + # TODO: Set nonfree_firmware, nonfree_userland based on nixpkgs config.allow-unfree? + # https://wiki.postmarketos.org/wiki/Waydroid + #xdg.configFile = { + # "pmbootstrap.cfg".text = + # let + # pm-packages = [ + # "abootimg" "abootimg-doc" + # "alpine-repo-tools" "alpine-repo-tools-zsh-completion" + # "android-tools" "android-tools-zsh-completion" + # "apk-tools" "apk-tools-zsh-completion" + # "bat" "bat-zsh-completion" + # "bootchart2" + # "devicepkg-utils" + # "dino" + # "dtbtool" + # "dnsmasq" + # "epiphany" + # "extract-dtb" + # "eza" + # "fd" "fd-zsh-completion" + # "flatpak" "flatpak-bash-completion" "flatpak-zsh-completion" "flatpak-builder" "flatpak-builder-doc" "flatpak-xdg-utils" "gnome-software-plugin-flatpak" + # "fractal" + # "fzf" "fzf-zsh-plugin" + # "git" "git-zsh-completion" "github-cli" "github-cli-zsh-completion" + # "gnome-maps" + # "gnome-weather" + # "gpg-tui" "gpg-tui-zsh-completion" + # "gst-plugins-good-gtk" + # "handlr" "handlr-zsh-completion" + # "helm" "helm-zsh-completion" + # "kubectl" "kubectl-zsh-completion" "k9s" "k9s-zsh-completion" + # "ldpath" + # "lsd" + # "make-dynpart-mappings" + # "mobile-config-firefox" + # "msm-firmware-loader" + # "msm-fb-refresher" + # "navi" "navi-zsh-completion" + # "neovim" "neovim-doc" "fzf-neovim" "py3-pynvim" + # "nix" "nix-bash-completion" "nix-doc" "nix-manual" "nix-openrc" "nix-zsh-completion" "tree-sitter-nix" "tree-sitter-nix-doc" + # "osk-sdl" "osk-sdl-doc" + # "osmin" + # "pass" "pass-zsh-completion" + # "pd-mapper" + # "pmbootstrap" + # "postmarketos-artwork-wallpapers-extra" + # "postmarketos-installkernel" "postmarketos-update-kernel" "postmarketos-release-upgrade" + # #"postmarketos-ondev" "postmarketos-ondev-openrc" + # "procs" "procs-zsh-completion" + # "progress" "progress-zsh-completion" + # "qcom-diag" + # "rage" "rage-zsh-completion" + # "rbw" "rbw-zsh-completion" + # "reboot-mode" + # "ripgrep" "ripgrep-zsh-completion" + # "rsync" "rsync-zsh-completion" + # "seahorse" + # "starship" "starship-zsh-completion" "starship-zsh-plugin" + # "systemd-boot" + # "tealdeer" "tealdeer-zsh-completion" + # "tmux" "tmux-zsh-completion" + # "topgrade" "topgrade-zsh-completion" + # "udisks2" "udisks2-zsh-completion" + # "udiskie" "udiskie-zsh-completion" + # "ukify" + # "unixbench" + # "unl0kr" + # "unl0kr-doc" + # "util-linux-misc" + # "vim" + # "waydroid" "waydroid-nftables" "iptables" "iptables-legacy" + # "wireguard-tools-wg-quick" + # "wl-clipboard" "wl-clipboard-zsh-completion" + # "xdg-desktop-portal-gnome" "xdg-ninja" "xdg-user-dirs" "xdg-user-dirs-gtk" "xdg-utils" "xdg-utils-doc" + # "yt-dlp" "yt-dlp-zsh-completion" + # "zsh" "zsh-autosuggestions" "zsh-calendar" "zsh-completions" "zsh-doc" "zsh-fast-syntax-highlighting" "zsh-fzf-tab" "zsh-hitdb" "zsh-history-substring-search" "zsh-manydots-magic" "zsh-pcre" "zsh-shift-select" "zsh-theme-powerlevel10k" "zsh-vcs" "zsh-zftp" #"zsh-histdb-skim" + # ]; + # system-cfg = '' + # aports = /home/${user}/.local/var/pmbootstrap/cache_git/pmaports + # nonfree_firmware = ${config.hardware.enableRedistributableFirmware} + # nonfree_userland = ${config.nixpkgs.config.allow-unfree} + # user = ${user} + # work = /home/${user}/.local/var/pmbootstrap + # ''; + # device-fajita0 = '' + # device = oneplus-fajita + # extra_space = 102400 + # hostname = fajita0 + # ui = gnome-mobile + # ui_extras = True + # kernel = stable + # nonfree_firmware = True + # nonfree_userland = True + # ''; + # in + # '' + # [pmbootstrap] + # ${device-fajita0} + # aports = /home/${user}/.local/var/pmbootstrap/cache_git/pmaports + # boot_size = 256 + # build_pkgs_on_install = True + # ccache_size = 50 + # #extra_packages = dino,epiphany,flatpak,fractal,gnome-maps,gnome-weather,gnome-software-plugin-flatpak,gst-plugins-good-gtk,osmin,,seahorse,vim,waydroid,wireguard-tools-wg-quick + # extra_packages = dino,epiphany,flatpak,fractal,gnome-maps,gnome-weather,gst-plugins-good-gtk,osmin,seahorse,vim,waydroid,wireguard-tools-wg-quick,bat,bat-zsh-completion,dnsmasq,eza,fd,fd-zsh-completion,flatpak-zsh-completion,flatpak-builder,flatpak-builder-doc,flatpak-xdg-utils,gnome-software-plugin-flatpak,fzf,fzf-zsh-plugin,git,git-zsh-completion,github-cli,github-cli-zsh-completion,gpg-tui,gpg-tui-zsh-completion,handlr,handlr-zsh-completion,helm,helm-zsh-completion,kubectl,kubectl-zsh-completion,k9s,k9s-zsh-completion,lsd,navi,neovim,neovim-doc,fzf-neovim,py3-pynvim,nix,nix-bash-completion,nix-doc,nix-manual,nix-openrc,nix-zsh-completion,tree-sitter-nix,tree-sitter-nix-doc,pass,pass-zsh-completion,procs,procs-zsh-completion,progress,progress-zsh-completion,rage,rage-zsh-completion,rbw,rbw-zsh-completion,reboot-mode,ripgrep,ripgrep-zsh-completion,rsync,rsync-zsh-completion,starship,starship-zsh-completion,starship-zsh-plugin,tealdeer,tealdeer-zsh-completion,tmux,tmux-zsh-completion,topgrade,topgrade-zsh-completion,udisks2,udisks2-zsh-completion,udiskie,udiskie-zsh-completion,unixbench,unl0kr,unl0kr-doc,util-linux-misc,waydroid-nftables,wl-clipboard,wl-clipboard-zsh-completion,xdg-desktop-portal-gnome,xdg-ninja,xdg-user-dirs,xdg-user-dirs-gtk,xdg-utils,xdg-utils-doc,yt-dlp,yt-dlp-zsh-completion,zsh,zsh-autosuggestions,zsh-completions,zsh-doc,zsh-fast-syntax-highlighting,zsh-fzf-tab,zsh-histdb,zsh-history-substring-search,zsh-manydots-magic,zsh-pcre,zsh-shift-select,zsh-vcs + # extra_packages = dino,epiphany,flatpak,fractal,gnome-maps,gnome-weather,gst-plugins-good-gtk,osmin,seahorse,waydroid,wireguard-tools-wg-quick,bat,dnsmasq,eza,fd,flatpak-zsh-completion,flatpak-builder,flatpak-xdg-utils,gnome-software-plugin-flatpak,fzf,git,git-zsh-completion,github-cli,github-cli-zsh-completion,helm,helm-zsh-completion,kubectl,kubectl-zsh-completion,k9s,k9s-zsh-completion,lsd,neovim,nix,nix-openrc,nix-zsh-completion,tree-sitter-nix,tree-sitter-nix-doc,ripgrep,ripgrep-zsh-completion,starship,starship-zsh-completion,starship-zsh-plugin,tealdeer,tealdeer-zsh-completion,topgrade,topgrade-zsh-completion,unl0kr,waydroid-nftables,wl-clipboard,wl-clipboard-zsh-completion,xdg-desktop-portal-gnome,xdg-user-dirs,xdg-utils,zsh,zsh-autosuggestions,zsh-completions,zsh-fast-syntax-highlighting,zsh-fzf-tab,zsh-histdb,zsh-history-substring-search,zsh-manydots-magic,zsh-pcre + # is_default_channel = False + # jobs = 17 + # keymap = + # locale = C.UTF-8 + # mirror_alpine = http://dl-cdn.alpinelinux.org/alpine/ + # mirros_postmarketos = http://mirror.postmarketos.org/postmarketos/ + # qemu_redir_stdio = False + # ssh_keys = True + # ssh_keys_glob = ~/.ssh/id_*.pub + # sudo_timer = False + # timezone = EST + # user = ${user} + # work = /home/${user}/.local/var/pmbootstrap + # + # [providers] + # + # ''; + # "pmaports.cfg".text = '' + # # Reference: https://postmarketos.org/pmaports.cfg + # [pmaports] + # channel = edge + # install_user_groups = audio,flatpak,netdev,plugdev,video,wheel + # pmbootstrap_min_version = 2.0.0 + # supported_firewall = nftables + # supported_root_filesystem = f2fs + # #supported_root_filesystem = ext4 + # ''; + #}; + + #home.file.".local/bin/fajita0-setup.sh".text = '' + # #!/usr/bin/env ash + # sudo apk add waydroid waydroid-nftables iptables-legacy + # sudo rc-update add cgroups default + # sudo rc-service cgroups start + # sudo apk add iptables dnsmasq + # sudo rc-service waydroid-container start + # sudo rc-update add waydroid-container default + # waydroid session start + # waydroid status + # waydroid app list + # + # sudo apk add flatpak + # sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + # flatpak install flathub \ + # org.nanuc.Axolotl \ + # org.gnome.Nautilus \ + # org.gnome.NautilusPreviewer \ + #''; + + + # TODO: Create pmbootstrap GitHub personal access token. + # TODO: Configure pmbootstrap to use GitHub personal access token. + #sops.secrets.github-token-pmbootstrap = {}; + + +} diff --git a/hm/profiles/devices/pinetime.nix b/hm/profiles/devices/pinetime.nix new file mode 100644 index 00000000..c5789285 --- /dev/null +++ b/hm/profiles/devices/pinetime.nix @@ -0,0 +1,13 @@ +{ self, inputs +, config, lib, pkgs +, ... +}: +{ + imports = [ + ]; + + home.packages = [ + pkgs.watchmate # Companion app for InfiniTime + ]; + +} diff --git a/hm/profiles/devices/sawfish.nix b/hm/profiles/devices/sawfish.nix new file mode 100644 index 00000000..6dd0a2e0 --- /dev/null +++ b/hm/profiles/devices/sawfish.nix @@ -0,0 +1,60 @@ +{ self +, inputs +, config +, lib +, pkgs +, ... +}: +{ + # --- Huawei Watch 2 (sawfish) --- + # https://asteroidos.org/watches/sawfish + # + # echo "1. Navigate to: Settings -> System -> About -> Build number" + # echo "2. Tap 'Build number' 7 times" + # echo "3. Navigate to: Settings -> Developer options -> ADB debugging" + # echo "4. Enable ADB debugging" + # + # read -p "Press any [ENTER] to continue" varname + # + # adb reboot bootloader + # fastboot oem unlock + # + # echo "5. Hold button to select 'yes'" + # + # read -p "Press any [ENTER] to continue" varname + # + # fastboot flash userdata ~/Downloads/asteroid-image-sawfish.ext4 + # fastboot flash boot ~/Downloads/zImage-dtb-sawfish.fastboot + # fastboot continue + # + + imports = [ + #./os/android-wear.nix + #./os/asteriodos.nix + ]; + + home.packages = [ + pkgs.android-tools # Android SDK platform tools (ADB / fastboot) + #pkgs.python311Packages.mpd2 # Python MPD lib + #pkgs.python311Packages.pydbus # Python D-Bus lib | dbus-python dbus-fast + #pkgs.python311Packages.pyowm # Python wrapper around OpenWeatherMap web API + #pkgs.python310Packages.mpd2 # Python MPD lib + #pkgs.python310Packages.pydbus # Python D-Bus lib | dbus-python dbus-fast + #pkgs.python310Packages.pyowm # Python wrapper around OpenWeatherMap web API + pkgs.yarn + #pkgs.dhcp # Provides dhclient? # Removed: end-of-life (2023-08-08) + pkgs.dialog + pkgs.connmanFull + pkgs.connman-gtk + ]; + + # TODO: Build fastboot image: [asteriod-image-sawfish.ext4](https://release.asteroidos.org/nightlies/sawfish/asteroid-image-sawfish.ext4) + # TODO: Build fastboot image: [zImage-dtb-sawfish.fastboot](https://release.asteroidos.org/nightlies/sawfish/zImage-dtb-sawfish.fastboot) + # TODO: Create package/app: [AsteriodOS WebInstaller](https://github.com/AsteroidOS/asteroid-webinstall) + # - Deps: yarn, + # TODO: Create package/app: [atx/AsteroidOSLinux](https://github.com/atx/AsteroidOSLinux) + # - Deps: pydbus, python-mpd2, pyown + # TODO: Create package: [AsteriodOS/asteroid-ctrl](https://github.com/AsteroidOS/asteroid-ctrl) + # TODO: Install unofficial-watchfaces + # - Deps: dialog or whiptail +} diff --git a/hm/profiles/docs/default.nix b/hm/profiles/docs/default.nix new file mode 100644 index 00000000..29e88f49 --- /dev/null +++ b/hm/profiles/docs/default.nix @@ -0,0 +1,36 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +# --- Documentation -------- +{ + imports = [ + #./manpages.nix + #./tldr.nix + #./news.nix + ]; + + #home.extraOutputsToInstall = [ "doc" "info" "devdoc" ]; + + manual = { + html.enable = true; + json.enable = true; + manpages.enable = true; + }; + + news.display = "show"; # silent | notify | show + + # See: https://dbrgn.github.io/tealdeer/config.html + programs.tealdeer = { + enable = true; + settings = { + display.compact = true; + display.use_pager = false; + updates.auto_update = true; + #style.example_variable.foreground = "cyan"; + }; + }; + +} diff --git a/hm/profiles/editor/code.nix b/hm/profiles/editor/code.nix new file mode 100644 index 00000000..566c7725 --- /dev/null +++ b/hm/profiles/editor/code.nix @@ -0,0 +1,15 @@ +{ self, inputs, config, lib, pkgs, + host, user, repo, network, machine, + ... +}: + +# https://nixos.wiki/wiki/Visual_Studio_Code +# TODO: Use VSCodium +# TODO: Add extensions +# TODO: Add FOSS extension marketplace + +{ + imports = []; + + +} diff --git a/hm/profiles/editor/default.nix b/hm/profiles/editor/default.nix new file mode 100644 index 00000000..06f1eb56 --- /dev/null +++ b/hm/profiles/editor/default.nix @@ -0,0 +1,22 @@ +{ self, inputs +, config, lib, pkgs +, editor ? "nixvim" +, ... }: { + imports = [ + #inputs.home-extra-xhmm.homeManagerModules.console.nano + ./editorconfig.nix + ./helix + ./neovim + #./nixvim + ]; + + # --- Default Editor --- + #programs.helix.defaultEditor = editor == "helix"; + #programs.kakoune.defaultEditor = editor == "kakoune"; + #programs.neovim.defaultEditor = editor == "neovim"; + #programs.nixvim.defaultEditor = editor == "nixvim"; + #programs.nixvim.defaultEditor = true; + #programs.vim.defaultEditor = editor == "vim"; + #services.emacs.defaultEditor = editor == "emacs"; + +} diff --git a/hm/profiles/editor/editorconfig.nix b/hm/profiles/editor/editorconfig.nix new file mode 100644 index 00000000..82e84421 --- /dev/null +++ b/hm/profiles/editor/editorconfig.nix @@ -0,0 +1,23 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ ]; + + # TODO: Add editorconfig plugin to editors + editorconfig.enable = true; + editorconfig.settings = { + "*" = { + charset = "utf-8"; # TODO: Handle Windows/MacOS/Android + end_of_line = "lf"; + trim_trailing_whitespace = true; + insert_final_newline = true; + max_line_width = 120; + indent_style = "space"; + indent_size = 2; + }; + }; +} diff --git a/hm/profiles/editor/helix/default.nix b/hm/profiles/editor/helix/default.nix new file mode 100644 index 00000000..56b10c28 --- /dev/null +++ b/hm/profiles/editor/helix/default.nix @@ -0,0 +1,53 @@ +{ self, inputs +, config, lib, pkgs +, ... +}: +{ + imports = [ + ./keys.nix + ./languages.nix + ./themes.nix + ./statusline.nix + ]; + + programs.helix = { + enable = true; + + settings.theme = "a-shell"; # "adwaita-dark"; + + settings.editor = { + auto-completion = true; + auto-format = true; + auto-info = true; + bufferline = "multiple"; + color-modes = true; + cursorline = true; + + cursor-shape = { + insert = "bar"; + normal = "block"; + select = "underline"; + }; + + file-picker.hidden = false; + indent-guides.render = true; + line-number = "relative"; + + lsp = { + enable = true; + auto-signature-help = true; + display-inlay-hints = true; + display-signature-help-docs = true; + display-messages = true; + goto-reference-include-declaration = true; + snippets = true; + }; + + scrolloff = 2; + + }; + + }; + + +} diff --git a/hm/profiles/editor/helix/keys.nix b/hm/profiles/editor/helix/keys.nix new file mode 100644 index 00000000..d4e67208 --- /dev/null +++ b/hm/profiles/editor/helix/keys.nix @@ -0,0 +1,421 @@ +{ self, inputs +, config, lib, pkgs +, keybinds ? "custom" +, ... +}: +let + helix.normal = { + # --- Movement --- + j = "move_visual_line_down"; + k = "move_visual_line_up"; + l = "move_char_right"; + + left = "move_char_left"; + down = "move_visual_line_down"; + up = "move_visual_line_up"; + right = "move_char_right"; + + b = "move_prev_word_start"; + B = "move_prev_long_word_start"; + + e = "move_next_word_end"; + E = "move_next_long_word_end"; + + f = "find_next_char"; + F = "find_prev_char"; + + t = "find_till_char"; + T = "till_prev_char"; + + G = "goto_line"; + + w = "move_next_word_start"; + W = "move_next_long_word_start"; + + home = "goto_line_start"; + end = "goto_line_end"; + pageup = "page_up"; + pagedown = "page_down"; + + C-b = "page_up"; + C-f = "page_down"; + + C-d = "half_page_down"; + C-i = "jump_forward"; + C-o = "jump_backward"; + C-s = "save_selection"; + C-u = "half_page_up"; + + # --- Actions --- + a = "append_mode"; + A = "insert_at_line_end"; + + c = "change_selection"; + d = "delete_selection"; + + D = null; + + i = "insert_mode"; + I = "insert_at_line_start"; + + o = "open_below"; + O = "open_above"; + + p = "paste_after"; + P = "paste_before"; + + q = "replay_macro"; + Q = "record_macro"; + + r = "replace"; + R = "replace_with_yanked"; + + u = "undo"; + U = "redo"; + + y = "yank"; + + esc = null; + + "1" = null; + "@" = null; + "0" = null; + + A-c = "change_selection_noyank"; + A-d = "delete_selection_noyank"; + A-u = "earlier"; + A-U = "later"; + + "A-." = "repeat_last_motion"; + "A-`" = "switch_to_uppercase"; + + "~" = "switch_case"; + "`" = "switch_to_lowercase"; + + ">" = "indent"; + "<" = "unindent"; + "=" = "format_selections"; + + C-a = "increment"; + C-x = "decrement"; + + #\" = "select_register"; + #. = null; # repeat_last_insert + + # --- Selection Manipulation --- + C = "copy_selection_on_next_line"; + A-C = "copy_selection_on_prev_line"; + C-c = "toggle_comments"; + + A-i = "shrink_selection"; + A-down = "shrink_selection"; + + J = "join_selections"; + A-J = "join_selections_space"; + + K = "keep_selections"; + A-K = "remove_selections"; + + A-n = "select_next_sibling"; + A-right = "select_next_sibling"; + + A-o = "expand_selection"; + A-up = "expand_selection"; + + A-p = "select_next_sibling"; + A-left = "select_next_sibling"; + + s = "select_regex"; + S = "split_selections"; + A-s = "split_selection_on_newline"; + + x = "extend_line_below"; + X = "extend_to_line_bounds"; + A-X = "shrink_to_line_bounds"; + + "&" = "align_selections"; + "%" = "select_all"; + + "(" = "rotate_selections_backward"; + ")" = "rotate_selections_forward"; + "A-(" = "rotate_selection_contents_backward"; + "A-)" = "rotate_selection_contents_forward"; + + "_" = "trim_selections"; + "A-_" = "merge_consecutive_selections"; + + "A-:" = "ensure_selections_forward"; + + ";" = "collapse_selection"; + "A-;" = "flip_selections"; + + "," = "keep_primary_selection"; + "A-," = "remove_primary_selection"; + + # --- Search --- + "/" = "search"; + "?" = "rsearch"; + "n" = "search_next"; + "N" = "search_prev"; + "*" = "search_selection"; + + # --- Minor Modes --- + v = "select_mode"; + + #g = goto mode + g = { + a = "goto_last_accessed_file"; + b = "goto_window_bottom"; + c = "goto_window_center"; + d = "goto_definition"; + e = "goto_last_line"; + f = "goto_file"; + g = "goto_file_start"; + h = "goto_line_start"; + i = "goto_implementation"; + j = "move_line_down"; + k = "move_line_up"; + l = "goto_line_end"; + m = "goto_last_modified_file"; + n = "goto_next_buffer"; + o = null; + p = "goto_previous_buffer"; + q = null; + r = "goto_reference"; + s = "goto_first_nonwhitespace"; + t = "goto_window_top"; + u = null; + v = null; + w = null; + x = null; + y = "goto_type_definition"; + z = null; + "." = "goto_last_modification"; + }; + + #m = match mode + m = { + m = "match_brackets"; + #s = "surround_add"; + #r = "surround_replace"; + #d = "surround_delete"; + #a. = "select_textobject_around"; + #i. = "select_textobject_inner"; + }; + + ":" = "command_mode"; + + #z = view mode + z = { + b = "align_view_bottom"; + c = "align_view_center"; + j = "scroll_down"; down = "scroll_down"; + k = "scroll_up"; up = "scroll_up"; + C-f = "page_down"; pagedown = "page_down"; + C-b = "page_up"; pageup = "page_up"; + m = "align_view_middle"; + t = "align_view_top"; + z = "align_view_center"; + }; + + #Z = sticky view mode + Z = { + b = "align_view_bottom"; + c = "align_view_center"; + j = "scroll_down"; down = "scroll_down"; + k = "scroll_up"; up = "scroll_up"; + C-f = "page_down"; pagedown = "page_down"; + C-b = "page_up"; pageup = "page_up"; + m = "align_view_middle"; + t = "align_view_top"; + z = "align_view_center"; + }; + #C-w = window mode + C-w = { + f = "goto_file"; + F = "goto_file"; + H = "swap_view_left"; + J = "swap_view_down"; + K = "swap_view_up"; + L = "swap_view_right"; + h = "jump_view_left"; C-h = "jump_view_left"; left = "jump_view_left"; + j = "jump_view_down"; C-j = "jump_view_down"; down = "jump_view_down"; + k = "jump_view_up"; C-k = "jump_view_up"; up = "jump_view_up"; + l = "jump_view_right"; C-l = "jump_view_right"; right = "jump_view_right"; + o = "wonly"; C-o = "wonly"; + q = "wclose"; C-q = "wclose"; + s = "hsplit"; C-s = "hsplit"; + v = "vsplit"; C-v = "vsplit"; + w = "rotate_view"; C-w = "rotate_view"; + }; + + #space = space mode + space = { + a = "code_action"; + b = "buffer_picker"; + d = "diagnostics_picker"; + D = "workspace_diagnostics_picker"; + f = "file_picker"; + F = "file_picker_in_current_directory"; + g = null; # Debug (experimental) + h = "select_references_to_symbol_under_cursor"; + j = "jumplist_picker"; + k = "hover"; + p = "paste_clipboard_after"; + P = "paste_clipboard_before"; + r = "rename_symbol"; + R = "replace_selections_with_clipboard"; + s = "symbol_picker"; + S = "workspace_symbol_picker"; + w = null; # Enter window mode + y = "yank_joined_to_clipboard"; + Y = "yank_main_selection_to_clipboard"; + "'" = "last_picker"; + "/" = "global_search"; + "?" = "command_palette"; + }; + + # Unimpaired + "]" = { + a = "goto_next_parameter"; + c = "goto_next_comment"; + d = "goto_next_diag"; + D = "goto_last_diag"; + f = "goto_next_function"; + g = "goto_next_change"; + G = "goto_last_change"; + p = "goto_next_paragraph"; + t = "goto_next_class"; + T = "goto_next_test"; + space = "add_newline_below"; + }; + "[" = { + a = "goto_prev_parameter"; + c = "goto_prev_comment"; + d = "goto_prev_diag"; + D = "goto_first_diag"; + f = "goto_prev_function"; + g = "goto_prev_change"; + G = "goto_first_change"; + p = "goto_prev_paragraph"; + t = "goto_prev_class"; + T = "goto_prev_test"; + space = "add_newline_above"; + }; + + }; + + vim.normal = { + h = "move_char_left"; + j = "move_visual_line_down"; + k = "move_visual_line_up"; + l = "move_char_right"; + left = "move_char_left"; + down = "move_visual_line_down"; + up = "move_visual_line_up"; + right = "move_char_right"; + + "0" = "goto_line_start"; + "$" = "goto_line_end"; + "@" = "replay_macro"; + q = "record_macro"; + x = "delete_char_forward"; + X = "delete_char_backward"; + ";" = "repeat_last_motion"; + C-r = "redo"; + }; +in +{ + imports = [ + #./custom.nix + #./helix.nix + #./vim.nix + ]; + + programs.helix.settings.keys = { + + insert = { + j.k = "normal_mode"; # jk to exit insert mode + }; + + normal = { + #D = "delete_char_backward"; + X = "extend_line_above"; + esc = "collapse_selection"; + ret = [ "move_line_down" "goto_first_nonwhitespace" ]; + + "1" = "goto_line_start"; + "0" = "goto_line_end"; + + "C-/" = "toggle_comments"; + + # Vim training wheels + C = ["select_mode" "goto_line_end" "change_selection"]; + D = ["select_mode" "goto_line_end" "delete_selection"]; + Y = ["select_mode" "goto_line_end" "yank"]; + "@" = "replay_macro"; + g = { + "0" = "goto_line_end"; + "1" = "goto_line_start"; + "2" = "goto_first_nonwhitespace"; + "^" = "goto_first_nonwhitespace"; + "$" = "goto_line_end"; + G = "goto_last_line"; + }; + + # OS-like selection + backspace = "delete_char_backward"; + del = "delete_char_forward"; + C-backspace = ["select_mode" "move_prev_word_start" "delete_selection"]; + C-del = ["select_mode" "move_next_word_start" "delete_selection"]; + C-left = "move_prev_word_start"; + C-right = "move_next_word_end"; + + C-S-down = "extend_line_below"; + C-S-up = "extend_line_above"; + + C-a = "select_all"; + C-c = "yank_main_selection_to_clipboard"; + C-v = "replace_selections_with_clipboard"; + C-up = "increment"; + C-down = "decrement"; + + + }; + + }; + + +} + +# --- Key Names --- +# CTRL: C- +# SHIFT: S- +# ALT: A- +# Enter: ret +# backspace +# space +# minus +# left +# right +# up +# down +# home +# end +# pageup +# pagedown +# tab +# del +# ins +# null +# esc + +# --- Minor Modes --- +# v = select_mode +# g = goto mode +# m = match mode +# : = command_mode +# z = view mode +# Z = sticky view mode +# C-w = window mode +# space = space mode diff --git a/hm/profiles/editor/helix/languages.nix b/hm/profiles/editor/helix/languages.nix new file mode 100644 index 00000000..5777fbd9 --- /dev/null +++ b/hm/profiles/editor/helix/languages.nix @@ -0,0 +1,15 @@ +{ self, inputs +, config, lib, pkgs +, ... +}: +{ + programs.helix.languages = { + language-server = { + nil.command = "${pkgs.nil}/bin/nil"; + }; + language = [ + { name = "nix"; auto-format = false; } + { name = "rust"; auto-format = true; } + ]; + }; +} \ No newline at end of file diff --git a/hm/profiles/editor/helix/statusline.nix b/hm/profiles/editor/helix/statusline.nix new file mode 100644 index 00000000..0403f0ae --- /dev/null +++ b/hm/profiles/editor/helix/statusline.nix @@ -0,0 +1,41 @@ +{ self, inputs +, config, lib, pkgs +, ... +}: +{ + + programs.helix.settings.editor.statusline = { + + left = [ + "mode" + #"separator" + "file-name" + "file-modification-indicator" + "spacer" + "separator" + "spacer" + "version-control" + ]; + + center = [ + ]; + + right = [ + "spinner" + "diagnostics" + "separator" + "selections" + "position" + "file-encoding" + "total-line-numbers" + ]; + + mode = { + normal = "NORMAL"; + insert = "INSERT"; + select = "SELECT"; + }; + + }; + +} diff --git a/hm/profiles/editor/helix/themes.nix b/hm/profiles/editor/helix/themes.nix new file mode 100644 index 00000000..673c217e --- /dev/null +++ b/hm/profiles/editor/helix/themes.nix @@ -0,0 +1,78 @@ +{ self, inputs +, config, lib, pkgs +, ... +}: +let + + # TODO: Create themes that match light/dark themes of BlackBox terminal + themes.blackbox.light = [ + "Dracula Light" + "Pencil Light" + "Solarized Light" + "Tomorrow" + ]; + themes.blackbox.dark = [ + "base16-twilight-dark" + "Dracula" + "Japanesque" + "Material" + "Monokai Dark" + "One Dark" + "Orchis" + "Pencil Dark" + "Solarized Dark" + "Tomorrow Night" + "Yaru" + ]; + + themes.helix.light = [ + ]; + themes.helix.dark = [ + ]; + themes.helix.system = [ + "base16_terminal" + "base16_transparent" + ]; + + transparent = "none"; +in +{ + + imports = [ + #./themes + ]; + + programs.helix.themes = { + + a-shell = { + inherits = "base16_terminal"; + + ui = { + gutter = { fg = "gray"; }; + linenr = { + fg = "gray"; + selected = { fg = "blue"; modifiers = ["bold"]; }; + }; + statusline = { + fg = "gray"; + normal = { fg = "black"; bg = "green"; modifiers = ["bold"]; }; + insert = { fg = "black"; bg = "blue"; modifiers = ["bold"]; }; + select = { fg = "black"; bg = "orange"; modifiers = ["bold"]; }; + }; + virtual.indent-guide = { fg = "gray"; modifiers = ["dim"]; }; + + }; + #"ui.background" = transparent; + #"ui.gutter" = { bg = transparent; fg = "light-gray"; }; + #"ui.statusline.inactive" = { bg = transparent; fg = "light-gray"; }; + #"ui.statusline.normal" = { bg = }; + }; + + }; + +} + +# Modifiers: bold, dim, italic, underlined, slow_blink, +# rapid_blink, reversed, hidden, crossed_out +# Underline Style: line, curl, dashed, dotted, double_line +# diff --git a/hm/profiles/editor/neovim/colorschemes/base16.nix b/hm/profiles/editor/neovim/colorschemes/base16.nix new file mode 100644 index 00000000..49b9189f --- /dev/null +++ b/hm/profiles/editor/neovim/colorschemes/base16.nix @@ -0,0 +1,12 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + programs.nixvim.colorschemes.base16 = { + #enable = lib.mkDefault false; + colorscheme = "material"; + }; +} diff --git a/hm/profiles/editor/neovim/colorschemes/catppuccin.nix b/hm/profiles/editor/neovim/colorschemes/catppuccin.nix new file mode 100644 index 00000000..1a8a2052 --- /dev/null +++ b/hm/profiles/editor/neovim/colorschemes/catppuccin.nix @@ -0,0 +1,139 @@ +{ + self, + inputs, + config, + lib, + pkgs, + ... +}: { + programs.nixvim.colorschemes.catppuccin = { + #enable = lib.mkDefault false; + settings = { + show_end_of_buffer = false; # Show `~` after end of buffers + term_colors = true; + transparent_background = true; + + dim_inactive = { + enabled = true; # Dim BG when window/buf/split is inactive + percentage = 0.15; + #shade = dark; + }; + + # --- Styling, Highlights, & Overrides --- + color_overrides = { + all = {}; + frappe = {}; + latte = {}; + macchiato = {}; + mocha = {}; + }; + + #customHighlights = '' + # function(colors) + # return { + # Comment = { fg = colors.flamingo }, + # [“@constant.builtin”] = { fg = colors.peach, style = { } }, + # [“@comment”] = { fg = colors.surface2, style = { “italic” } }, + # } + # end + #''; + + # TODO: Make some symbol classes bold & others italic + styles = { + booleans = []; + comments = ["italic"]; + conditionals = ["italic"]; + functions = []; + keywords = ["bold"]; + loops = []; + numbers = []; + operators = ["bold"]; + properties = []; + strings = []; + types = []; + variables = []; + }; + + # TODO: All integrations + integrations = with config.programs.nixvim.plugins; { + aerial = true; + barbar = true; # barbar.enable; + beacon = true; + cmp = true; # nvim-cmp.enable; + coc_nvim = true; + dap.enabled = true; # dap.enable; + dap.enable_ui = true; # dap.extensions.dap-ui.enable; + dashboard = true; # dashboard.enable; + fern = true; + fidget = true; + gitgutter = true; # gitgutter.enable; + gitsigns = true; # gitsigns.enable; + harpoon = true; + headlines = true; + hop = true; + #illuminate = true; + leap = true; + lightspeed = true; + lsp_saga = true; # lspsaga.enable; + lsp_trouble = true; # trouble.enable; + markdown = true; + mason = true; + #mini = true; + navic.enabled = true; + navic.custom_bg = "NONE"; + neogit = true; # neogit.enable; + neotest = true; + neotree = true; + noice = true; # noice.enable; + notify = true; + nvimtree = true; + octo = true; + overseer = true; + pounce = true; + rainbow_delimiters = true; # rainbow-delimiters.enable; + sandwich = true; + semantic_tokens = true; + symbols_outline = true; + telekasten = true; + treesitter = true; # treesitter.enable; + treesitter_context = true; # treesitter-context.enable; + ts_rainbow = true; + ts_rainbow2 = true; + vim_sneak = true; + vimwiki = true; + which_key = true; # which-key.enable; + + barbecue = { + # VSCode-like window symbol hierarchy/scope/nesting line + alt_background = false; + bold_basename = true; + dim_context = false; + dim_dirname = true; + }; + indent_blankline = { + enabled = true; + colored_indent_levels = true; # D:false + }; + native_lsp = { + enabled = true; + underlines = { + errors = ["underline"]; + hints = ["underline"]; + information = ["underline"]; + warnings = ["underline"]; + }; + virtual_text = { + errors = ["italic"]; + hints = ["italic"]; + information = ["italic"]; + warnings = ["italic"]; + }; + }; + #telescope = { + # enabled = true; #telescope.enable; + # #style = ""; + #}; + }; + }; + }; +} diff --git a/hm/profiles/editor/neovim/colorschemes/default.nix b/hm/profiles/editor/neovim/colorschemes/default.nix new file mode 100644 index 00000000..5753087f --- /dev/null +++ b/hm/profiles/editor/neovim/colorschemes/default.nix @@ -0,0 +1,17 @@ +{ inputs +, lib +, ... +}: +let + colorscheme = "catppuccin"; +in +{ + imports = [ + ./base16.nix + ./catppuccin.nix + ./gruvbox.nix + #./nord.nix # Seems to have been removed? + ./tokyonight.nix + ]; + programs.nixvim.colorschemes.${colorscheme}.enable = true; +} diff --git a/hm/profiles/editor/neovim/colorschemes/gruvbox.nix b/hm/profiles/editor/neovim/colorschemes/gruvbox.nix new file mode 100644 index 00000000..9a3a11de --- /dev/null +++ b/hm/profiles/editor/neovim/colorschemes/gruvbox.nix @@ -0,0 +1,27 @@ +{ + inputs, + config, + lib, + pkgs, + ... +}: { + programs.nixvim.colorschemes.gruvbox = { + #enable = lib.mkDefault false; + settings = { + bold = true; + colorColumn = "bg"; + contrastDark = "medium"; + contrastLight = "medium"; + improvedStrings = true; + improvedWarnings = true; + italicizeComments = false; + italicizeStrings = false; + italics = true; + numberColumn = "bg"; + signColumn = "bg"; + undercurl = false; + underline = false; + transparentBg = true; + }; + }; +} diff --git a/hm/profiles/editor/neovim/colorschemes/nord.nix b/hm/profiles/editor/neovim/colorschemes/nord.nix new file mode 100644 index 00000000..5a68291a --- /dev/null +++ b/hm/profiles/editor/neovim/colorschemes/nord.nix @@ -0,0 +1,17 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + programs.nixvim.colorschemes.nord = { + #enable = lib.mkDefault false; + enable_sidebar_background = lib.mkDefault true; + borders = lib.mkDefault true; + contrast = lib.mkDefault false; + cursorline_transparent = lib.mkDefault true; + disable_background = lib.mkDefault true; + italic = lib.mkDefault true; + }; +} diff --git a/hm/profiles/editor/neovim/colorschemes/tokyonight.nix b/hm/profiles/editor/neovim/colorschemes/tokyonight.nix new file mode 100644 index 00000000..ab2c8d90 --- /dev/null +++ b/hm/profiles/editor/neovim/colorschemes/tokyonight.nix @@ -0,0 +1,25 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + programs.nixvim.colorschemes.tokyonight = { + #enable = lib.mkDefault false; + #dayBrightness = 1; + dimInactive = lib.mkDefault true; + hideInactiveStatusline = lib.mkDefault true; + lualineBold = lib.mkDefault true; + #onColors = "function(colors) end"; + #onHighlights = "function(highlights, colors) end"; + sidebars = [ "qf" "help" ]; + #style = "storm"; + styles = { + comments.italic = lib.mkDefault true; + floats = lib.mkDefault "transparent"; + }; + terminalColors = lib.mkDefault true; + transparent = lib.mkDefault true; + }; +} diff --git a/hm/profiles/editor/neovim/default.nix b/hm/profiles/editor/neovim/default.nix new file mode 100644 index 00000000..266e9bf1 --- /dev/null +++ b/hm/profiles/editor/neovim/default.nix @@ -0,0 +1,130 @@ +{ inputs +, config +, lib +, pkgs +, uiShape ? "rounded" +, ... +}: + +# --- NixVim --- +# Configures Neovim via Nix modules +# https://github.com/pta2002/nixvim +# https://pta2002.github.io/nixvim + +# TODO: Split into: +# - `nixvimConfigurations` +# - `nixvimProfiles` +# - `nixvimSuites` + +# TODO: Build final `nixvimConfigurations.` using: +# - `inputs.nixvim.legacyPackages.${system}.makeNivim` +# - `inputs.nixvim.legacyPackages.${system}.makeNixvimWithModule` + +# TODO: Configure new plugins: +# - auto-session +# - indent-blankline +# - mini +# - toggleterm +# - ts-autotag +# - typst-vim +# - undotree +# - which-key + +# TODO: plugins.nvim-lsp - Configure new language servers: +# - ccls +# - java +# - kotlin +# - nixd + +# TODO: Global style setting: +# - borderStyle +# - colorscheme + +# TODO: Fix issues +# - package rename: nodePackages.vscode-langservers-extracted -> vscode-langservers-extracted +# - telescope-frecency: Stop asking to remove database entries +# - nvim-notify: Missing background color for popup UI +# - Diagnostic inline multiline as concealed / virtual text or popup menu instead of moving contents + +# TODO: lib.exportNeovimKeybinds +# TODO: lib.exportNixvimKeybinds +# TODO: lib.exportVimKeybinds +{ + imports = [ + #inputs.nixvim.homeManagerModules.nixvim + ../editorconfig.nix + ../nixvim/keymaps.nix + ./colorschemes + ./langs + ./plugins + ./styles + ]; + + # --- Nixvim --------------------------------------------- + programs.nixvim = { + enable = true; + enableMan = false; # Enable manpages for nixvim options + defaultEditor = true; + options = { + # --- Lines --- + number = true; + relativenumber = true; + # --- Indentation --- + shiftwidth = 2; + foldlevel = 10; + # --- Integration --- + title = true; + # --- Mouse --- + mousescroll = "ver:1,hor:2"; + mouse = "a"; # "nv"; + }; + + # TODO: Move options to colorschemes? + highlight = { + #IndentBlanklineIndent2.ctermfg = "bg"; + #IndentBlanklineIndent1 = { fg = "NONE"; ctermfg = "NONE"; }; + lualine_c_active.bg = "NONE"; + lualine_c_inactive.bg = "NONE"; + lualine_x_active.bg = "NONE"; + lualine_x_inactive.bg = "NONE"; + lualine_x_normal.bg = "NONE"; #lualine_x_normal.bg = "NONE"; + lualine_c_normal.bg = "NONE"; #lualine_c_normal.bg = "NONE"; + lualine_x_insert.bg = "NONE"; #lualine_x_insert.bg = "NONE"; + lualine_c_insert.bg = "NONE"; #lualine_c_insert.bg = "NONE"; + TabLineFill.bg = "NONE"; + TabLineFill.fg = "NONE"; + StatusLine.bg = "NONE"; + StatusLineNC.bg = "NONE"; + #StatusLine.fg = "NONE"; "black"; + StatusLineNC.fg = "NONE"; + }; + + # --- Aliases --- + viAlias = false; + vimAlias = true; + }; + + # --- Neovim --------------------------------------------- + #programs.neovim.withNodeJs = true; + #programs.neovim.withPython3 = true; + #programs.neovim.plugins = with pkgs.vimPlugins; [ + # { plugin = nvim-treesitter.withAllGrammars; } + #]; + + # --- Git / VCS ---------------------- + programs.git.extraConfig = { + diff.external = true; #extraConfig.diff_opts.internal = true; + core.editor = "nvim"; # TODO: Replace with pkgs.neovim ? + }; + + # TODO: Replace with `inputs.home-extra-xhmm.homeManagerModules.console.program-variables` + #home.sessionVariables = { + # EDITOR = "nvim"; + #}; + + home.packages = [ + pkgs.fd + #pkgs.mercurial # Fixes VCS healthcheck + ]; + +} diff --git a/hm/profiles/editor/neovim/langs/default.nix b/hm/profiles/editor/neovim/langs/default.nix new file mode 100644 index 00000000..ac62c51b --- /dev/null +++ b/hm/profiles/editor/neovim/langs/default.nix @@ -0,0 +1,22 @@ +{ inputs, pkgs, config, lib, ... }: +{ + imports = [ + #./bash.nix + #./c.nix + #./cpp.nix + #./javascript.nix + #./kotlin.nix + ./latex.nix + ./markdown.nix + ./nix.nix + ./perl.nix + ./python.nix + ./rust.nix + #./typescript.nix + #./zsh.nix + ]; + programs.nixvim.plugins = { + plantuml-syntax.enable = true; # PlantUML diagram syntax + zig.enable = true; # Zig language syntax + }; +} diff --git a/hm/profiles/editor/neovim/langs/go.nix b/hm/profiles/editor/neovim/langs/go.nix new file mode 100644 index 00000000..f0ade64f --- /dev/null +++ b/hm/profiles/editor/neovim/langs/go.nix @@ -0,0 +1,14 @@ +{ inputs +, config +, lib +, pkgs +, ... +}: +{ + imports = [ + ]; + + programs.nixvim.plugins = { + dap.extensions.dap-go.enable = true; + }; +} diff --git a/hm/profiles/editor/neovim/langs/latex.nix b/hm/profiles/editor/neovim/langs/latex.nix new file mode 100644 index 00000000..50300985 --- /dev/null +++ b/hm/profiles/editor/neovim/langs/latex.nix @@ -0,0 +1,16 @@ +{ inputs +, config, pkgs +, ... +}: +{ + # --- LaTeX -------------------------- + programs.nixvim.plugins = { + cmp-latex-symbols.enable = config.programs.nixvim.plugins.nvim-cmp.enable; + lsp.servers.texlab.enable = config.programs.nixvim.plugins.lsp.enable; + vimtex.enable = true; + }; + home.packages = [ + #pkgs.texlive.combined.scheme-medium # Broken 4/14/24 + ]; #-medium|-full +} + diff --git a/hm/profiles/editor/neovim/langs/markdown.nix b/hm/profiles/editor/neovim/langs/markdown.nix new file mode 100644 index 00000000..2dad5d70 --- /dev/null +++ b/hm/profiles/editor/neovim/langs/markdown.nix @@ -0,0 +1,7 @@ +{ inputs +, pkgs +, ... +}: +{ + programs.nixvim.plugins.markdown-preview.enable = true; +} diff --git a/hm/profiles/editor/neovim/langs/nix.nix b/hm/profiles/editor/neovim/langs/nix.nix new file mode 100644 index 00000000..3749fabe --- /dev/null +++ b/hm/profiles/editor/neovim/langs/nix.nix @@ -0,0 +1,43 @@ +{ inputs +, lib +, ... +}: { + programs.nixvim.plugins = { + nix.enable = true; + + lsp.servers = { + nixd = { + enable = lib.mkDefault false; + settings = { + #eval.depth = 0; # Extra depth for evaluation + #eval.workers = 3; # Number of workers for evaluation task + #eval.target.args = []; # Accept args as `nix eval` + #eval.target.installable = ""; # "nix eval" + formatting.command = "nixpkgs-fmt"; + options.enable = + true; # Enable option completion task. Disable if writing a package + #options.target.args = []; # Accept args as `nix eval` + #options.target.installable = ""; # "nix eval" + }; + }; + + nil_ls = { + enable = lib.mkDefault true; + #settings = { + # formatting.command = null; # External formatter command Options: null | List + #}; + }; + + rnix-lsp = { enable = lib.mkDefault false; }; + }; + + none-ls.sources = { + code_actions.statix.enable = lib.mkDefault true; + diagnostics.deadnix.enable = lib.mkDefault true; + diagnostics.statix.enable = lib.mkDefault true; + formatting.alejandra.enable = lib.mkDefault true; + formatting.nixfmt.enable = lib.mkDefault true; + formatting.nixpkgs_fmt.enable = lib.mkDefault true; + }; + }; +} diff --git a/hm/profiles/editor/neovim/langs/perl.nix b/hm/profiles/editor/neovim/langs/perl.nix new file mode 100644 index 00000000..13db4b6e --- /dev/null +++ b/hm/profiles/editor/neovim/langs/perl.nix @@ -0,0 +1,15 @@ +{ inputs +, pkgs +, ... +}: +{ + + # --- Perl --------------------------- + # Fixes Neovim Perl healthcheck + home.packages = [ + pkgs.nix-generate-from-cpan + pkgs.perl536Packages.CPAN + ]; + +} + diff --git a/hm/profiles/editor/neovim/langs/python.nix b/hm/profiles/editor/neovim/langs/python.nix new file mode 100644 index 00000000..5ff8d31b --- /dev/null +++ b/hm/profiles/editor/neovim/langs/python.nix @@ -0,0 +1,40 @@ +{ inputs +, pkgs +, ... +}: +{ + programs.nixvim.plugins = { + dap.extensions.dap-python = { + enable = true; + #package = pkgs.vimPlugins.nvim-dap-python; + #adapterPythonPath = "/nix/store/...-python3-3.10.12/bin/python3"; # Path to python interpretter. Path must be absolute or in $PATH & must have debugpy package installed. + console = "integratedTerminal"; # integratedTerminal | internalConsole | externalTerminal + includeConfigs = true; + #resolvePython = null; # Fn to resolve path to python to use for execution. By default use VIRTUAL_ENV | CONDA_PREFIX if present. + #testRunner = null; # Name of test runner to use by default. Default is dynamic & depends on pytest.ini or manage.py markers. If neither found, use 'unittest' + #testRunners = null; # Set to register test runners. Built-ins: unittest|pytest|django. Attr keys are test runner names, vals are funcs to generate the module name to run & its args. See: |dap-python.TestRunner| + }; + + lsp.servers.pylsp = { + enable = (pkgs.system == "x86_64-linux"); + settings.configurationSources = "flake8"; + settings.plugins = { + autopep8.enabled = true; + black.enabled = true; + black.preview = true; + flake8.enabled = true; + pycodestyle.enabled = true; + pydocstyle.enabled = true; + pyflakes.enabled = true; + pylint.enabled = true; + pylsp_mypy.enabled = true; + rope.enabled = true; + }; + }; + + none-ls.sources = { + code_actions.statix.enable = true; + formatting.black.enable = true; + }; + }; +} diff --git a/hm/profiles/editor/neovim/langs/rust.nix b/hm/profiles/editor/neovim/langs/rust.nix new file mode 100644 index 00000000..d5aa2730 --- /dev/null +++ b/hm/profiles/editor/neovim/langs/rust.nix @@ -0,0 +1,21 @@ +{ inputs +, pkgs +, ... +}: +{ + imports = [ + ]; + + programs.nixvim.plugins = { + cmp-clippy.enable = true; + crates-nvim.enable = true; + rust-tools.enable = true; + lsp.servers.rust-analyzer = { + enable = true; + installCargo = true; + installRustc = true; + #cargoPackage = pkgs.cargo; + #rustcPackage = pkgs.rustc; + }; + }; +} diff --git a/hm/profiles/editor/neovim/plugins/auto-session.nix b/hm/profiles/editor/neovim/plugins/auto-session.nix new file mode 100644 index 00000000..25172214 --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/auto-session.nix @@ -0,0 +1,29 @@ +{ inputs, config, lib, pkgs, ... }: +{ + programs.nixvim.plugins.auto-session = { + enable = true; + #package = pkgs.vimPlugin.auto-session; + #bypassSessionSaveFileTypes = []; + #extraOptions = {}; + #logLevel = "error"; + #cwdChangeHandling = true; + #autoSave = true; + autoRestore.enabled = true; + autoSession = { + enabled = true; + enableLastSession = true; + createEnabled = true; + useGitBranch = true; + #allowedDirs = []; + #rootDir = { __raw = "vim.fn.stdpath 'data' .. '/sessions/'"; }; + #suppressDirs = []; + }; + sessionLens = { + loadOnSetup = true; + previewer = true; + themeConf = { winblend = 10; border = true; }; + #sessionControl.controlDir = "vim.fn.stdpath 'data' .. '/auto_sessions/'"; + #sessionControl.controlFilename = "session_control.json"; + }; + }; +} diff --git a/hm/profiles/editor/neovim/plugins/barbar.nix b/hm/profiles/editor/neovim/plugins/barbar.nix new file mode 100644 index 00000000..a64be145 --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/barbar.nix @@ -0,0 +1,40 @@ +{ + inputs, + lib, + ... +}: { + programs.nixvim.plugins.barbar = { + enable = lib.mkDefault false; + animation = true; + autoHide = false; + clickable = true; + excludeFileNames = []; + excludeFileTypes = []; + extraOptions = {}; + hide = { + alternate = true; + current = false; + extensions = false; + }; + highlightAlternate = false; + highlightInactiveFileIcons = false; + highlightVisible = true; + # TODO: Conditionally use rounded / angled / square icons based on global conf + icons = { + current = { + pinned.separator = { + left = "▎"; + right = ""; + }; + separator = { + left = ""; + right = ""; + }; + }; + diagnostics = { + error.enable = true; + warn.enable = true; + }; + }; + }; +} diff --git a/hm/profiles/editor/neovim/plugins/barbecue.nix b/hm/profiles/editor/neovim/plugins/barbecue.nix new file mode 100644 index 00000000..db15db91 --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/barbecue.nix @@ -0,0 +1,63 @@ +{config, ...}: { + # VSCode-like window symbol hierarchy/scope/nesting line + programs.nixvim.plugins.barbecue = { + enable = true; + attachNavic = true; # Attach navic to language servers automatically + contextFollowIconColor = + false; # Whether context text should follow its icon's color + createAutocmd = true; # Create winbar updater autocmd + showBasename = true; + showDirname = true; + showModified = true; + showNavic = true; + #theme = "auto"; + + # --- Conditional Display ---------- + excludeFiletypes = ["netrw" "toggleterm"]; + #includeBuftypes = [""]; # Buftypes to enable winbar in + + # --- Icons ------------------------ + kinds = { + Array = ""; + Boolean = ""; + Class = ""; + Constant = ""; + Constructor = ""; + Enum = ""; + EnumMember = ""; + Event = ""; + Field = ""; + File = ""; + Function = ""; + Interface = ""; + Key = ""; + Method = ""; + Module = ""; + Namespace = ""; + Null = ""; + Number = ""; + Object = ""; + Operator = ""; + Package = ""; + Property = ""; + String = ""; + Struct = ""; + TypeParameter = ""; + Variable = ""; + }; + + # --- Overrides -------------------- + #customSection = '' + # function() return " " end + #''; + #leadCustomSection = '' + # function() return " " end + #''; + modified = '' + function(bufnr) return vim.bo[bufnr].modified end + ''; + + # Attrs will be added to the table parameter for the setup function. (Can override other attrs set by Nixvim) + extraOptions = {}; + }; +} diff --git a/hm/profiles/editor/neovim/plugins/comment-nvim.nix b/hm/profiles/editor/neovim/plugins/comment-nvim.nix new file mode 100644 index 00000000..affadae5 --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/comment-nvim.nix @@ -0,0 +1,19 @@ +{ + inputs, + lib, + config, + pkgs, + ... +}: { + programs.nixvim.plugins.comment-nvim = { + enable = lib.mkDefault true; + #settings = { + mappings = { + basic = true; + extra = true; + }; + padding = false; + #sticky = false; + #}; + }; +} diff --git a/hm/profiles/editor/neovim/plugins/cursorline.nix b/hm/profiles/editor/neovim/plugins/cursorline.nix new file mode 100644 index 00000000..42654180 --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/cursorline.nix @@ -0,0 +1,21 @@ +{ ... }: +{ + programs.nixvim.plugins.cursorline = { + enable = true; + + cursorline = { + enable = true; + number = true; # bool | raw lua code + timeout = 200; + }; + + cursorword = { + enable = true; + #hl = "{underline = true;}"; + minLength = 3; + }; + + #extraOptions = { + #}; + }; +} diff --git a/hm/profiles/editor/neovim/plugins/dap.nix b/hm/profiles/editor/neovim/plugins/dap.nix new file mode 100644 index 00000000..d0f7afc9 --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/dap.nix @@ -0,0 +1,61 @@ +{ + inputs, + config, + lib, + pkgs, + ... +}: { + imports = []; + programs.nixvim.plugins.dap = { + enable = true; + #package = pkgs.vimPlugins.nvim-dap; + #extraOptions = {}; + + signs = { + dapBreakpoint.text = "●"; + dapBreakpointCondition.text = "⯑"; + #dapBreakpointRejected.text = "R"; + #dapLogPoint.text="L"; + #dapStopped.text="→"; + }; + + extensions = { + dap-ui = { + enable = true; + controls = { + enabled = true; + element = "repl"; # Element to show the controls on. Options: repl | scopes | stacks | watches | breakpoints | console + }; + expandLines = true; + forceBuffers = true; + + #package = pkgs.vimPlugins.dap-ui; + #extraOptions = {}; + #selectWindow = null; # Options: null | str + }; + + dap-virtual-text = { + enable = true; + enabledCommands = true; + allFrames = + true; # Show virtual text for all stack frames, not just current. Default=false + allReferences = + true; # Show virtual text on all references of the variable, not only definitions. Default=false + clearOnContinue = + false; # Clear virtual text on continue (may cause flickering when stepping) Default=false + commented = + false; # Prefix virtual text w/ comment string. Default=false + #displayCallback = null; + highlightChangedVariables = + true; # HL changed vals w/ `NvimDapVirtualTextChanged`, else always `NvimDapVirtualText`. Default=true + highlightNewAsChanged = false; # HL new vars same as changed + onlyFirstDefinition = + true; # Only show virtual text at 1st definiton if multiple + showStopReason = true; # Show stop reason when exceptions. Default=true; + virtLines = false; # Show virtual lines instead of VT + #virtTextPos = "vim.fn.has 'nvim-0.10' == 1 and 'inline' or 'eol'"; # Default tries to inline VT. Use 'eol' for end-of-line. See :h nvim_buf_set_extmark(). + #virtTextWinCol = null; # Position VT @ fixed window col (starting from first text column). + }; + }; + }; +} diff --git a/hm/profiles/editor/neovim/plugins/dashboard.nix b/hm/profiles/editor/neovim/plugins/dashboard.nix new file mode 100644 index 00000000..d0317a57 --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/dashboard.nix @@ -0,0 +1,19 @@ +{ inputs +, ... +}: +{ + programs.nixvim.plugins.dashboard = { + enable = true; + #header = '' + #''; + #center = { + # = { action = ""; desc = ""; icon = ""; shortcut = ""; }; + #}; + #footer = '' + #''; + #hideStatusline = false; + #hideTabline = false; + #preview = { command = ""; file = ""; height = 40; width = 40; }; + #sessionDirectory = ""; + }; +} diff --git a/hm/profiles/editor/neovim/plugins/default.nix b/hm/profiles/editor/neovim/plugins/default.nix new file mode 100644 index 00000000..a430617e --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/default.nix @@ -0,0 +1,176 @@ +{ + config, + lib, + pkgs, + ... +}: { + imports = [ + ./auto-session.nix # # Auto save/restore Vim sessions + ./barbar.nix # # Status bar + ./comment-nvim.nix # # + ./cursorline.nix # # Cursor line/word highlight + ./dap.nix # # Diagnostics + ./dashboard.nix # # Startup screen + ./emmet.nix # # HTML tags + ./floaterm.nix # # Floating terminal + ./gitmessenger.nix # # Display Git log / message from last commit under cursor + ./gitsigns.nix # # Git sign column + ./indent-blankline.nix # # Indent new lines + ./lsp.nix # # Language server protocol + ./lualine.nix # # Statusline + ./luasnip.nix # # Snippets + ./markdown-preview.nix # # Render Markdown previews + ./neogit.nix # # Magit for neovim + ./neorg.nix # # Organization notes + ./noice.nix # # Experimental UI + ./notify.nix # # Notification UI + ./none-ls.nix # # Integration w/ LSP + ./nvim-autopairs.nix # # Pair matching + ./nvim-bqf.nix # # + ./nvim-cmp.nix # # Completion engine + ./nvim-colorizer.nix # # Color highlighter + #./nvim-lightbulb.nix # # Code Actions + ./nvim-tree.nix # # File tree + ./nvim-ufo.nix # # Code folding UI + ./ollama.nix # # Ollama LLM prompting + ./rust-tools.nix # # Rust utils + ./tagbar.nix # # Bar for tags + ./telescope.nix # # Search result UIs + ./todo-comments.nix # # Highlight todos & more + ./treesitter.nix # # Syntax trees + ./trouble.nix # # Pretty UIs: diagnostics, refs, telescope, quickfix, location lists + ./vim-matchup.nix # # Highlight matching pairs + ./which-key.nix # # UI to show next keymaps + ./yanky.nix # # Improved Yanking + + # TODO: Move plugins to separate file + #./netman.nix # Access network resources in Neovim + #./nvim-osc52.nix # Native system clipboard + #./sniprun.nix # Snippet runner + #./specs.nix # Visualize vim motions, selections, jumps + #./startify.nix # Start page + + # TODO: Add new plugins + #./instant.nix # Collaborative editing + #./lastplace.nix # Remember last editor position (conflict w/ auto-session ?) + #./oil.nix # Edit filesystem like Vim buffer + #./spider.nix # CamelCase word motions + ]; + + # --- Plugins --- + programs.nixvim.luaLoader.enable = + true; # Experimental lua loader w/ byte-compilation cache + programs.nixvim.plugins = { + # +--- Nix / NixOS --------------------------------------------------------+ + # | | + # | nix-develop.nvim - Run `nix develop` without restarting Neovim. | + # | | + # | Repo: https://github.com/figsoda/nix-develop.nvim/ | + # | | + # | Commands: | + # | - :NixDevelop .# --impure | + # | - :NixShell nixpkgs#hello | + # | - :RiffShell --project-dir foo | + # +------------------------------------------------------------------------+ + nix.enable = true; + nix-develop = { + enable = true; + #package = pkgs.vimPlugins.nix-develop-nvim; + + # These attrs will be added to the table parameter for the setup function. + # Typically, it can override NixVim’s default settings. + extraOptions = {}; + + # Env vars to ignore? + ignoredVariables = {}; + + # Env vars to split w/ separator? + separatedVariables = {}; + }; + + # --- Snippets --------------------- + friendly-snippets.enable = true; + helm.enable = true; + + # --- Browser ---------------------- + # Integrate browser textboxes with Neovim config + #firenvim.enable = lib.mkDefault true; + + # --- Jupyter Notebooks ------------ + # FIX: Missing Python package `kaleido` which is not in `nixpkgs` + #magma-nvim = { enable = true; automaticallyOpenOutput = true; }; # Call :MagmaShowOutput on cell run + + # --- Netman ----------------------- + # Access network resources in Neovim + netman = { + enable = lib.mkDefault false; + neoTreeIntegration = + config.programs.nixvim.plugins.neo-tree.enable; # true; + }; + + # Tab indents to proper level based on syntax + intellitab.enable = lib.mkDefault true; + + # --- UI Packages ------------------ + undotree.enable = lib.mkDefault true; + + # --- Projects --------------------- + project-nvim.enable = lib.mkDefault true; + + # --- Runners ---------------------- + sniprun = { + enable = lib.mkDefault true; + display = [ + "VirtualTextOk" + "LongTempFloatingWindowOk" + "NvimNotifyOk" + "TerminalErr" + ]; + #liveModeToggle = "on"; + #replEnable = []; + }; + + # --- Comments --------------------- + comment-nvim.enable = lib.mkDefault true; + commentary.enable = lib.mkDefault false; + + # --- System Integration ----------- + #../../nixvim/clipboard.nix + nvim-osc52 = { + enable = true; # Default=false + keymaps.enable = true; + keymaps.silent = false; + }; + + # --- Pairs ------------------------ + #./nvim-autopairs.nix + # TODO: Disable keymaps when plugins.vim-matchup.enableSurround|Transmute = true + surround.enable = lib.mkDefault true; + endwise.enable = lib.mkDefault true; + + # --- Keymaps ---------------------- + easyescape.enable = lib.mkDefault true; + # Highlight marks on backtick press + # TODO: Match highlight group `highlightGroup = "RadarMark"` w/ theme accent + mark-radar.enable = lib.mkDefault true; + + specs = { + # Show cursor jumps with highlights + enable = lib.mkDefault true; + min_jump = 3; + width = 5; + }; + startify.enable = lib.mkDefault false; + lastplace.enable = lib.mkDefault true; + }; + + programs.nixvim.extraPlugins = with pkgs.vimPlugins; [ + statix + #telescope-manix # Nix documentation & option search integration with Telescope.nvim + vim-addon-nix # TODO: Handled by LSP? + vim-nix + vim-nixhash + vim2nix + sved # synctex support b/w Vim/Neovim & Evince # TODO: iff systemConfig.programs.evince.enable=true; + ]; +} diff --git a/hm/profiles/editor/neovim/plugins/emmet.nix b/hm/profiles/editor/neovim/plugins/emmet.nix new file mode 100644 index 00000000..2b354477 --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/emmet.nix @@ -0,0 +1,15 @@ +{ + inputs, + config, + lib, + pkgs, + ... +}: { + programs.nixvim.plugins.emmet = { + enable = false; + #settings = { + # leader = null; + # mode = null; # i | n | v | a + #}; + }; +} diff --git a/hm/profiles/editor/neovim/plugins/floaterm.nix b/hm/profiles/editor/neovim/plugins/floaterm.nix new file mode 100644 index 00000000..3eca29d9 --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/floaterm.nix @@ -0,0 +1,19 @@ +{ self, inputs +, config, lib, pkgs +, ... +}: +{ + imports = [ + ]; + + programs.nixvim.plugins.floaterm = { + enable = lib.mkDefault true; + autoclose = 1; + autohide = 1; + autoinsert = true; + giteditor = true; + height = 0.6; + rootmarkers = [ ".project" ".git" ".hg" ".svn" ".root" "flake.nix" ".github" ]; + }; + +} diff --git a/hm/profiles/editor/neovim/plugins/gitmessenger.nix b/hm/profiles/editor/neovim/plugins/gitmessenger.nix new file mode 100644 index 00000000..990b371c --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/gitmessenger.nix @@ -0,0 +1,16 @@ + +{ inputs +, ... +}: +{ + + programs.nixvim.plugins.gitmessenger = { + enable = false; + dateFormat = "%c"; # :help strftime() + floatingWinOps = { + border = "rounded"; # TODO: Use global styling attrs + }; + includeDiff = "none"; # none | current | all + }; + +} diff --git a/hm/profiles/editor/neovim/plugins/gitsigns.nix b/hm/profiles/editor/neovim/plugins/gitsigns.nix new file mode 100644 index 00000000..0e143043 --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/gitsigns.nix @@ -0,0 +1,105 @@ +{ + config, + lib, + pkgs, + ... +}: +# TODO: Pick between either gutter signs or line highlighting. +{ + programs.nixvim = { + options.cursorlineopt = "both"; + highlight = { + #GitSignsStagedAdd = { fg = ""; bg = ""; }; + #GitSignsAdd = { fg = ""; bg = ""; }; + #GitSignsAddPreview = { fg = ""; bg = ""; }; + #GitSignsAddInline = { fg = ""; bg = ""; }; + #GitSignsAddLn = { fg = ""; bg = ""; }; + #GitSignsAddLnInline = { fg = ""; bg = ""; }; + GitSignsAddNr = { + #fg = ""; + fg = "Green"; + blend = 50; + bold = true; + }; + #GitSignsChangeLn = { fg = ""; bg = ""; }; + GitSignsChangeNr = { + fg = "White"; + blend = 50; + bold = true; + }; + GitSignsDeleteNr = { + fg = "Red"; + blend = 50; + bold = true; + }; + }; + + plugins.gitsigns = { + inherit (config.programs.git) enable; + #package = pkgs.vimPlugins.gitsigns; + gitPackage = config.programs.git.package; + + settings = { + attachToUntracked = true; # Attach to untracked files. D=t + #base = null; # Git object/revision to diff against. D='index' + #countChars = {"1"="1";}; # Chars for counts when signs.*.show_count=true. + entry used as fallback. + + currentLineBlame = true; + currentLineBlameOpts = { + delay = 1000; # Delay (ms) before virt text displayed. D=1000 + ignoreWhitespace = true; # Ignore whitespace when running blame. D=f + virtTextPos = "right_align"; # *eol | overlay | right_align + virtTextPriority = 100; # Opts: null | int . D=100 + }; + + diffOpts = { + algorithm = "myers"; # myers | minimal | patience | histogram + indentHeuristic = + false; # Use the indent heuristic for the internal diff library + internal = + true; # Use Neovim's builtin xdiff library for running diffs + #linematch = null; # Enable second-stage diff on hunks to align lines. null | int + vertical = true; # Start diff mode w/ vertical splits + }; + + linehl = false; # Enable highlighting lines by diff + numhl = true; # Enable line number highlights + + showDeleted = + false; # Show old version of hunks inline via virtual lines + signPriority = 6; + signcolumn = false; + + signs = { + add = { + hl = "GitSignsAdd"; + text = "┃"; + numhl = "GitSignsAddNr"; + linehl = "GitSignsAddLn"; + }; + change = { + hl = "GitSignsChange"; + linehl = "GitSignsChangeLn"; + numhl = "GitSignsChangeNr"; + }; + #delete = {}; + #topdelete = {}; + #changedelete = {}; + #untracked = {}; + }; + + # Use Trouble instead of QuickFix/LocationList window for setqflist()/setloclist() + trouble = config.programs.nixvim.plugins.trouble.enable; + + watchGitDir = { + enable = true; + followFiles = true; # Switch to new location after `git mv` + }; + + wordDiff = true; # Requires `diff_opts.internal = true` + + #yadm = false; # YADM support. D=f + }; + }; + }; +} diff --git a/hm/profiles/editor/neovim/plugins/indent-blankline.nix b/hm/profiles/editor/neovim/plugins/indent-blankline.nix new file mode 100644 index 00000000..61fe021c --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/indent-blankline.nix @@ -0,0 +1,82 @@ +{ + config, + lib, + pkgs, + ... +}: { + programs.nixvim.plugins.indent-blankline = { + # indent-blankline.vim - Show indentation guides + enable = lib.mkDefault true; + settings = { + exclude = { + buftypes = ["terminal" "nofile" "quickfix" "prompt"]; + filetypes = [ + "lspinfo" + "packer" + "checkhealth" + "help" + "man" + "gitcommit" + "TelescopePrompt" + "TelescopeResults" + "''" + ]; + }; + + #indent = { + # highlight = "|hl-IblIndent|"; + # priority = 1; + # smartIndentCap = true; + # tabChar = "list"; + #}; + + scope = { + enabled = true; + #char = "indent.char"; + #highlight = "|hl-IblScope|"; + injected_languages = true; + priority = 1024; + + # Show underline on 1st & last lines of scope starting/ending @ exact start/end of scope, + # even if right of indent guide. + # Default: false + show_exact_scope = true; + + show_end = true; + + # Applies highlight group `hl-IndentBlanklineContextStart` to first line in current context. + show_start = true; + + exclude.language = []; # List of treesitter languages for which scope is disabled. (List) + exclude.node_type = { + "*" = ["source_file" "program"]; # Wildcard: all langs + lua = ["chunk"]; + python = ["module"]; + }; + include.nodeType = {}; + }; + + viewport_buffer = { + max = 500; + min = 30; + }; + #whitespace.highlight = "hl-IblWhitespace"; + whitespace.remove_blankline_trail = true; + + #context_patterns = [ "class" "^func" "method" + # "^if" "while" "for" "with" "try" "except" "arguments" + # "argument_list" "object" "dictionary" "element" + # "table" "tuple" "do_block" ]; + + #spaceCharBlankline = " "; + #char = "│"; + #contextChar = ""; + #charHighlightList = [ "IndentBlankLineIndent1" + # "IndentBlankLineIndent2" "IndentBlankLineIndent2" + # "IndentBlankLineIndent2" ]; + #spaceCharHighlightList = [ "IndentBlankLineIndent1" + # "IndentBlankLineIndent2" "IndentBlankLineIndent2" + # "IndentBlankLineIndent2" ]; + }; + }; +} diff --git a/hm/profiles/editor/neovim/plugins/lsp.nix b/hm/profiles/editor/neovim/plugins/lsp.nix new file mode 100644 index 00000000..6c496de2 --- /dev/null +++ b/hm/profiles/editor/neovim/plugins/lsp.nix @@ -0,0 +1,243 @@ +{ + config, + lib, + ... +}: let + isLspCmp = with config.programs.nixvim.plugins; lsp.enable && nvim-cmp.enable; +in { + # --- Language Server Protocol ----- + programs.nixvim.plugins = { + cmp-nvim-lsp.enable = lib.mkDefault isLspCmp; + cmp-nvim-lsp-document-symbol.enable = lib.mkDefault isLspCmp; + cmp-nvim-lsp-signature-help.enable = lib.mkDefault isLspCmp; + cmp-vim-lsp.enable = false; # lib.mkDefault isLspCmp; + + lsp = { + enable = true; + + # --- Lua Hooks -------------------------------------- + # Note: These hooks may be able to be overridden per-server under: `plugins.lsp.servers..