From 1abb99aa073116e9ef187d28f16837b233ced3aa Mon Sep 17 00:00:00 2001 From: moons-14 Date: Wed, 27 May 2026 20:37:47 +0900 Subject: [PATCH 01/39] delete --- .github/workflows/nix-cache.yml | 71 - .gitignore | 18 - README.md | 189 --- flake.lock | 1197 ----------------- flake.nix | 142 -- hosts/dev-1/default.nix | 12 - hosts/dev-1/hardware-configuration.nix | 37 - hosts/monitor/default.nix | 12 - hosts/monitor/hardware-configuration.nix | 37 - hosts/nix-test/default.nix | 12 - hosts/nix-test/hardware-configuration.nix | 30 - hosts/ops/default.nix | 45 - hosts/ops/hardware-configuration.nix | 30 - hosts/service-1/default.nix | 43 - hosts/service-1/hardware-configuration.nix | 37 - hosts/x1g13-wsl/default.nix | 18 - hosts/x1g13/default.nix | 15 - hosts/x1g13/hardware-configuration.nix | 38 - hosts/x1g9/default.nix | 14 - hosts/x1g9/hardware-configuration.nix | 38 - images/avatar.jpg | Bin 42497 -> 0 bytes modules/core/boot.nix | 11 - modules/core/ca/root_ca.crt | 12 - modules/core/cachix.nix | 15 - modules/core/camera.nix | 21 - modules/core/default.nix | 18 - modules/core/environment.nix | 9 - modules/core/fingerprint.nix | 21 - modules/core/fonts.nix | 29 - modules/core/gc.nix | 11 - modules/core/greetd.nix | 11 - modules/core/gui.nix | 8 - modules/core/hardware.nix | 15 - modules/core/hyprland.nix | 10 - modules/core/i18n.nix | 32 - modules/core/kde.nix | 6 - modules/core/network.nix | 39 - modules/core/niri.nix | 6 - modules/core/noctalia.nix | 6 - modules/core/packages.nix | 68 - modules/core/power.nix | 14 - modules/core/secure-boot.nix | 17 - modules/core/services.nix | 76 -- modules/core/ssh.nix | 24 - modules/core/system.nix | 30 - modules/core/user.nix | 38 - modules/core/xserver.nix | 13 - modules/drivers/intel-drivers.nix | 21 - modules/home/avatar.nix | 7 - modules/home/browser.nix | 26 - modules/home/btop/default.nix | 12 - modules/home/btop/dracula.theme | 89 -- modules/home/claude.nix | 9 - modules/home/default.nix | 13 - modules/home/discord.nix | 6 - modules/home/environment.nix | 7 - modules/home/fcitx5/config | 70 - modules/home/fcitx5/default.nix | 7 - modules/home/ghostty/config | 30 - modules/home/ghostty/default.nix | 13 - modules/home/ghostty/dracula.theme | 44 - modules/home/git.nix | 32 - modules/home/gtk.nix | 18 - modules/home/lock.nix | 34 - modules/home/nautilus.nix | 9 - modules/home/niri/default.nix | 147 -- modules/home/niri/defaultKeyBind.nix | 240 ---- modules/home/nixvim/autocmds.nix | 8 - modules/home/nixvim/colorscheme.nix | 6 - modules/home/nixvim/default.nix | 45 - modules/home/nixvim/keymaps.nix | 174 --- modules/home/nixvim/language.nix | 13 - modules/home/nixvim/lsp.nix | 65 - modules/home/nixvim/options.nix | 50 - modules/home/nixvim/plugins/default.nix | 6 - .../home/nixvim/plugins/editor/autopairs.nix | 3 - .../home/nixvim/plugins/editor/blink-cmp.nix | 47 - .../home/nixvim/plugins/editor/comment.nix | 3 - .../home/nixvim/plugins/editor/conform.nix | 24 - .../home/nixvim/plugins/editor/copilot.nix | 11 - .../home/nixvim/plugins/editor/default.nix | 22 - modules/home/nixvim/plugins/editor/flash.nix | 8 - .../nixvim/plugins/editor/git-conflict.nix | 8 - modules/home/nixvim/plugins/editor/git.nix | 10 - .../home/nixvim/plugins/editor/gitsigns.nix | 15 - modules/home/nixvim/plugins/editor/glance.nix | 8 - .../nixvim/plugins/editor/lsp-signature.nix | 11 - modules/home/nixvim/plugins/editor/snacks.nix | 31 - .../home/nixvim/plugins/editor/spectre.nix | 9 - .../home/nixvim/plugins/editor/surround.nix | 3 - .../nixvim/plugins/editor/todo-comments.nix | 8 - .../home/nixvim/plugins/editor/treesitter.nix | 16 - .../home/nixvim/plugins/editor/trouble.nix | 3 - .../home/nixvim/plugins/editor/wakatime.nix | 3 - modules/home/nixvim/plugins/ui/barbar.nix | 26 - modules/home/nixvim/plugins/ui/blankline.nix | 20 - modules/home/nixvim/plugins/ui/colorizer.nix | 23 - modules/home/nixvim/plugins/ui/default.nix | 19 - modules/home/nixvim/plugins/ui/dropbar.nix | 3 - modules/home/nixvim/plugins/ui/lightbulb.nix | 6 - modules/home/nixvim/plugins/ui/lualine.nix | 25 - modules/home/nixvim/plugins/ui/markview.nix | 8 - modules/home/nixvim/plugins/ui/neo-tree.nix | 37 - modules/home/nixvim/plugins/ui/scrollbar.nix | 8 - modules/home/nixvim/plugins/ui/toggleterm.nix | 3 - modules/home/nixvim/plugins/ui/treesitter.nix | 3 - modules/home/nixvim/plugins/ui/ufo.nix | 23 - .../home/nixvim/plugins/ui/web-devicons.nix | 4 - modules/home/nixvim/plugins/ui/which-key.nix | 4 - modules/home/nixvim/plugins/ui/zen-mode.nix | 8 - modules/home/noctalia.nix | 168 --- modules/home/ssh.nix | 67 - modules/home/vicinae.nix | 50 - modules/home/vscode.nix | 283 ---- modules/home/wallpaper.nix | 26 - modules/home/zellij.nix | 61 - modules/home/zoom.nix | 9 - modules/home/zsh.nix | 47 - overlays/default.nix | 3 - profiles/cli-minimal.nix | 8 - profiles/cli-server.nix | 10 - profiles/cli.nix | 10 - profiles/gui.nix | 27 - profiles/laptop.nix | 13 - renovate.json | 15 - shells/jupyter.nix | 46 - shells/next-web.nix | 66 - shells/rust/default.nix | 49 - shells/rust/rust-toolchain.toml | 2 - 129 files changed, 5219 deletions(-) delete mode 100644 .github/workflows/nix-cache.yml delete mode 100644 README.md delete mode 100644 flake.lock delete mode 100644 flake.nix delete mode 100644 hosts/dev-1/default.nix delete mode 100644 hosts/dev-1/hardware-configuration.nix delete mode 100644 hosts/monitor/default.nix delete mode 100644 hosts/monitor/hardware-configuration.nix delete mode 100644 hosts/nix-test/default.nix delete mode 100644 hosts/nix-test/hardware-configuration.nix delete mode 100644 hosts/ops/default.nix delete mode 100644 hosts/ops/hardware-configuration.nix delete mode 100644 hosts/service-1/default.nix delete mode 100644 hosts/service-1/hardware-configuration.nix delete mode 100644 hosts/x1g13-wsl/default.nix delete mode 100644 hosts/x1g13/default.nix delete mode 100644 hosts/x1g13/hardware-configuration.nix delete mode 100644 hosts/x1g9/default.nix delete mode 100644 hosts/x1g9/hardware-configuration.nix delete mode 100644 images/avatar.jpg delete mode 100644 modules/core/boot.nix delete mode 100644 modules/core/ca/root_ca.crt delete mode 100644 modules/core/cachix.nix delete mode 100644 modules/core/camera.nix delete mode 100644 modules/core/default.nix delete mode 100644 modules/core/environment.nix delete mode 100644 modules/core/fingerprint.nix delete mode 100644 modules/core/fonts.nix delete mode 100644 modules/core/gc.nix delete mode 100644 modules/core/greetd.nix delete mode 100644 modules/core/gui.nix delete mode 100644 modules/core/hardware.nix delete mode 100644 modules/core/hyprland.nix delete mode 100644 modules/core/i18n.nix delete mode 100644 modules/core/kde.nix delete mode 100644 modules/core/network.nix delete mode 100644 modules/core/niri.nix delete mode 100644 modules/core/noctalia.nix delete mode 100644 modules/core/packages.nix delete mode 100644 modules/core/power.nix delete mode 100644 modules/core/secure-boot.nix delete mode 100644 modules/core/services.nix delete mode 100644 modules/core/ssh.nix delete mode 100644 modules/core/system.nix delete mode 100644 modules/core/user.nix delete mode 100644 modules/core/xserver.nix delete mode 100644 modules/drivers/intel-drivers.nix delete mode 100644 modules/home/avatar.nix delete mode 100644 modules/home/browser.nix delete mode 100644 modules/home/btop/default.nix delete mode 100644 modules/home/btop/dracula.theme delete mode 100644 modules/home/claude.nix delete mode 100644 modules/home/default.nix delete mode 100644 modules/home/discord.nix delete mode 100644 modules/home/environment.nix delete mode 100644 modules/home/fcitx5/config delete mode 100644 modules/home/fcitx5/default.nix delete mode 100644 modules/home/ghostty/config delete mode 100644 modules/home/ghostty/default.nix delete mode 100644 modules/home/ghostty/dracula.theme delete mode 100644 modules/home/git.nix delete mode 100644 modules/home/gtk.nix delete mode 100644 modules/home/lock.nix delete mode 100644 modules/home/nautilus.nix delete mode 100644 modules/home/niri/default.nix delete mode 100644 modules/home/niri/defaultKeyBind.nix delete mode 100644 modules/home/nixvim/autocmds.nix delete mode 100644 modules/home/nixvim/colorscheme.nix delete mode 100644 modules/home/nixvim/default.nix delete mode 100644 modules/home/nixvim/keymaps.nix delete mode 100644 modules/home/nixvim/language.nix delete mode 100644 modules/home/nixvim/lsp.nix delete mode 100644 modules/home/nixvim/options.nix delete mode 100644 modules/home/nixvim/plugins/default.nix delete mode 100644 modules/home/nixvim/plugins/editor/autopairs.nix delete mode 100644 modules/home/nixvim/plugins/editor/blink-cmp.nix delete mode 100644 modules/home/nixvim/plugins/editor/comment.nix delete mode 100644 modules/home/nixvim/plugins/editor/conform.nix delete mode 100644 modules/home/nixvim/plugins/editor/copilot.nix delete mode 100644 modules/home/nixvim/plugins/editor/default.nix delete mode 100644 modules/home/nixvim/plugins/editor/flash.nix delete mode 100644 modules/home/nixvim/plugins/editor/git-conflict.nix delete mode 100644 modules/home/nixvim/plugins/editor/git.nix delete mode 100644 modules/home/nixvim/plugins/editor/gitsigns.nix delete mode 100644 modules/home/nixvim/plugins/editor/glance.nix delete mode 100644 modules/home/nixvim/plugins/editor/lsp-signature.nix delete mode 100644 modules/home/nixvim/plugins/editor/snacks.nix delete mode 100644 modules/home/nixvim/plugins/editor/spectre.nix delete mode 100644 modules/home/nixvim/plugins/editor/surround.nix delete mode 100644 modules/home/nixvim/plugins/editor/todo-comments.nix delete mode 100644 modules/home/nixvim/plugins/editor/treesitter.nix delete mode 100644 modules/home/nixvim/plugins/editor/trouble.nix delete mode 100644 modules/home/nixvim/plugins/editor/wakatime.nix delete mode 100644 modules/home/nixvim/plugins/ui/barbar.nix delete mode 100644 modules/home/nixvim/plugins/ui/blankline.nix delete mode 100644 modules/home/nixvim/plugins/ui/colorizer.nix delete mode 100644 modules/home/nixvim/plugins/ui/default.nix delete mode 100644 modules/home/nixvim/plugins/ui/dropbar.nix delete mode 100644 modules/home/nixvim/plugins/ui/lightbulb.nix delete mode 100644 modules/home/nixvim/plugins/ui/lualine.nix delete mode 100644 modules/home/nixvim/plugins/ui/markview.nix delete mode 100644 modules/home/nixvim/plugins/ui/neo-tree.nix delete mode 100644 modules/home/nixvim/plugins/ui/scrollbar.nix delete mode 100644 modules/home/nixvim/plugins/ui/toggleterm.nix delete mode 100644 modules/home/nixvim/plugins/ui/treesitter.nix delete mode 100644 modules/home/nixvim/plugins/ui/ufo.nix delete mode 100644 modules/home/nixvim/plugins/ui/web-devicons.nix delete mode 100644 modules/home/nixvim/plugins/ui/which-key.nix delete mode 100644 modules/home/nixvim/plugins/ui/zen-mode.nix delete mode 100644 modules/home/noctalia.nix delete mode 100644 modules/home/ssh.nix delete mode 100644 modules/home/vicinae.nix delete mode 100644 modules/home/vscode.nix delete mode 100644 modules/home/wallpaper.nix delete mode 100644 modules/home/zellij.nix delete mode 100644 modules/home/zoom.nix delete mode 100644 modules/home/zsh.nix delete mode 100644 overlays/default.nix delete mode 100644 profiles/cli-minimal.nix delete mode 100644 profiles/cli-server.nix delete mode 100644 profiles/cli.nix delete mode 100644 profiles/gui.nix delete mode 100644 profiles/laptop.nix delete mode 100644 renovate.json delete mode 100644 shells/jupyter.nix delete mode 100644 shells/next-web.nix delete mode 100644 shells/rust/default.nix delete mode 100644 shells/rust/rust-toolchain.toml diff --git a/.github/workflows/nix-cache.yml b/.github/workflows/nix-cache.yml deleted file mode 100644 index 8b76c31..0000000 --- a/.github/workflows/nix-cache.yml +++ /dev/null @@ -1,71 +0,0 @@ -name: nix-build-and-cache - -on: - pull_request: - paths: - - "flake.nix" - - "flake.lock" - - "hosts/**" - - "modules/**" - - "profiles/**" - - "overlays/**" - - ".github/workflows/nix-cache.yml" - push: - branches: - - main - paths: - - "flake.nix" - - "flake.lock" - - "hosts/**" - - "modules/**" - - "profiles/**" - - "overlays/**" - - ".github/workflows/nix-cache.yml" - workflow_dispatch: - -concurrency: - group: nix-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - host: - - x1g9 - - x1g13-wsl - - x1g13 - - monitor - - dev-1 - - service-1 - - steps: - - name: Checkout - uses: actions/checkout@v6 - - - name: Install Nix - uses: cachix/install-nix-action@v31 - with: - github_access_token: ${{ secrets.GITHUB_TOKEN }} - extra_nix_config: | - accept-flake-config = true - - - name: Setup Cachix for PR - if: github.event_name == 'pull_request' - uses: cachix/cachix-action@v17 - with: - name: moons-dotfiles - skipPush: true - - - name: Setup Cachix for main push - if: github.event_name == 'push' && github.ref == 'refs/heads/main' - uses: cachix/cachix-action@v17 - with: - name: moons-dotfiles - authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - - - name: Build host - run: | - nix build -L .#nixosConfigurations.${{ matrix.host }}.config.system.build.toplevel diff --git a/.gitignore b/.gitignore index a7f6ba0..8b13789 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1 @@ -/* -!.gitignore -!README.md -!LICENSE - -!/flake.nix -!/flake.lock - -!/hosts/ -!/modules/ -!/home-manager/ -!/shells/ -!/images/ -!/profiles/ -!/overlays/ - -!renovate.json -!.github/ diff --git a/README.md b/README.md deleted file mode 100644 index 8d3b6a2..0000000 --- a/README.md +++ /dev/null @@ -1,189 +0,0 @@ -# dotfiles - -NixOS + Home Manager configuration for moons. This repository uses Nix flakes to -manage multiple NixOS hosts and project-specific development shells. - -This is a personal configuration. It assumes the `moons` user, `ja_JP.UTF-8` -locale, and `Asia/Tokyo` timezone. - -## Features - -- NixOS 25.11 based flake configuration -- Home Manager integrated as a NixOS module -- Wayland GUI profile with Niri, Hyprland, greetd, and Noctalia -- Home Manager modules for zsh, git, btop, zellij, direnv, NixVim, fcitx5, and more -- Separate hosts for ThinkPad X1 Carbon Gen 9 / Gen 13, WSL, and server machines -- `nix develop` shells for Next.js, Jupyter, and Rust projects -- GitHub Actions + Cachix build cache for host builds -- Renovate maintenance for flake inputs and the lock file - -## Hosts - -The following hosts are defined in `flake.nix` under `nixosConfigurations`. - -| Host | Profile | Notes | -| --- | --- | --- | -| `x1g9` | `laptop` | ThinkPad X1 9th gen, using `nixos-hardware` and the Intel driver module | -| `x1g13` | `laptop` | ThinkPad X1 13th gen, using the Intel driver module and Lanzaboote secure boot | -| `x1g13-wsl` | `cli` | NixOS-WSL with `moons` as the default user | -| `monitor` | `cli-server` | Server host | -| `dev-1` | `cli-server` | Server host | -| `service-1` | `cli-server` | Server host with Immich / Cloudreve NFS mounts | - -## Profiles - -Profiles live in `profiles/` and are selected per host from `flake.nix`. - -| Profile | Role | -| --- | --- | -| `cli-minimal` | Minimal profile with no extra imports. Shared NixOS and Home Manager modules are still always applied | -| `cli` | CLI profile extending `cli-minimal` | -| `cli-server` | Server profile extending `cli` | -| `gui` | GUI profile extending `cli` with Niri, Hyprland, greetd, Noctalia, KDE/GUI support, and GUI Home Manager modules | -| `laptop` | Laptop profile extending `gui` with fingerprint, power, and camera modules | - -## Directory Layout - -```text -. -|-- flake.nix # inputs, host definitions, devShells -|-- flake.lock # locked flake inputs -|-- hosts/ # host-specific NixOS settings -| `-- / -| |-- default.nix -| `-- hardware-configuration.nix -|-- profiles/ # reusable host profiles -|-- modules/ -| |-- core/ # NixOS modules -| |-- drivers/ # hardware / driver modules -| `-- home/ # Home Manager modules -|-- overlays/ # package overlays -|-- shells/ # nix develop environments -|-- images/ # managed image assets -|-- renovate.json # Renovate config -`-- .github/workflows/ # CI builds and Cachix integration -``` - -## System Usage - -Rebuild the current machine by selecting the matching `#` output. - -```sh -sudo nixos-rebuild switch --flake .#x1g13 -``` - -Switch on the next boot instead: - -```sh -sudo nixos-rebuild boot --flake .#x1g13 -``` - -Build a system closure in the same form used by CI: - -```sh -nix build -L .#nixosConfigurations.x1g13.config.system.build.toplevel -``` - -List available hosts and development shells: - -```sh -nix flake show -``` - -## Development Shells - -`devShells.x86_64-linux` provides the following shells. - -| Shell | Command | Main tools | -| --- | --- | --- | -| `next-web` | `nix develop .#next-web` | Node.js 24, pnpm, Vercel CLI, Prisma, OpenSSL, jq, ngrok | -| `jupyter` | `nix develop .#jupyter` | Python 3.12, JupyterLab, NumPy, pandas, matplotlib, scipy, scikit-learn | -| `rust` | `nix develop .#rust` | rustup, clang, LLVM/binutils, pkg-config | - -To use a shell through direnv, add an `.envrc` to the target project. - -```sh -use flake ~/dotfiles#next-web -``` - -## Adding A Host - -1. Create `hosts//hardware-configuration.nix`. - For an existing NixOS install, use the output from `sudo nixos-generate-config`. -2. Create `hosts//default.nix` and import hardware modules or host-specific settings. -3. Add a `mkSystem` entry to `nixosConfigurations` in `flake.nix` and choose a `profile`. -4. Check the build with `nix build -L .#nixosConfigurations..config.system.build.toplevel`. -5. Run `sudo nixos-rebuild switch --flake .#` on the target host. - -## Common Modules - -### NixOS - -`modules/core/default.nix` imports boot, Cachix, environment, fonts, GC, hardware, -i18n, network, packages, services, SSH, system, user, and xserver modules. - -Main settings include: - -- flakes / nix-command enabled -- `moons` user and Home Manager integration -- zsh, Docker, Tailscale, PipeWire, adb, Java 25, Python, Bun, Claude Code, Codex, and more -- NetworkManager, fixed nameservers, and JP Wi-Fi regulatory domain -- OpenSSH server with password login and root login disabled -- Cachix caches for `moons-dotfiles` and `vicinae` - -### Home Manager - -`modules/home/default.nix` imports btop, git, fcitx5, SSH, NixVim, zsh, direnv, -zellij, and Claude configuration. - -The GUI profile additionally manages Niri, VS Code, Google Chrome, Vicinae, -Noctalia, Ghostty, wallpaper, lock screen, Discord, Nautilus, GTK, and Zoom. - -NixVim is split into modules for LSP, formatters, completion, git integration, -UI plugins, editor plugins, options, keymaps, and autocmds. - -## Manual Steps - -The following setup is not fully declarative or needs host-specific manual work. - -- Register an SSH public key with GitHub. -- Enroll fingerprints on laptop hosts. - -```sh -fprintd-enroll -``` - -- `x1g13` uses Lanzaboote / sbctl for secure boot. The PKI bundle is read from - `/var/lib/sbctl`. -- Log in to services that require authentication, such as Tailscale and 1Password. - -## Maintenance - -Update all flake inputs: - -```sh -nix flake update -``` - -Update a single input: - -```sh -nix flake lock --update-input nixpkgs -``` - -GitHub Actions builds all hosts when `flake.nix`, `flake.lock`, `hosts/**`, -`modules/**`, `profiles/**`, or `overlays/**` changes. Pushes to `main` upload -to the `moons-dotfiles` Cachix cache. - -Renovate enables Nix lock file maintenance and has a separate package rule for -`llm-agents`. - -## Inspired - -- [Zaney/zaneyos](https://gitlab.com/Zaney/zaneyos) -- [fa0311/.zshrc](https://gist.github.com/fa0311/d37d53ff39c73c54c883379e8e3732df) -- [AsianLovesLinux/Niri](https://github.com/AsianLovesLinux/Niri) -- [natsukium/dotfiles](https://github.com/natsukium/dotfiles) -- [dracula](https://github.com/dracula) -- [akazdayo/nix-configs](https://github.com/akazdayo/nix-configs) -- [yutakobayashidev/dotnix](https://github.com/yutakobayashidev/dotnix) diff --git a/flake.lock b/flake.lock deleted file mode 100644 index 4de7c0d..0000000 --- a/flake.lock +++ /dev/null @@ -1,1197 +0,0 @@ -{ - "nodes": { - "base16": { - "inputs": { - "fromYaml": "fromYaml" - }, - "locked": { - "lastModified": 1755819240, - "narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=", - "owner": "SenchoPens", - "repo": "base16.nix", - "rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6", - "type": "github" - }, - "original": { - "owner": "SenchoPens", - "repo": "base16.nix", - "type": "github" - } - }, - "base16-fish": { - "flake": false, - "locked": { - "lastModified": 1765809053, - "narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=", - "owner": "tomyun", - "repo": "base16-fish", - "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", - "type": "github" - }, - "original": { - "owner": "tomyun", - "repo": "base16-fish", - "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", - "type": "github" - } - }, - "base16-helix": { - "flake": false, - "locked": { - "lastModified": 1760703920, - "narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=", - "owner": "tinted-theming", - "repo": "base16-helix", - "rev": "d646af9b7d14bff08824538164af99d0c521b185", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "base16-helix", - "type": "github" - } - }, - "base16-vim": { - "flake": false, - "locked": { - "lastModified": 1732806396, - "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=", - "owner": "tinted-theming", - "repo": "base16-vim", - "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "base16-vim", - "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", - "type": "github" - } - }, - "crane": { - "locked": { - "lastModified": 1777242778, - "narHash": "sha256-VWTeqWeb8Sel/QiWyaPvCa9luAbcGawR+Rw09FJoHz0=", - "owner": "ipetkov", - "repo": "crane", - "rev": "ad8b31ad0ba8448bd958d7a5d50d811dc5d271c0", - "type": "github" - }, - "original": { - "owner": "ipetkov", - "repo": "crane", - "type": "github" - } - }, - "firefox-gnome-theme": { - "flake": false, - "locked": { - "lastModified": 1775176642, - "narHash": "sha256-2veEED0Fg7Fsh81tvVDNYR6SzjqQxa7hbi18Jv4LWpM=", - "owner": "rafaelmardojai", - "repo": "firefox-gnome-theme", - "rev": "179704030c5286c729b5b0522037d1d51341022c", - "type": "github" - }, - "original": { - "owner": "rafaelmardojai", - "repo": "firefox-gnome-theme", - "type": "github" - } - }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1761588595, - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_2": { - "flake": false, - "locked": { - "lastModified": 1767039857, - "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", - "owner": "NixOS", - "repo": "flake-compat", - "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_3": { - "flake": false, - "locked": { - "lastModified": 1767039857, - "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_4": { - "flake": false, - "locked": { - "lastModified": 1767039857, - "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", - "owner": "NixOS", - "repo": "flake-compat", - "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-parts": { - "inputs": { - "nixpkgs-lib": [ - "nixvim", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1768135262, - "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_2": { - "inputs": { - "nixpkgs-lib": [ - "stylix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1775087534, - "narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-utils": { - "inputs": { - "systems": "systems_2" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "fromYaml": { - "flake": false, - "locked": { - "lastModified": 1731966426, - "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", - "owner": "SenchoPens", - "repo": "fromYaml", - "rev": "106af9e2f715e2d828df706c386a685698f3223b", - "type": "github" - }, - "original": { - "owner": "SenchoPens", - "repo": "fromYaml", - "type": "github" - } - }, - "ghostty": { - "inputs": { - "flake-compat": "flake-compat", - "home-manager": "home-manager", - "nixpkgs": "nixpkgs", - "systems": "systems", - "zig": "zig", - "zon2nix": "zon2nix" - }, - "locked": { - "lastModified": 1777773742, - "narHash": "sha256-dZFc+8az7BUIs8+v45XqNnY5G6oXEwVfVVHZQuATSGQ=", - "owner": "ghostty-org", - "repo": "ghostty", - "rev": "1547dd667ab6d1f4ebcdc7282adc54c95752ee67", - "type": "github" - }, - "original": { - "owner": "ghostty-org", - "repo": "ghostty", - "type": "github" - } - }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "lanzaboote", - "pre-commit", - "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" - } - }, - "gnome-shell": { - "flake": false, - "locked": { - "lastModified": 1767737596, - "narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=", - "owner": "GNOME", - "repo": "gnome-shell", - "rev": "ef02db02bf0ff342734d525b5767814770d85b49", - "type": "github" - }, - "original": { - "owner": "GNOME", - "repo": "gnome-shell", - "rev": "ef02db02bf0ff342734d525b5767814770d85b49", - "type": "github" - } - }, - "home-manager": { - "inputs": { - "nixpkgs": [ - "ghostty", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1770586272, - "narHash": "sha256-Ucci8mu8QfxwzyfER2DQDbvW9t1BnTUJhBmY7ybralo=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "b1f916ba052341edc1f80d4b2399f1092a4873ca", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "home-manager", - "type": "github" - } - }, - "home-manager_2": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1777771528, - "narHash": "sha256-YycygK6n7KeW1YCobdFJcORWzkmrvNcp6xT+IovA0d4=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "0585fbf645640973e3398863bbaf3bd1ddce4a51", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "release-25.11", - "repo": "home-manager", - "type": "github" - } - }, - "ixx": { - "inputs": { - "flake-utils": [ - "nixvim", - "nuschtosSearch", - "flake-utils" - ], - "nixpkgs": [ - "nixvim", - "nuschtosSearch", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1754860581, - "narHash": "sha256-EM0IE63OHxXCOpDHXaTyHIOk2cNvMCGPqLt/IdtVxgk=", - "owner": "NuschtOS", - "repo": "ixx", - "rev": "babfe85a876162c4acc9ab6fb4483df88fa1f281", - "type": "github" - }, - "original": { - "owner": "NuschtOS", - "ref": "v0.1.1", - "repo": "ixx", - "type": "github" - } - }, - "lanzaboote": { - "inputs": { - "crane": "crane", - "nixpkgs": [ - "nixpkgs" - ], - "pre-commit": "pre-commit", - "rust-overlay": "rust-overlay" - }, - "locked": { - "lastModified": 1777299656, - "narHash": "sha256-c0r3xXp2+xFJwkryS+nhyQwoACbFzSt4C1TVs3QMh8E=", - "owner": "nix-community", - "repo": "lanzaboote", - "rev": "079c608988c2747db3902c9de033572cd50e8656", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "lanzaboote", - "type": "github" - } - }, - "niri-flake": { - "inputs": { - "niri-stable": "niri-stable", - "niri-unstable": "niri-unstable", - "nixpkgs": "nixpkgs_2", - "nixpkgs-stable": "nixpkgs-stable", - "xwayland-satellite-stable": "xwayland-satellite-stable", - "xwayland-satellite-unstable": "xwayland-satellite-unstable" - }, - "locked": { - "lastModified": 1777815637, - "narHash": "sha256-jQnoHmnFgUWYDNosplgd5eFnUTT0MtEj2w9HCA4g1C0=", - "owner": "sodiboo", - "repo": "niri-flake", - "rev": "945748d71d3422d4f1dada2cd10222e34ed9d767", - "type": "github" - }, - "original": { - "owner": "sodiboo", - "repo": "niri-flake", - "type": "github" - } - }, - "niri-stable": { - "flake": false, - "locked": { - "lastModified": 1756556321, - "narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=", - "owner": "YaLTeR", - "repo": "niri", - "rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294", - "type": "github" - }, - "original": { - "owner": "YaLTeR", - "ref": "v25.08", - "repo": "niri", - "type": "github" - } - }, - "niri-unstable": { - "flake": false, - "locked": { - "lastModified": 1777733745, - "narHash": "sha256-1TlpdT0WYyBGtUS3PH4oXHUmdno2EUh2TfHadK2BmJo=", - "owner": "YaLTeR", - "repo": "niri", - "rev": "1f07cffa9f355298a31d7efe1b400ede93a97728", - "type": "github" - }, - "original": { - "owner": "YaLTeR", - "repo": "niri", - "type": "github" - } - }, - "nixos-hardware": { - "locked": { - "lastModified": 1777796046, - "narHash": "sha256-bEJp/zaQApzynGRaAO62BZSz9tFikKtIHCn2yIA/s7Q=", - "owner": "NixOS", - "repo": "nixos-hardware", - "rev": "eeb02f6e29fc8139c0b15af5ff0fdfdc6d0d3d90", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "master", - "repo": "nixos-hardware", - "type": "github" - } - }, - "nixos-wsl": { - "inputs": { - "flake-compat": "flake-compat_3", - "nixpkgs": "nixpkgs_3" - }, - "locked": { - "lastModified": 1777732699, - "narHash": "sha256-2uX/XtOWZ/oy2rerRynVhqVA//ZXZ3Fo60PikLHEPQc=", - "owner": "nix-community", - "repo": "NixOS-WSL", - "rev": "5482f113fd31ebac131d1ebeb2ae90bf0d5e41f5", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "NixOS-WSL", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1770537093, - "narHash": "sha256-XV30uo8tXuxdzuV8l3sojmlPRLd/8tpMsOp4lNzLGUo=", - "rev": "fef9403a3e4d31b0a23f0bacebbec52c248fbb51", - "type": "tarball", - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre942631.fef9403a3e4d/nixexprs.tar.xz" - }, - "original": { - "type": "tarball", - "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" - } - }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1777673416, - "narHash": "sha256-5c2POKPOjU40Kh0MirOdScBLG0bu9TAuPYAtPRNZMBs=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "26ef669cffa904b6f6832ab57b77892a37c1a671", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-25.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-unstable": { - "locked": { - "lastModified": 1777641297, - "narHash": "sha256-WNGcmeOZ8Tr9dq6ztCspYbzWFswr2mPebM9LpsfGxPk=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "c6d65881c5624c9cae5ea6cedef24699b0c0a4c0", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1777578337, - "narHash": "sha256-Ad49moKWeXtKBJNy2ebiTQUEgdLyvGmTeykAQ9xM+Z4=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "15f4ee454b1dce334612fa6843b3e05cf546efab", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1776169885, - "narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_4": { - "locked": { - "lastModified": 1777673416, - "narHash": "sha256-5c2POKPOjU40Kh0MirOdScBLG0bu9TAuPYAtPRNZMBs=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "26ef669cffa904b6f6832ab57b77892a37c1a671", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-25.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_5": { - "locked": { - "lastModified": 1772542754, - "narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "8c809a146a140c5c8806f13399592dbcb1bb5dc4", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixvim": { - "inputs": { - "flake-parts": "flake-parts", - "nixpkgs": [ - "nixpkgs" - ], - "nuschtosSearch": "nuschtosSearch", - "systems": "systems_3" - }, - "locked": { - "lastModified": 1769049374, - "narHash": "sha256-h0Os2qqNyycDY1FyZgtbn28VF1ySP74/n0f+LDd8j+w=", - "owner": "nix-community", - "repo": "nixvim", - "rev": "b8f76bf5751835647538ef8784e4e6ee8deb8f95", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "nixos-25.11", - "repo": "nixvim", - "type": "github" - } - }, - "noctalia": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ], - "noctalia-qs": "noctalia-qs" - }, - "locked": { - "lastModified": 1777772763, - "narHash": "sha256-MIFrNTX+x42UdOiL9lWmwyyymh80/pxtU4afvEizZDk=", - "owner": "noctalia-dev", - "repo": "noctalia-shell", - "rev": "f0469d2d6f9b1ca873932dcef6583f9d6a2eee28", - "type": "github" - }, - "original": { - "owner": "noctalia-dev", - "repo": "noctalia-shell", - "type": "github" - } - }, - "noctalia-qs": { - "inputs": { - "nixpkgs": [ - "noctalia", - "nixpkgs" - ], - "systems": "systems_4", - "treefmt-nix": "treefmt-nix" - }, - "locked": { - "lastModified": 1777380063, - "narHash": "sha256-q5mWOEICcZzr+KnjIwDHV9EXiBxOC9cnBpxZbDAViU8=", - "owner": "noctalia-dev", - "repo": "noctalia-qs", - "rev": "8742a7a748c43bf44eb6862a8ebd3591ed71502d", - "type": "github" - }, - "original": { - "owner": "noctalia-dev", - "repo": "noctalia-qs", - "type": "github" - } - }, - "nur": { - "inputs": { - "flake-parts": [ - "stylix", - "flake-parts" - ], - "nixpkgs": [ - "stylix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1775228139, - "narHash": "sha256-ebbeHmg+V7w8050bwQOuhmQHoLOEOfqKzM1KgCTexK4=", - "owner": "nix-community", - "repo": "NUR", - "rev": "601971b9c89e0304561977f2c28fa25e73aa7132", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "NUR", - "type": "github" - } - }, - "nuschtosSearch": { - "inputs": { - "flake-utils": "flake-utils", - "ixx": "ixx", - "nixpkgs": [ - "nixvim", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1768249818, - "narHash": "sha256-ANfn5OqIxq3HONPIXZ6zuI5sLzX1sS+2qcf/Pa0kQEc=", - "owner": "NuschtOS", - "repo": "search", - "rev": "b6f77b88e9009bfde28e2130e218e5123dc66796", - "type": "github" - }, - "original": { - "owner": "NuschtOS", - "repo": "search", - "type": "github" - } - }, - "pre-commit": { - "inputs": { - "flake-compat": "flake-compat_2", - "gitignore": "gitignore", - "nixpkgs": [ - "lanzaboote", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1776796298, - "narHash": "sha256-PcRvlWayisPSjd0UcRQbhG8Oqw78AcPE6x872cPRHN8=", - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "rev": "3cfd774b0a530725a077e17354fbdb87ea1c4aad", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "type": "github" - } - }, - "quickshell": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1777706159, - "narHash": "sha256-TuD8hw9lkRCEb+6v93iB7HDvcmvH8R0qyD6wBmPGfv8=", - "owner": "outfoxxed", - "repo": "quickshell", - "rev": "8db8ca1fecfcce8def1f9265fa1742baa0e0c271", - "type": "github" - }, - "original": { - "owner": "outfoxxed", - "repo": "quickshell", - "type": "github" - } - }, - "root": { - "inputs": { - "ghostty": "ghostty", - "home-manager": "home-manager_2", - "lanzaboote": "lanzaboote", - "niri-flake": "niri-flake", - "nixos-hardware": "nixos-hardware", - "nixos-wsl": "nixos-wsl", - "nixpkgs": "nixpkgs_4", - "nixpkgs-unstable": "nixpkgs-unstable", - "nixvim": "nixvim", - "noctalia": "noctalia", - "quickshell": "quickshell", - "stylix": "stylix", - "vicinae": "vicinae", - "vicinae-extensions": "vicinae-extensions" - } - }, - "rust-overlay": { - "inputs": { - "nixpkgs": [ - "lanzaboote", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1777173302, - "narHash": "sha256-ERiu3cbxvnTDxiDcimRA7af7xp6x1y0sRyLGm28Qzz8=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "aaec8c50baeaf2f2ba653e8aae71778a2bbbac94", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, - "stylix": { - "inputs": { - "base16": "base16", - "base16-fish": "base16-fish", - "base16-helix": "base16-helix", - "base16-vim": "base16-vim", - "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_2", - "gnome-shell": "gnome-shell", - "nixpkgs": [ - "nixpkgs" - ], - "nur": "nur", - "systems": "systems_5", - "tinted-kitty": "tinted-kitty", - "tinted-schemes": "tinted-schemes", - "tinted-tmux": "tinted-tmux", - "tinted-zed": "tinted-zed" - }, - "locked": { - "lastModified": 1777580129, - "narHash": "sha256-6buSTzDtHYCJP1JNAIZCmgNcOs76oN03j+21CxdijVo=", - "owner": "nix-community", - "repo": "stylix", - "rev": "20ff51f523e2dd67e5f31a321719d30708c1b771", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "stylix", - "type": "github" - } - }, - "systems": { - "flake": false, - "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_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_4": { - "locked": { - "lastModified": 1689347949, - "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", - "owner": "nix-systems", - "repo": "default-linux", - "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default-linux", - "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" - } - }, - "tinted-kitty": { - "flake": false, - "locked": { - "lastModified": 1735730497, - "narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=", - "owner": "tinted-theming", - "repo": "tinted-kitty", - "rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "tinted-kitty", - "type": "github" - } - }, - "tinted-schemes": { - "flake": false, - "locked": { - "lastModified": 1772661346, - "narHash": "sha256-4eu3LqB9tPqe0Vaqxd4wkZiBbthLbpb7llcoE/p5HT0=", - "owner": "tinted-theming", - "repo": "schemes", - "rev": "13b5b0c299982bb361039601e2d72587d6846294", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "schemes", - "type": "github" - } - }, - "tinted-tmux": { - "flake": false, - "locked": { - "lastModified": 1772934010, - "narHash": "sha256-x+6+4UvaG+RBRQ6UaX+o6DjEg28u4eqhVRM9kpgJGjQ=", - "owner": "tinted-theming", - "repo": "tinted-tmux", - "rev": "c3529673a5ab6e1b6830f618c45d9ce1bcdd829d", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "tinted-tmux", - "type": "github" - } - }, - "tinted-zed": { - "flake": false, - "locked": { - "lastModified": 1772909925, - "narHash": "sha256-jx/5+pgYR0noHa3hk2esin18VMbnPSvWPL5bBjfTIAU=", - "owner": "tinted-theming", - "repo": "base16-zed", - "rev": "b4d3a1b3bcbd090937ef609a0a3b37237af974df", - "type": "github" - }, - "original": { - "owner": "tinted-theming", - "repo": "base16-zed", - "type": "github" - } - }, - "treefmt-nix": { - "inputs": { - "nixpkgs": [ - "noctalia", - "noctalia-qs", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1775636079, - "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "treefmt-nix", - "type": "github" - } - }, - "vicinae": { - "inputs": { - "nixpkgs": "nixpkgs_5", - "systems": "systems_6" - }, - "locked": { - "lastModified": 1777815457, - "narHash": "sha256-tOHe63NSWVFYBry/KSd5wwF9Khha5AXT5Dqx+Z6ICww=", - "owner": "vicinaehq", - "repo": "vicinae", - "rev": "5ab9b061690e9e8695ec62dc793f9a3bda2eb616", - "type": "github" - }, - "original": { - "owner": "vicinaehq", - "repo": "vicinae", - "type": "github" - } - }, - "vicinae-extensions": { - "inputs": { - "flake-compat": "flake-compat_4", - "nixpkgs": [ - "nixpkgs" - ], - "systems": "systems_7", - "vicinae": "vicinae_2" - }, - "locked": { - "lastModified": 1777597325, - "narHash": "sha256-LfqeVlMwclHJKsJu5jJoztjlaCeIasQsiv3P9+eKDNw=", - "owner": "vicinaehq", - "repo": "extensions", - "rev": "89cc49471c3e7119bfd36d68998cefe534bddab8", - "type": "github" - }, - "original": { - "owner": "vicinaehq", - "repo": "extensions", - "type": "github" - } - }, - "vicinae_2": { - "inputs": { - "nixpkgs": [ - "vicinae-extensions", - "nixpkgs" - ], - "systems": [ - "vicinae-extensions", - "systems" - ] - }, - "locked": { - "lastModified": 1768856963, - "narHash": "sha256-u5bWDuwk6oieTnvm1YjNotcYK8iJSddH5+S68+X4TSc=", - "owner": "vicinaehq", - "repo": "vicinae", - "rev": "934bc0ad47be6dbd6498a0dac655c4613fd0ab27", - "type": "github" - }, - "original": { - "owner": "vicinaehq", - "repo": "vicinae", - "type": "github" - } - }, - "xwayland-satellite-stable": { - "flake": false, - "locked": { - "lastModified": 1755491097, - "narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=", - "owner": "Supreeeme", - "repo": "xwayland-satellite", - "rev": "388d291e82ffbc73be18169d39470f340707edaa", - "type": "github" - }, - "original": { - "owner": "Supreeeme", - "ref": "v0.7", - "repo": "xwayland-satellite", - "type": "github" - } - }, - "xwayland-satellite-unstable": { - "flake": false, - "locked": { - "lastModified": 1773622265, - "narHash": "sha256-wToKwH7IgWdGLMSIWksEDs4eumR6UbbsuPQ42r0oTXQ=", - "owner": "Supreeeme", - "repo": "xwayland-satellite", - "rev": "a879e5e0896a326adc79c474bf457b8b99011027", - "type": "github" - }, - "original": { - "owner": "Supreeeme", - "repo": "xwayland-satellite", - "type": "github" - } - }, - "zig": { - "inputs": { - "flake-compat": [ - "ghostty", - "flake-compat" - ], - "nixpkgs": [ - "ghostty", - "nixpkgs" - ], - "systems": [ - "ghostty", - "systems" - ] - }, - "locked": { - "lastModified": 1776789209, - "narHash": "sha256-G6B7Q4TXn7MZ1mB+f9rymjsYF5PLWoSvmbxijb/99bw=", - "owner": "mitchellh", - "repo": "zig-overlay", - "rev": "14fe971844e841297ddd2ce9783d6892b467af39", - "type": "github" - }, - "original": { - "owner": "mitchellh", - "repo": "zig-overlay", - "type": "github" - } - }, - "zig_2": { - "inputs": { - "nixpkgs": [ - "ghostty", - "zon2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1777234348, - "narHash": "sha256-fKw44a4qbUuI5eTG8k0gPbqMV5TOrjYF35PBzsYgd2U=", - "ref": "refs/heads/main", - "rev": "2c781c0609ecda600ab98f98cca417bbd981bd53", - "revCount": 1677, - "type": "git", - "url": "https://codeberg.org/jcollie/zig-overlay.git" - }, - "original": { - "type": "git", - "url": "https://codeberg.org/jcollie/zig-overlay.git" - } - }, - "zon2nix": { - "inputs": { - "nixpkgs": [ - "ghostty", - "nixpkgs" - ], - "zig": "zig_2" - }, - "locked": { - "lastModified": 1777314365, - "narHash": "sha256-eLxQaD0wc96Neqkln8wHS0rNq/chPODifFkhwrwilEU=", - "owner": "jcollie", - "repo": "zon2nix", - "rev": "a5a1d412ad1ab6305511997bbc92b3a9dd6cb784", - "type": "github" - }, - "original": { - "owner": "jcollie", - "ref": "main", - "repo": "zon2nix", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/flake.nix b/flake.nix deleted file mode 100644 index 6aeb50f..0000000 --- a/flake.nix +++ /dev/null @@ -1,142 +0,0 @@ -{ - description = "moons nix configurations and development shells"; - - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; - nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - nixos-hardware.url = "github:NixOS/nixos-hardware/master"; - nixos-wsl.url = "github:nix-community/NixOS-WSL"; - home-manager = { - url = "github:nix-community/home-manager/release-25.11"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - - vicinae.url = "github:vicinaehq/vicinae"; - vicinae-extensions = { - url = "github:vicinaehq/extensions"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - - ghostty.url = "github:ghostty-org/ghostty"; - niri-flake.url = "github:sodiboo/niri-flake"; - - quickshell = { - url = "github:outfoxxed/quickshell"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - noctalia = { - url = "github:noctalia-dev/noctalia-shell"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.quickshell.follows = "quickshell"; - }; - stylix = { - url = "github:nix-community/stylix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - lanzaboote = { - url = "github:nix-community/lanzaboote"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - - nixvim = { - url = "github:nix-community/nixvim/nixos-25.11"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - }; - - outputs = inputs @ { - self, - nixpkgs, - nixpkgs-unstable, - nixos-hardware, - home-manager, - ... - }: let - mkSystem = { - host, - system, - profile, - extraModules ? [], - }: - nixpkgs.lib.nixosSystem { - inherit system; - specialArgs = { - inherit inputs; - inherit host; - inherit profile; - }; - modules = - [ - ./overlays - ./modules/core - ./profiles/${profile}.nix - ./hosts/${host} - ] - ++ extraModules; - }; - in { - nixosConfigurations = { - x1g9 = mkSystem { - host = "x1g9"; - system = "x86_64-linux"; - profile = "laptop"; - extraModules = []; - }; - x1g13-wsl = mkSystem { - host = "x1g13-wsl"; - system = "x86_64-linux"; - profile = "cli"; - extraModules = []; - }; - x1g13 = mkSystem { - host = "x1g13"; - system = "x86_64-linux"; - profile = "laptop"; - extraModules = []; - }; - monitor = mkSystem { - host = "monitor"; - system = "x86_64-linux"; - profile = "cli-server"; - extraModules = []; - }; - dev-1 = mkSystem { - host = "dev-1"; - system = "x86_64-linux"; - profile = "cli-server"; - extraModules = []; - }; - service-1 = mkSystem { - host = "service-1"; - system = "x86_64-linux"; - profile = "cli-server"; - extraModules = []; - }; - ops = mkSystem { - host = "ops"; - system = "x86_64-linux"; - profile = "cli-server"; - extraModules = []; - }; - nix-test = mkSystem { - host = "nix-test"; - system = "x86_64-linux"; - profile = "cli-server"; - extraModules = []; - }; - }; - - devShells = { - x86_64-linux = let - pkgs = import nixpkgs { - system = "x86_64-linux"; - config.allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) ["ngrok"]; - }; - in { - next-web = import ./shells/next-web.nix {inherit pkgs;}; - jupyter = import ./shells/jupyter.nix {inherit pkgs;}; - rust = import ./shells/rust/default.nix {inherit pkgs;}; - }; - }; - }; -} diff --git a/hosts/dev-1/default.nix b/hosts/dev-1/default.nix deleted file mode 100644 index 1ad056a..0000000 --- a/hosts/dev-1/default.nix +++ /dev/null @@ -1,12 +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’). - -{ ... }: - -{ - imports = - [ - ./hardware-configuration.nix - ]; -} diff --git a/hosts/dev-1/hardware-configuration.nix b/hosts/dev-1/hardware-configuration.nix deleted file mode 100644 index 44e95bd..0000000 --- a/hosts/dev-1/hardware-configuration.nix +++ /dev/null @@ -1,37 +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 + "/profiles/qemu-guest.nix") - ]; - - boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/53d2fe07-d84b-4cda-9428-45a3361d6b11"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/72E9-E469"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - swapDevices = [ ]; - - # 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.ens18.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; -} diff --git a/hosts/monitor/default.nix b/hosts/monitor/default.nix deleted file mode 100644 index 1ad056a..0000000 --- a/hosts/monitor/default.nix +++ /dev/null @@ -1,12 +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’). - -{ ... }: - -{ - imports = - [ - ./hardware-configuration.nix - ]; -} diff --git a/hosts/monitor/hardware-configuration.nix b/hosts/monitor/hardware-configuration.nix deleted file mode 100644 index 85b921e..0000000 --- a/hosts/monitor/hardware-configuration.nix +++ /dev/null @@ -1,37 +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 + "/profiles/qemu-guest.nix") - ]; - - boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/770de3b2-eb30-4ccd-b7a6-13e7655b1d5c"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/1308-E5E7"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; - - swapDevices = [ ]; - - # 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.ens18.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; -} diff --git a/hosts/nix-test/default.nix b/hosts/nix-test/default.nix deleted file mode 100644 index 1ad056a..0000000 --- a/hosts/nix-test/default.nix +++ /dev/null @@ -1,12 +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’). - -{ ... }: - -{ - imports = - [ - ./hardware-configuration.nix - ]; -} diff --git a/hosts/nix-test/hardware-configuration.nix b/hosts/nix-test/hardware-configuration.nix deleted file mode 100644 index 2fc6e47..0000000 --- a/hosts/nix-test/hardware-configuration.nix +++ /dev/null @@ -1,30 +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 + "/profiles/qemu-guest.nix") - ]; - - boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/8f0eaec6-5dc9-4821-aa8d-fb6809b5a5bf"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/201C-961B"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; - - swapDevices = [ ]; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; -} diff --git a/hosts/ops/default.nix b/hosts/ops/default.nix deleted file mode 100644 index 16e1728..0000000 --- a/hosts/ops/default.nix +++ /dev/null @@ -1,45 +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’). -{...}: { - imports = [ - ./hardware-configuration.nix - ]; - - services.qemuGuest.enable = true; - - networking = { - useDHCP = false; - - interfaces = { - ens18 = { - useDHCP = false; - ipv4.addresses = [ - { - address = "10.50.128.20"; - prefixLength = 24; - } - ]; - }; - - ens19 = { - useDHCP = false; - ipv4.addresses = [ - { - address = "10.50.7.101"; - prefixLength = 24; - } - ]; - }; - }; - - defaultGateway = { - address = "10.50.128.1"; - interface = "ens18"; - }; - - nameservers = [ - "1.1.1.1" - ]; - }; -} diff --git a/hosts/ops/hardware-configuration.nix b/hosts/ops/hardware-configuration.nix deleted file mode 100644 index d8c4f55..0000000 --- a/hosts/ops/hardware-configuration.nix +++ /dev/null @@ -1,30 +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 + "/profiles/qemu-guest.nix") - ]; - - boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/69fa2193-1e4f-438a-8898-5de8a3f36e5b"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/D09B-4277"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; - - swapDevices = [ ]; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; -} diff --git a/hosts/service-1/default.nix b/hosts/service-1/default.nix deleted file mode 100644 index 2133000..0000000 --- a/hosts/service-1/default.nix +++ /dev/null @@ -1,43 +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’). - -{ ... }: - -{ - imports = [ - ./hardware-configuration.nix - ]; - - fileSystems."/mnt/immich-nfs" = { - device = "unas.moons14.com:/var/nfs/shared/immich"; - fsType = "nfs"; - options = [ - "nfsvers=3" - "hard" - "timeo=600" - "retrans=2" - "noatime" - "_netdev" - "nofail" - "x-systemd.requires=network-online.target" - "x-systemd.after=network-online.target" - ]; - }; - - fileSystems."/mnt/cloudreve-nfs" = { - device = "unas.moons14.com:/var/nfs/shared/cloudreve"; - fsType = "nfs"; - options = [ - "nfsvers=3" - "hard" - "timeo=600" - "retrans=2" - "noatime" - "_netdev" - "nofail" - "x-systemd.requires=network-online.target" - "x-systemd.after=network-online.target" - ]; - }; -} diff --git a/hosts/service-1/hardware-configuration.nix b/hosts/service-1/hardware-configuration.nix deleted file mode 100644 index 2fd7fcf..0000000 --- a/hosts/service-1/hardware-configuration.nix +++ /dev/null @@ -1,37 +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 + "/profiles/qemu-guest.nix") - ]; - - boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/d9f05715-e68a-4d69-bf46-bd903b0782f0"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/1772-FC70"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; - - swapDevices = [ ]; - - # 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.ens18.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; -} diff --git a/hosts/x1g13-wsl/default.nix b/hosts/x1g13-wsl/default.nix deleted file mode 100644 index 04bfa4c..0000000 --- a/hosts/x1g13-wsl/default.nix +++ /dev/null @@ -1,18 +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’). - -{ lib, inputs, ... }: - -{ - imports = - [ - inputs.nixos-wsl.nixosModules.wsl - ]; - - wsl.enable = true; - wsl.defaultUser = "moons"; - - boot.loader.systemd-boot.enable = lib.mkForce false; - boot.loader.grub.enable = lib.mkForce false; -} diff --git a/hosts/x1g13/default.nix b/hosts/x1g13/default.nix deleted file mode 100644 index abb7787..0000000 --- a/hosts/x1g13/default.nix +++ /dev/null @@ -1,15 +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’). - -{ inputs, ... }: - -{ - imports = - [ - inputs.nixos-hardware.nixosModules.lenovo-thinkpad-x1-13th-gen - ./../../modules/drivers/intel-drivers.nix - ./../../modules/core/secure-boot.nix - ./hardware-configuration.nix - ]; -} diff --git a/hosts/x1g13/hardware-configuration.nix b/hosts/x1g13/hardware-configuration.nix deleted file mode 100644 index 44222de..0000000 --- a/hosts/x1g13/hardware-configuration.nix +++ /dev/null @@ -1,38 +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/29b4b68d-c25e-48b1-beb3-30f63ac2f491"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/EA69-77EE"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; - - swapDevices = [ ]; - - # 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.wlp0s20f3.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/x1g9/default.nix b/hosts/x1g9/default.nix deleted file mode 100644 index 73221ad..0000000 --- a/hosts/x1g9/default.nix +++ /dev/null @@ -1,14 +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’). - -{ inputs, ... }: - -{ - imports = - [ - inputs.nixos-hardware.nixosModules.lenovo-thinkpad-x1-9th-gen - ./../../modules/drivers/intel-drivers.nix - ./hardware-configuration.nix - ]; -} diff --git a/hosts/x1g9/hardware-configuration.nix b/hosts/x1g9/hardware-configuration.nix deleted file mode 100644 index 7aa4105..0000000 --- a/hosts/x1g9/hardware-configuration.nix +++ /dev/null @@ -1,38 +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 = [ ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/16b29578-6836-414b-a5e1-863bc21c5fc3"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/209A-C8C9"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; - - swapDevices = [ ]; - - # 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.wlp0s20f3.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/images/avatar.jpg b/images/avatar.jpg deleted file mode 100644 index 98cde4eba9e2a9d294575e39075034e00329854c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42497 zcmex=T=N7XVFfioi zl@tZJJ1Im&Mkz2LfyCtE0>^*=A0#0(=C^Ag(-{~p>w?TelO)9DPDw3JW?*3CU|?Xd zNG>QUVPIf%U|?YID=#Sku_rJvFo+~)B&IMhFfL(WV9+Uwh>T)jV7velPlB+YfY|8} z_74!dC?v?4fq{vKfq_9G9m3WDv6CQdkY5y%Gm3H<7?^Sx7#LJ?b4rt;4rOFuVBks3 z3k_yqV2}ahVum0FcLpa01%@PsQie>19EK7GU4~4CJO&0F`i#K({21~X6c~~j@)-&k zDjA9xG8xhtG8jr2bQlyEN*Rh7QW+E&(in;uQW;Viau_N>_9Ma`5vIjy#vt<;7#MlH z7#LU||NsA4i-CcCHUq=o_W%EXFZ%!g?_vf9<{JzQ2c{tO=TBi^uz1J7z&rsVrZSg- zfxnr7VcR~0Skh7khV2s=7$oi$Bo-xt+`z!hz`($imd3#FX*mM}ZzKbQ@C612u4qc- zA>qxy05+dt@pT4v=w{*ur9*?l~Af6#v8JjKahxToG*e7^*u976thmhSm{&TOkQ zl2Lm{hJi%X4*A)Am`sj*pU^`tq~jis>QJ5x6KY;n-^wZNxzk_|E!_) zvTN4zbJV}AKewr_^!(dhwvQIQ{ihXlWvAuUWyh^6rd(NQpr+E<*zfdWpF!;2yn6HR z=kk}|;>lxRV6fy|d7~nKmt3Lhx+oQwW0QsQUQfN(@4fk4-ro32%i}}08iGndiJHr+ z`_GoW+k0}^!fk!E)%y>8^YIQfRPo{G^8Fqg_n#s3oeu<9hdcXE$e)3cX*80@8 zf)fl3hrT?Is5l-ac|vN{(oYjFOg}xVWNYs#GrQ`n?$dcn!JiV942#aLoco{Q^Ye%& zzfMQ=oj71AcW!p={^ysXpO{!%mF7*mzx8kE%U?D6%JiXt1|r{81VfBJDe{Wjy|(5<=i>TbQ-EoN64AAYpYMrU9C#gC7dab})T z`MCVjMOGO4(={$Azts3*VPrh1#pFE2lxyXlVO z`tujv6xSS%KUjY6M|4#jU)cc$#zXm4x#4g7k8QH7Tzc>Lq4LXLgu}Po4lv9N|26fc zY4bv}>FyVQnp@ATt^9lMlaVt|%rdie<@{&wFWM=0X!{wnnb$0TW|r8zo^$tu=C|E^ zj_!L`-27#BBC|2pct`vB*h{{p>bIArOJCg9EHIDP-lwkNLS<1}t@Sj!kfP+`cT*+K z^SumVfVqg$Yv<(7RbkN#(H|Fk#x(!}z!588u+k8jw1Dfh0hr|G@wb>i#FY*+J3 zMQmGF=xgO}u&rcm+0!j{Pc4e;4oNT>AUxA|I}_f`+Rcgy!xZ77v8+C6I(B9kk2tmO{L5A@jS=6*SkL5@P4CLRQTY) zli2*Juigl1Ja=jFc=-Jn>wkudbwZgM3=GW8-}_kST9xivo^ve4jPbmcyxzGP+j!mX z?^RYlY;C#Ya$abkZeDWc(z{msJbbn)Ok%Y8z2L&?ufNcrOgyRt>R4V4uvo+m%F&dfVIdy>I(_53vUjFnDzBGfuZbdlP8`GXH!zb6s~yHy}y&Zo}D_g z{_6V5n+vycS0*j@Kl@fCH)0}ZlVi*?F?sG?`R-A%z56|PKXrOuD?H_Tzi;x@+^T;z z(>}NyV0N7N@Fn~5&D^o8_xbUa3+?{A{KY>0Wjp`&fBw7N`fH1ikwTgSYyGrxEoMtW z=gr}7a+gQP9lOoVTD|th;}hp58mf5M%<;DhuUfD1I@bC1^U5sW{|u{7_s3uFDErTF zKH}2zw}v-ACeBea`SpJ3&K%29yQ|Cj^__M5+WmHX%=u;?^sA=!b5h~D)2C+~yZSVD zw{_62t6@tW?>%mc$;`iWEB4xKm!8Jvz`dvAYE$oVOq|HGJks^tUZbU_H|u1!Z`>60 z?)CnyH_T1Ht-iT$;^SwlcV4=2@A}WvTZ%d?uUlB{3$!!Ic$@p^^cBl}y{)tQuFEa@ zH~X2idT)u8=$!A}+n@ViEHzks&m`wlw7cA%lF}_xR$IrG+?==Oa*4Feywdo!@0MRT zS-XudI=bup%O4l3F1~sDIOy2D(5|at=dJFC->tg)qnZ*w=u5HU=73^&-%UwE+l-0nw3f6h%m)^}3o z`qIrmFITSL75AWc{=B|PT5RlohHFop@^xxn_wvWa*k!Lan_acKn<{+zOG4;R|Dfk( zKkEv!H+=~K{=0wT>*IEpjy?Z;_49G5_aEx^<(>?ExmPgEzJDXA z#mqRb-s$}^d%bt|u9dmsJU4THo}Cx(cw*7x8;dW*{EOJX^0x28`x)Q<&31Qs`D>QB z^~F-VRB;{cY17ZUpRYBURg+&*d}puP?!fmpza`&V#YOL5dGlJ_&hG_X$6mL6H``qJ zZ@+>h8@OVVtf~F+3V#`pZGg5Tm8-LT(TuQuH6ZpG<8rmG&V64Q&KTfbqrAZe~W>Gk&%IsmFai6mZ@xJ#NC>>^}d_e z7HthY`JZ7@>C%cQV`I@-v(Sbn(x|kBz;f3l1nq* z!n?I_|Bqr%8N-`T4>~S-w{Fc=*`h4N2kGsfJy~UcP1{)_d-iDbs!azvF3a4M{Jy?A zIrUhKjg?9_cjf{vjXyQPoBwsOuJd}W{91L{sTO^Y6)V4o&lD)#WpmrQgr{`wn=Hd! z(;^;u@>gHKecL{8x=xU3;MqHiBH0#*{N}CqKfTg<6L)~z^-NJwvn}o2OzS!xtbUuT zv2^)%zDxSsb!M=JhMgIMU>fiA}6T+ANES&%BMBmrQb%$Y9Is;}ce%rIhuw zWk%|yKNA+uI%ni4YJN9LV}oAG%~$!I?#w;+Mn%9(3D^1kvm+|5DOcWE zaqY=WmNvU(Ynzt0ni@78nsm42Xr05XGDo|87IBllEV*37St|R7dqpneblQQ854%S)a`)GY zS1viCu;J^vx4(1VDDiIn`puG2RMhdB>$gpNHy(?56`Y%`vcA@JHcx)-7NKx?zml@h zzc=r8FW1@3Cc87)zyoA^ExugQsTvvThI1BI2}^#+rC>>IAU%8k*sRt%`uJ#9WJ)sd+>!% z#;ezFQusED=Tk3xZjG@yfA?H=bWP24vBgJjuzyJLi>_IAC;dWPn~N*=%>?_<*|xpa zyiHlvjOvL7WoM;RyTx_ChTpy+a^T>i-ly_AQ``)`gnqhr%W!S7PWr2p8=9@kH?BDL ze$K5gj}Np!HjdFB_! z=p?ePxwJNEy4W^vgWX)+Yx#bv*6&+$yyvy!tr!i59fIAg)6P!J{S^D|)VGBRrh6n8 zr@opfEw9|ly5{X>E3S{M9eZXy)|sfbk)fD@amy+1~KPMvq^A+A|#G~6Y#Z$t`m*@&@3rbg}F(zM1)L2d75|4D+v>M}hJ z>ShIchR;pe_b+Zr-ncr!tL5VMt?3eG{?j%cm~^OLQhlD>oi4r=5}LJD`2nXM8x;I5 zEVHZ6kzaoB^VIw0d8Q#cscmkx1%do*Ir%|V0z$ji7oBYI(9`MKtIaN(ws+4CsdWO* z)+!sNB-)zGl`J=IoVe-PCT>G#jX!zk_MG4sPm(;(_BHR3=EoXo<+l@iC)vofbC+xX zQ=OVW#rH?WjC;3QFBz_TyZ_`v>CmmLw|o>P9u~cLX6?Ge43*2@7f)!7U*?`WY5IgC zwz|BjD@6}qNnR>#BIwQ%`|axCNZ$Vpsy#O@M{{TLT{55MyGr)+R~|ouOJ}dId%LN) zVc*e(Z??Ibeg2)?`@ZDz`_v@alCbbF^P)?S1N)b`^>G(tn2Xyg+e-s{&uNw;v1SIh8a2l#c!S)!bbVN;9YX>#g3nxo-+XE1PUrr@E9+ z)HU({4BmIV7k+s9NX$A!Z&t^Z4^PbAtZZ6wErRiOac@V~t?M_!UroGo)tX@s_jUgp zsjE4gOa@LFU z{waXXY zz4`r`#Qn$jR9?Ss@SoxF-kYC3EI%IH>UX&2#I=k$g=bR#IDSZZ7iuI{vWVAW>el6# zZEgO>z4`rG0%TFnp8SpckN4hNX#FQD?bFp9_A_TwJ*|g1T^DQ` z{Ok9F_}j(b)2#12i@t6=AvP`k*vI%U@6DfxDSzq@jo*1+C?qZLaj1)D?rP=mCsW>D z{~8*$_~gpF3)gCQl()X~xY<`Y?{?avoo8LLOJ}YB&tToNy}|a|yC-XoMjzT9+I?W} z>+prMer!7Jx!R>ATf5w~@A$zf4(9Q!>n^W&eU?0Q=_enYOpDOiXz{~&Yq90& z+xGRkW>#~wtKaXN+VfXCVE?4t_c0HP0+%H+|EP7!`jYw6PWCV~wtiBr-1p&n)NR9+(k30NHf&xlc5k8Qv2$!C58j`!o8DWiogmyWJN@LLH@nWQ zu(;=OFP_iSpE9g}YKRLO0fcXh&N>sYr^ z(+N9UpVn?mKPFNd_Tufj*=NJMJdel*M|k;e$$iqFAE@M_z<=Xr=&`WXYu~(#4=;^R zn8$QfVw-Q*RolqUFy)3->)8)xPY7>lota**bHO<>wC(yXudiJpfsNHySM<8CGF`AU zu6nA}t=6FT*1EY7b{k)DzFD&W*zpaQ(>E-eyVRj##*{s3&)l-MOcgrX=e|8ZQ27zB z_0QL)Dmhczf=q8UU3$0NG4+wX)2(pPX9f=rJAZl@FipfOD!-$2;`9&Q%2aMM);VG1Q!Sn%JwxM}Yi5U~iIi`6LH(OZ?)hvI`Ma0h zw&hO?Q~f@T={Pq{(5Hx*5;*hi?26uJLADx#X(gKm7qck5xgx97E|C9Xc}v@$_0Lixy>NxLp*|M<0~d0WZV+9N^B*6N&)JK?lY z%P6gyr3N zOpLW^7B#=&hn?g0Q|pCx>BL^zksx#Mh-7STP412jSsHKO%lme>$v2*LH&^0k(Oxt;PIVE0NF0#;7?8d9c=a+c%m|8@hOWPV6?CDs$-0MV)1uH+N;Z$!E zufwXX|K8;BB)`?!Z4@vsH=(U0TD4m^pg%Ejp=N8hZ+6t(O`I~0rH4%n%1-1yS|zen zDLm-tr8Q@Af-JONuJuig(-8QT9CfT>VVg$ent4r*Pmh19SnhIlckQ&q2PzdFiC-=q zUXygiQL3wJ_N{vza!Z`wo#a{)_}gRZ2FF&8$GY40oNN~k*>W^y^1Q{7nVDIq{w9@V zdH*}~SwiBf+mjOS>_pp%@uC|boHR%JSj#eaAL2eKDM7GU?h)?u66KN12S? z=H$*}H8J@9#Kp>UReRH{Wrwxa%DYBK-J9&$b-?cCjCSA3{zva4g`dn%*C{-8W=B-Q zfi)`&15Z2b3EFn0wsgJ1r8tqJeZN$%ls&Ljo@7}zwP%{~s%27+TB&nCy2}{8e3z4H zy29{P_Ot9q(^@nR$9SrBt=$xS+o$Bb*o=s+Io7XFFWJy{ZvWeR&o;LD{C<7K#pP~Y zrh?b)9^;^B|o5b&SHb$(nKKlO%gOMNuBQp~l0~;eV6Fa!K2pVB$5o8q* zQcyG$Rx&Vh40IAvPBd;5HF0nbN-6|*@0b}G?HRvxH@Gcqep^ z`j@5;4?Vu1!dSGrkXe1=+?*?n0OznIo;e#6R{*UlKN{=2+B zcdAgwjF{kiac|wVxOn4tDkTdhe0i*SmQQAlTl*oa+t+dnGp~s19LhMn`Dpr;_dGSJ z?UyRfU3u4(TvWZ!Si0on3^Rwj-V)V0p{a(A{~3-|#Qch1@aL)aVJWbouC9_(4=!|; z=v}zbBtqT(^@X=3bBufbq{jQGCUSI3%glOod4)!bkb#9xSghg8-={g-C#!|;%Srud ztG?@b21oa5CEW=Ro+>;{3iwg<>i2ohX>W9YMa-GC?DE&CJXMNW#ksSitTo@AG0k*{ z&dlA!c~{3zH{kwj8#7FJ6PCxg%wQ$EbqsdyI zE6<$~sk>=^$~MjHvXg48+X52kFrPz8wFK7DR13K1+g|aGNdUiOSpS>bA zXYCc+s9*D?y!qO~eOFH1Yv~=Xvi8!O$7^eHE?xOGGye9r#IJV3U*`3%?6~s7=aRJs z_iU}#riTna*b3g)S|=znFRm}5*1cP{Ke_z>5e9v5(ZkBj%nTh_0#E(12!cx<10zRa zr9ctmL{_JuLS+Z%MsT^q1S)r4vQ0jetF!LIzNY+^jAwGfi>fQ-Umo^U*;BCiubtWV zyjjP#CoWD}vb6J0tNF{PyEm8SZB{D&5pw0=r~Cs!A?^a3N-mu~b})6~?5(GymhDg8 z802%}=t)2Q`Q#{|<=iMZ9cW)7AJXIR(&T-ZHkn#SfRp);? zEqr_`H}aFPdh(Xj9QEJkaQpV{P&~c!xwwT%%u22OU3z-Y7s|X#>I>WNaxq zJB8B<&bDiw*E6@ZSX})*t1q}_{c~5J_#GL^#?orr4&Cs#-Mcp6P|BSTbN%JwtV;65 zPA%=Q(U|9W;$5NAE4P%=jZ0J8av=HlMf0R!*1PkX`U38w>b*GlU;s4m7i*U+d|GHKG)gV(pQXY!7bxf``c3Td)9K*9d5jynj65qCo$q} z!y*1{CiOS!y&TIXUZ~#GJAK8|x%aiq#fz8qZm<2YvMl|f#Add}@B2Tqf0t41*zUWT zTUok^r_gby>lVgRx7$o1{U>g(J;hPjJV#0|B-HHYX@jqhT+5tJN6W0OX1%h-rEIyI zTleb6Q{BD3>w9k4Fkj26Sz^{*A}xEr`~h z{Denb<4JK|g@1DVZr3J}@=r^b>WD{9OBJbG&JkD_n9%dv@8u@n535v*_b!PR%Jp0M z=JpOy%2E6E@|N6b(J%iQ=1yELCy=pq`r_$jqJb*YHcDKczU6oLvhUxgTr=IHl(VEP zJzlE4cZN;LtncQnGM_AN=!ZU@wtj_Nz|8hjy4lBGRoUwXT>PoICY#CFpwg-OTWjEK z-KHG=qH1p5{xFVD=EBncie_qC?j*g4dR)|!o6qd(5;?nWsZHhF(gOi`-219jUH+WC z&-wVo+xY)S7<>d67@3$@*m*&V1Xw}C#*9qN41z2|iiQHh3QCTFiLA;7MovM6jT0Ac zJa|zgsp#Pc6=R1n$n?2JXn=1~|Np~+Us^2r? zKf{WP_V)x;-n9zM?N?LdIsSL`Ta#@UD!0!&D6}XrrsQ?xDuqW{TkH?#)ftA~O8)Bm zx$NAD^QE?7$M4TS`MH0e{WP75fAMpCEc$*-4q4^lv4cI$TFF18{73KULxEbMg2%os zxb~$paAoeA&*{oH>ffXu51V#j_Lap73X9sBJ>#vO9ONw7a&OsY_Z;7=|02%j+LnDV zGIzXp!0K{JzW1vT#-5~c{LRIOLZxeU) zyq>E63>6j4*R<_k&6&1OD=F)I*zFzG$MamaxTY0{u6FF-ylYAHoSTp4t>C@PuxR(1 zIft(=Qq%hrnX4}E@l56Jr9}TA5m#BUQ%}^d99zPDhGmHdk8q)btDE$`m-ksi<%BLC zeb*DK%ObnT#UaS&;ECyyRg1QseI44_|Caasf+Gi1nZ0ra)mwwt#0s+ruIICfv$z<$ z^hzz87u)0QDM>M&(e}Gy@1II4DLt9ob8E-pkF3AESLSY9a(q)>lGx?6lYLfu6)e3? zub#Qc8*qCgLzqIjgL}SD`U>7z$>MH~+g_{rBx`nSes|pR^~lUzjoZsv!(I1G}4yoY1xAxprKm++|<3+fICQmn+Ony7OH9l6KsEi>MisK8xOMSaK() zJ?g@e@BNDYhUzMw6osZ&k&tWUi=(NffWt>wv|?svH^>|2;!8eGyvSMC_n>fVjQfML!o?wCZ%>swRhiECHuu7srCPVT%;tBgu(UsXtvPK< z=@iZYuS}rQgzBz35;t|(sur((npM+ZAJkkP9I3{9Mr#v)(y_&yOD>*m`?yp+ocp&`qtVgq z)V~kEbQaDDmyC;*Vf3#4^!N7eghf4E27)vqRM6#Vns_(@pCPo-dF0 zQJQe-(CvsBHj;N%No})nf7x|q4&A~ovoT?Hm{ld5GJS(P9 zb-+2pOGuAXi1`ES^4s1W=B*sTx2LWD5>mq>WoyYD;M-P{a-eW&>+*;P+}RsGg|0ZX zBILBjtB{_bT-PriOqv;fYp&$J7uV%(eK=?1`Qxd$Y=l$kjBi<7V%iZ*6{i}$y^{YD zRO7#dZC0-CLUUCmhdSXp-*AVsrRM!p(ra(63wWewY#e5B!iLRu0 zu2T0ZEiK>+iZgOfN|RY~$zt-XwuK8VgC6h7b6=Cpx$1(EwoS+z!LXj5&&LX5QtKqv zhI0hxE#%4!-{v~;ZHcM22+!YV{{p*BY!S;;=Xs`f$6YE>f6g>}7pr4yIzz>|nuQvSx(m%zH3j!BRmg2< zci8sGqS#}}y2Z&p%Qy61NK^et~b zeq57(!Srb9%sHIQo{|<%yIu!QlAg2L*<@C$#1+=is|PN=IB@In)P9G58{R$Fxx3H& znccQ0Q?wqla_vdjc0**B%HiOPC+sG!yz=q*yr|3!xmSPsubpt3wsOzC^3|8ma8b+*yhUW--p+{Y1$gW5*{9KwOuC9_pT+Y zmx4-^=SAVXQuV+of3w?exQlLS>1#Z&tmD$=AZLZfa*MCgH+lEF&C@HrHNUEE>*12N zP!o%pJ+od)zI=ZuU`wlNm_VYQN!rav!pjp|_S`+bDI%MSGh_*?^$s6@`H(t93EZ{6PR5>`~_{F^Fb?v z{+m78mPz@73$ofeA8j&hU-j;1f!?K@^_pg;t6i*j>7BW9*3l{?-#+T0FN5KUa~W^1 zvKPHnTM@N=*PW?Zzb;RWC=7qx8dAQ-YiG>mb>gl|xmL~%XIty8E3$C8XpbX9xKS~ZneQm-g*JQ#_C9tx`W7x#w&2b-qhy-)lK9sCj<#z@kQ%^Uhf-W)@9d zayTUH$J%AV*VjDwyV6aF<^84$l^50dZ$)i9xc=TrjmwLdE8mv#zol`=`}@SN&*jc- zo_F_l@RY~w)2zQZZ(&zgcWn-8KYf^c%4DM(p^0`GyH6`zwSGKv9xihDhdRAmSQIDy+SZVoMC_|R>`t`3hq8bgXOF#{jK>PbXBD2<+JWAc@ zB=DJK+S#>}Px(!m;j7x5xF^%|>LkC`=oaRqahY9jdSANju9XVrjN-Yp&~VCK-PNzz z-TmgT-OxVE*y)nU*5OM&->Jt z?DYACV#q45S6eJjUtl*iXp?ks&Jbc&Sn42<&&DL}6)>^DV}f8;)lu$%ja5FH(}PWl zE-p-tXt|_udQI~!zQwH>;uF(cb}kE8(x}$7%#Qi%-6_ki9u1h-dg0EDV@sCBeX8rx zea&S!`9{#}Jw{RqnWp{Ma{`ZR9_$H^KNTPl!qj`H(krPk^!d&|Q+^%a7JThNZrC-O z)Gs+L+u9E2E_>1ut8i-T+2v7NoW2K5Hf7ODm>2Z*iP)vug&$8i?p|^ZBc6n3m$G6q1Vw^(Kf)>x)@8RvUK#^03p+I8# z<%~xIa>ZEr@1>{7`iW43-&y^`bg!s!|q zE4hyiZ}nEMd-Y`bHTBBt!fH-}Zi~(f%@*8{8Tsof@5Pxy&Ph(3RWlByF50_yLa2A3tGS9kTTDh0+dgsMmRi)1UMlE|{!*aKI$EZyb z4wuqC9rEFHRI11l8b zxLcf({&BpINq(u)jwfnY%N$)9*LYRF+8Q^{@U8T+N4LDzuSt8fS6S3GRkzpbyq|c4 zO2Z>AHM0(j_E`bf#Db+?_tYD={B$ts%9u7~p-*C_eI?iQ6ual9Gs`A2%3S2w^g7|s9iyS$HV-`auyo-ueAKzmjqsY=e_B?9;@c1 zSUEPCYoCwB3P}iV@n;O&;dCXRN8@|XHuoRQM+3n6A4>ga(6bL()PHIJm7@O)SLF)& zJAQx-WBSif_9DFFbIbWji{{(gvGv&LYb;jjOq=&rSV$_#>5a%#US91(n%Yc67sapj@y;l@m< ziO&*wi-m-5^7ih?j6WFP5?m)z`E={Qn7XB|@=NPieCWQ>()VJ~e+K*4VX=Zz*ZkAJ zc3FH+zm?v)Z$FR7#&`XKB7IYSe$dGK7|Xos`q_wHvno8Em$FzZ2X$=c-qkbBN2Db;~tgnty1pIi1&#roF7_fzT=4 zAZahvZT}ez#S#l^BQ)zdJ_>ribpLmUH8n=ReeMN8|33p~oS^5eB|m>XuxDT9ba~yby4@C@lNE(x?fS3m z{Nes>(Ym&)FU9x%RJ!Ff@zSkDt4*$jEMBywKb>Xi>aK~#d_khMp*mmYziv^9%W0Tc zaNysi{ws>v*PiTdU(fLKd+M!JuCVR?4F}Acj8y+KyegF4EF)caUMG7=!y=0XZidH2 zw)91>+EC(fJSfa>$+EzV(patj9rkmMc0^T)zh=1@rxk8kRrT-`^Qxc;g0Va2>2;QW zFxlFDN~}&M3_X%r^>R2 zvpkh4{BibAz}oY583C44*KGGH@)9b4?lO5pcGK@BzaZYs>RlGB7LS?&CK~y51h1GI ztYX5qR$$uElcH`63|sDUI$SWgcrhkQRb}u{iTHR;!uCGUqYBE1M`>}IY zw5&Iq)EuXBdg*%> zuMPG(d6YNWT2bR!XW}CJrJh0l;r|%|-T!gfDC}sGu8wOhIgt1yJl#3le#rq|+rZ0z zZ@mdW-?-8Gw z)8c~GOI`We1%2~hPl`(Nu8wOtzU^IW!NG0!jOS|vf2lO|ynZs?r`l9^X~>1C^{*1I zy?8adE2pdN_o4}BcAVsX^KWBpIJb|X*WX)*`sc8!G)>M>_LDNcbDgW&{gi~=o83Gc zLJAo(t$0KO!^7`{-rcC~HSNl~a!dQ!&l!Sl6i!}ic}PfNnbA_MC)XzJ=G|j{Yo+ei zlqbH+S8-+J=sqo;I%|H!Rxf9+3v-Ut{C>1m;c@7Sh#8z74BQO@XJ!27)v(VAd~w9n z)2;sK^8E^Zg;V&NMW*_BMHObg-XvEYxyo+0!F1UOFSp5ZryX)Duch@ob;^`p#N78H zd(ynQ6@?+wf?kI{bI?# z;uiivXnw?RSHWlJcR1};s9i1Q*Se(d_u?L95bPC|U(&GgB*SEOVfQ7vabG4Wzxm=e z`$uQ^5~(l8g-p$7KWqqFV6wG%d4A2K>moP5ABpr#Uz^~TG-+Kk=TnoZ*Q{18zkXg- z$FlKl1mDPLngH|e(go`}sqUA+44RX(;@XL!o( zg^BUZv&9d8RvuN{D*JVr2;aq!6NlF>=<4g#5v<`!oXnqQxjFFH?Y0>WYK2K}1Q(cda%qNudvQ9h3yB{LkCXzY5` z*WKc~;eNoB+FRC2*Ct<0Z(-9NM)^$=Hn;rJQPIKRU@r23N z{u8E$PZdmMdivb+@>Bkxxo4en)e~AT#fXU}bKKCA69{VVi{F*=wrkC{LgVd|8m}*7 z-ZC?2-uJeIR}Z*C7}*XfhRl*Jc8yRt^~K-urpV(3SL9dmS~Xnonw-6MxyLnyyjs=j zUu@s}b*dgryv!ds=kbZfYvd<3E&D$8&5o~bpJNu^IVU?|d8Y47C1Y zsmLSKbWU#Q0jV-K%_B4UE=u1Lsnb?UHe9^q#{4HNj9p#NE{nBDPnsWpck!7w{aH)G11l!S#;izG`l_})N4fAuxR~oF(^sE+A8s`} z^*-oq$oz=)-hoT?Lr=bGXi-sBdSFseDw)ZHfpYg^$JJJ+ob(;9nN?J%_3zU1 z_RlDLvU+(K>x7)(h4HigGYB8JQn_K{;)teQHh10D1$^yKtKG6Cr0z%Nj|Bp0d~=#^ z@!7u1@@-yn%r?`>-D*w4X9JOqeQ{g4t&PGy{a7K~UhesN*7l|8uMcz0TzGYf{rU;> zBmOSjgxwez7hQGJ>Q@b7Z4Oe%oAyFwCA;O8_0uYke^7m; zDN=s+TiWVNDihwRWS!4{dYAG0r5gom%f6{v@LrbK?or69)%$h1;KjM}w}h-5d*430 zeqlk;>)P9U9xh+T?8o({*!TE?7o8jSe5~S^aIJElH20)Ts^j8|0a4i=o*xawJ?@9E zo@85ed%;$te1%La_G>#br_asZ$+=^xmcwcvfrFu%b#FW0Hae#p>cw2*S$?VHK-IjU z-+RtEd_8D#aZVwZ1Md}2<6p*&o_8HnAI?>O)X9HH?5VjE~n2?9A~%3 zv?R}s%w_LZ%e3PC#rj|eQj92lFwx3`S&($?D8o^uT>Kd@b`$z7itFXSsB{dxzl{= zwu3i0mIs{E37b1-YL%0w#)dmvK8OBj+PXqjQ&{CitIipN+1nH<4={LeZ&Jzad1V~y z6enmfUGT%|YiegT{O|efeyF?enPIY@S8Z?6bB0w*j;7!BvU)8cdg_iAE+5>vk|Y`RQH#Rj0O#?bqGK8CT_wyxM+^ zE$>RrexA3Q_q3DVRx6&pu;h8V|I(;kdkwanP+RTwVaq?BHFsFfh;BCwIng}fu34Y4 z=Nk4`KIR^&p|cBo>O`eyx}EdR+Me|iIB=i)d2T65G*DfYw4 z=;X-XH=5=gZuOXE!RNZ_=k%AIzQT8%Zb{g*3K%zg{^ zZePHmG12%xLrl2rhVxqwOC7qWR{ezM_SMh!AC9uv7*yp3&D^sp>8X>@+~(gtQ+Lik zG+8M5W{3r=Qu-USL(=|yrmLPyFG)XV_xx#e0`R*PghPBov`JMlQd`qLWa(@pR6>}H7fuRNT! zGj#iP`S3*?Uo+~rbWRRTSkj|@b1kpKmHpy5e;ODVB-rBSXbY4+K6>9gy(*Ub)^b@5 zC*40WpS~Q*4Y$g8<$L(M`{|vsXElDkmOSn+{3boZIZ*J^?T3e293^G!PdBF4x4l=d zYE#(UA!}@KJbNpf(9!*pKMr3uD`?{Ck*wRka+B^F8@{g`mhqC$);?QmlQjL2#lAZX zF)5kJ?CN{_XT7oXFIb`Rfa!GpujRKM^p$0c#=hPA;pwG5$H_~w=4&jtJE!CJ@^3BE zUcTRb%W_xMYZdj`?sdDaG@sF`+_UYl?~y(JEic~uXXxe8SpBAQhV+xEaeH)E9iJYn z!Nj1zbnsu|+CS$?-M8@{*z})a<<^Mr!TK_m)=%e6opyWMCHV&uyc!2Yp02(+f8u-| zPto`|zTaQ2emQ+lv>|F%d?Lr3N#B;+Of6^M8pnJ5(V~K7-+u&s=Wk_Se>C7+9`l*& zS@P%l({&af{kvM1SEAHjzN#c@mdPyHez)w$LhHBao=X4zbArpX28q>Cht6)E|&FC>F^ zy9)D4wdwoo1bhl>ePZa6Z+&F1&U+6|ogEeipVX$Vw9hP+YOZN1I{0YA*VEVaBMw;4 z%FB-km;Leg)a=~lkHY>lOmx&{?2R;TI-P#FU-Oc3hWO`Ne~<48+Kpu!zQ1bz^wi|0 zO(WmQe%1xkj=MZN`KE9Y>lY8V?%nI3H0c-QY&9v@?&`6b<8HZJUu(&^tDDarTkI)0 z<74{s{KI#%kE`5U8fH^w#Mbopj8td9y!yV{?D?ygKVP<0)_J$Yi=W>&Ewk2bZ$5YB zWYNuQ@;gh`6{&u*TyU%5;Sq%!_6O(uXSlFjm8bB|e+K?2m&R<_nhM*@-EqtM`X6ka zT)#Cplc^?X_gb5I_H752%6@;npDRFfSKXdnFW(8JzsPoW-qHE;;epqI%VT`ZxsQjk zFY23Mf0BPI%hUYLN4?&8?2?t0-FP`_&W&|?d0F{C%8HDzMZ}nCS!h~^1WwH(Fo+~*t+BT>%-8uQbR&#<0%XL+ntIKR`ENTndAl&-_}+j=*}l^&Nl`i?L3Vz5HmJJo%aFZRwjVe#t3 zvxDc>?)UZfj+_3f+TxVzr&jY9t=lgY@rh{J*f1R6+I78t`I=L&{;7QtWo4)~Di(O~ zap&7(3qlrMXD=-JV|0tt=lt@9Yi1|A|8OodQ?Qw3QBt%lV42(6A3lknzDNFfC)pp) zt<8Dq=|{EFa~96(Yu?#txl9xe{Oz=s{Pa?ifpVT{nnN9!r zGMT+z)|2`YetgJZXj;|su75el(n;ObJoh6wt@oc5<5sZkyZu@&d9z*A)tjEL`x&Hl zOf^p}y_bFGnS5(=g4XF9rWayf?>ZszS+eq%l*7gCerJpC_d4aUHBUF67k6oMT2-K6 zOZ$~WE(yn<`m>#yInR8*cj6)2iwm2K+f=V;8gND4{W{%!P2-eJ(S~=AeoL6-8~jD~ z(!y&`b_&bZosH}KC2e=Mz)NJNWJ1c{-vxV=AFzFSqMXgTUHW^5GTVeHW%D|Vm;QM^ zYjfrHZzm1SzeYwCtSFFO=WeU*`O@OP*cAz#g$$Bgtk~;jUYWrd7vOwq`V5Qk3pTSR z#1RKA8W6E5>OaH9_#_h{-ih_MK5#WL@iy5q&6#On*0EZ>L~ z%zkt?$9tCJpG7~jEptG-0_-jpOo-2W>zFxbo98EseLYt|vjT#%KTX;6By@?{p|Zyg z42%gzD=#E$lMuKxv#xf7&B`+l=YP!0KeF7q$&k&vehXAt({ZfU;iyMIkk0f*AJy`FHV7H z@8ToodjFify(nbalF4aCvQGR5&n#GOo_jB|c_LGRU;eeN**bTwp1uD?v|V6_cb*x8VA5qS^kn(GpNxE3*{xxRh zKWi@Sad=i)(`s?K$+~y1@t0G}@?xS?Oe^o1oVh=t@=A?I=ic@evb7Way~VlZsx%%g z?%p_$FSIkydwzk|fz8u@e*5S%Y4fKy<|QTug7Wp>mR{kUdBY;@jmg&KXRG&2wh8u6 z^X2B)9ea1h)_sPh3g>r+X?~L4bY#zwM6T|<1r8EyY!=I97VY`5Nv_ZQVXtHH`Gh}G zFD3eepPXOn68h~!jqN#!8y&I#8E)MFS9P#*FaNr$4e#wmRM?)oZ*Ub_rJla{%IPao zhw@jQ%e)$TKc+WY5aJiuQH0nApju_DOV+fnKxOkAl@E zH!U-F9M{`Ya3JqY%aS*@uXnF!f3$eX)?YnNvq}%2Nc>dtoujyLo3os+@XSZI3vbEn z^_Wz!`r|nh=K~>uoppb^UbAn$#5rT0X1kSE)a9o$G%YsTxqN!*VBC`QYGZBatThf! z)mK`xxrB@Cq7HEU7FZ=0Q+m)|R8nclU+qn8%?<+cT@U5c9B1+gl`b;lS+Zb}U%BCT zKg-?sJ{4M-aK4bo>&CP{XG-D(uLZJ{u#RWG*Yef8W&Eh>6)N#_afF(G-L0?1f}RFzi%e^ot?2O zj^lmsPToK5J?u}|YOi1YYtMQ*wR;icimER8Dv`UV{r0?hhlK8w+;3di zF!{E_pRR1p*{v~k{QAe2nY6LIc0X(TxBb&`m493Q);C>v`62jK>DS+PMW;%6Of8=% z7n^x^@B9{HUUsH<)dY^|S-$VpmzbrW+`o8YQq&yboAT%Pw*x;KfUD0Wn&so?*WW<8 zzMmBPWId_UUT@hc1=lG%-jr&~nD4Lsx@OOLiNFqr;EMC>CH$M8Uw)HUr{~jB?NL!B zA0huGS83tDjPFfG-b^7LlQQC31td8phHl#ZQ)!Ay+Lbx~8CcIOdZ*tSFwJLgwd1Eh zRUX^yc@CcSZrT?pA$BTY(;eCT`*^o)hn+V}lq!z@Xj{-H z*~`=|aEE{TIt>nst!7|URS;;SF-{Ni4UEvv)9WhCkefdMxGtUpW z*GuW}?%s6st71WM%I9$=Q@T-`A^}R$V=6(X!m(eBy%h{yO|x4_zlNk!U-dy{mAs;soZy zSH9j}rarYcZC1Wfz%TR99#ghB+???)*U7l!?WQO54=L~mpLlv|Y2b5Czgted8}{-V zY5Zqcvh(x@M}~yUb?wuxnz2kh-1XN))2L`_>gFlQ(jiGgJ}qCBCe7IsA~1i)t(FZ6 zJgZr+hITgG4Owu&>#du5!}WRo+d>}5#P7ZRFJQW#QhndMSyv9%-Z^$=?z!S1KWUEZ z?%S;tRLhp_+5FUWhr*@6?^`oZKRfCq*^=cuSFPz+hliv2V-NCk8GO`#58F z$k`(o3OtXzb!7R_{PgXiHGwY}9!P{fnyfxmn&%Q*-u}vOS&lXLMbs1bY3!QAu03VX zDz@o%f%^0MV}fKK+`ZL!Xots##mw)n?6~#gY@4owd)o-ar4iDRG(U^GcoVF&R@>xBR)kNUJ>4_UEMVYbSSmup6%6XHmGDSk(Bo z_LlyqB^QqG{I#;WQ7-8A_N~Ed9y>kSRTS|wg6rX2?g>V==i8$an>hq78z1{x{;0bz z&+YiGGFFDz+$cw_X5KSJYZ#p@;%`>lE#Jc6a!T>evd032!LvVX zwk%zo-kj|v`nRP+09Q{haa|G z>@&2O@nvOy7MEq%$0J*o=Pj6daI#^^j}_T+GdTE@N{(Q)OV1h~ytnrGwMLC5N2}OVaUnaW>1kN$?w!MOFw=DQi{kS6 zXWgbced|bZv$;L>^QCpyC06`%ZY>b}eg0CGzM0_S>e~aSkz^QGsGUDFu-TcwA zWEtzL;{OblOO=(|k55#Ncp9})p!MVZsdl+Dedb2Q&vuKQ5?gAUq$O%RLv3+HsGj+h zg6e`5N1iEsI=?j~b;Fb|D~~^_3in%mYsNI4YAJ)}I3?xDw|bsmd+ua$O?P9D;)$6H z_BCvOx1xU4wwkRi9X#y%L0e~wJ6X9JBotqreRlf%bv(vj4a!%W8!y~6J9X(|t^Tn7 zvi}SmMJpG?oKCa)W4`o>vOYiW#}tzl&Xt0Hc5d7%!`XPi%wEWo_teg|&63ynog*cx zMf1brM0#hm^z-a4I5eTj$aK~bSW)BzIDz8M%J!?HxU6b+iE*jn9p7o9y>dI zUIzn%4*QSKvkodhnBz9x)AjDNhIU?_*Og7uyG1*kTV+mu^oo5JaFLg-mZj#(X*aWX z@?G2WpFbBh2`wuIL^5E&Qx?le7I)#ZCTcXK!}pZ;j(vSoN)wQ{>d6&li2ZE*uLD7~M`us+q0+OEyugL1L|W*y5Jc#g!!*v$+@>s+EO#rKh}oetpv9459nU z;XJx6?MgpZ-wQdLYo@yUEoa2J2Bp9CTdP*fFM02*^iHoO=5@rxC!1w%Uq8O<0ie7wW0aedGHef5hAh^{jKVo`c{E_brh znYaIpVaNM{Pc{@t5pZOg;K(Aq_~L3OHUUpj0Y?@vV#`i!SkL}uk*AA7p9;%5J!;cWbWhJ%kjya8*BR;xWcYxnF(SBvvi@ADQo ziikShGkLS;eeL)AwMC`d*L^s{o1kjVGjQM3QP7ntFw?)N0P|L=c>`?X)| zYtL>FKF1L#o^kDj%>EViwco#g`}S5~ zdH-g<6kU=TQ+8**#^-LHEL-fv*q%fP_E*37_Q z`gqgk*MENAF7aUeAi%(&qQE7>rS-Oc)#tOn4mj|F4%3S)U|@Y~6~6C3gOvYk1_p5k z7Y5}=3=I08H|XF0&k$^HBETTX=x4*gz`$Ws)?|^$Kl?H~N9j6!=Wc#M&|7ZC1*D3!$gYpv&2A<0;PWCbNZoNOP+?Yf^Z1~k&G?6>) z&o%KHshx*e1fnl__?kRd;0Rpx@nX%}3lG7ulJw_(rIGyaCnq-?6M;sO?16XR*ZpTG z+x@-v$w3!^M3#wxW)I%~XZZV{;XlLQ?~h+!V~I*k|9^x*Q;?B?iGi7o9ex-jBZHu# zp`(C8U}EFO!iftHUVQk$;G@HT(DVdoL#n_(hp01ezQ46+{4xKPnu8tB#{UehS&82L zoNbBjZ{uFRe`YA9J#T(M{M(|47m^!THBS{-?0LMy;L%fq!yD>8Pt7WnoOoc{lX;&u zD4R&FR-UN;ke%hn@0s26t{)1KYP4Dve7O1bOYOZAe>B&h%#!_h&q_|F+D$iGVqr>T z(}My7n|)<3=jZDz^P02a?Y37X$L;OkJl-a~Uw5j+zr{~l?;ZbP<;8Jm>&nMp?-%_L zpJpuL@VVCD>x{#-?C00~XYlxay2OwBL;Q?6F&~dVzL%uir)FO_X?3w}zww>t_xQYJ zA8;q_dhqqv?VisX^L|Q}rs}clevz#8OMI7YAkHhSzn=HBf4^PKzr+azcOA?0>SV0m zF8??;o_}Ub;&1zBJ!>kCUfS!n{N#?6>Cfi_P0LX zqO~+h^tf0$|MJV3CQF)RzCL-qZK}bMAN$#BXQaNj-#l%L15>A?Z+G;eYi&ou9K;1! zPo12te*4Jn^oe(BCd|}fJyyB8*lg>{$v1!fI&^H7b!hA10#TREEK4`%=^a~CY*U{o zog#h4aMlrV4Y&2qa$h$+$!vW8c4Ot-J;tm70l8@vLYw$9LZ8a!lvwL+IV_pdr(B*;VoJxCmOEMc%?q)fNay}wm;hfcg~w}Dq*d& z`e&Zros;!aW~yt6*S4KD=YAXaq2yc2yR`h7(s7y-4OTp5i22?2T$Ssyf9LGY>IJFa zSA}qC7aef-v-G>Xap#MF^WU7kk#hgJUy0!9a*3P>mZFA#wao>8oHz0=PP%3o_iD=l zy_EEIhPieDA6H*4Kk;Uhk-wbmcU$L;o0;CENiW~B`I+}d_vV%@{64A68&dKl+Kzfn zH%!!eDSEa{iaSE{a7E_j_6+VIbARJk#@cC~GmSV`G#1^OZXq_im`$^tCuvsS$EMl3 zF@tbMAsQBx&r)IxO-h73_Dwu*YVmz#y)_&r(o?mT-Vt@0 zyI)Y5yHx+{sYO+Gi-j(Q^XYRW&F*Zfdug2fc)8Z1`4TzR6Usk67F;c-Q`7$`Uix=i zAiHGZ83{7yu2_sY2SM}p-!((L9MzAgH>kZDK$;*WYC z72c{;C+DW)9LwBI2nC(*HnFIe^qq+x_(5y?%zN?_D@l&hce{ezg2ad z>GRBL>r;kD*S5qjyR}8;wftSRLfe8*r?j4LegAj4`_1P1^Rl(gVU|44CUU%b^q)b> zY3BstgDuB<*>C<`_Z?o!urf2V!ipJ220;PPG^j%2MuWnGjT0AM{P57>Be;|SZ9f(G zGI3$fh56U@jejnGm%V?+kFE&~bM}n7TKAhW&L$e&#k~%%O^oddFNMqQI=|RL&Z+FO(HgVH&!X4XJBTil zE!|ThoVDDb_kv*IodiEuBf;hSJn)*V zHho5!>7jet&(e8)GWq^92;aM*e$(q(ap}P<>nTyErUy5%DA_Uxy~x(E6x#TA%E_I_ zPCm9!G3z_pW4^7xwk4vE!!`71Y?beZ;O@JI(ce_LH$Mvh&^Ci1>_^0I@76tg>QhZh zY-3}^cK&$Acr9YLEZ5Al4%IHvFXh&)TzipA?#RL&GP29vuep@IDdjkMWo37s(zBLF z(e|4UpZk3A4R_-HY+l*2X&rM-&pi`mukYbyciX$-{euTDWp;(!2(P^7EWGq>(?5f~ z7N@z|lNbN2e&Eon+jI7E+?0r(mjbI=gX7vu{C++C)^^Tp-R{G=jv)pPQ{1Fw{yi&C z=@hBG7`mNd<3@gAt21>;B@=~XTwESm+bG?WE9EHol)(Td6+Au_pX98m$&F9%cYAqG?@OWzqv|Iw0_5Ca5Z=$Hy6OWid^0upk&Ri-uuF7 z>nqx`ub!8U(U@ha?VCLB`_`u>j~6RtRn7eDd?w~ttna;v>#n3coHNT7v^`W)fRTZT ziIJIw33SpkczdXzA_I8ofk5NLg$f%D4t{XB_z;rm7#SGt1r=-)PGd|IseGMt>WZP|C7%5W-vuPcyg8Fi~s8; z!3REkkL#Y4u4!_2J$Q-BI?3&bPrX2b?exaZ)u*~A_dI72{;+{boV)+>d-mW13ok`V zv=!Y9S!=y}@x8*9E&TUZOb}hShE=Sw`@!^Tjz9Nf>o2JvkeSBH5G8)PyU}5JVXzcp)Rr&5)I`Ds3P zZZi)qmrLP~e$D@Ex<*PlE1s@u&t7nn?mIVN~zNno$c&!@IL zpmQpjn3>Asid0@tu(v#S@kG}(lRe)~CGP335%SQ96P+x@`s1jEOO;Eyja%H`-47+j z7#ttU&fQ=rshzx~v^G2X*!R{+nsUoKl@}USPY{yo6x|xNf_qJ(d5{p>kxKjN^W85V z|DmifA;fp_grvy1DJ+FdyINxyxHn8*d(2qI$8E$C{ifu0xGJ7p=WK z+DBfPyX?Lz+brxHB>jQ=d-lH46EjR5l-_t>JlwXyi14g4QO@q-ROTS;+y`qjSm8Kl6P%M5XeZhD~m2=(Aa-xqM)RPiEOm1tre>C@-{7y=eQ1;7L+;ok`IS0TwH8HQQn<;xn8{m5 zf$dwsRi~nln{qgvl}f+VPwqe4Jvr^nNgMZ7vxEX7dCIzr-!9e@GDxvsAgR**Tq}|B zg7>^4gNuc`SSBoK;g~jaOE_EHi*IwZGSiMv5U62%-QzaF?Z|zzj1Y^Sa+CDmmHTrZ zReWyzm%OQ~(#*!pxwl@W;hPHcncokOc;?AJkgs@Cp(>l`VJqq+(5IRD{Js62-B**Z zTfA*>5Kwq2Bz(x?q^H3AearI}UTx->HbLdUe1myLN{xHDuLbR>*;p*(RCACsGhypw zdkcNJ8zrX=6_Xd|`|3?=J*Ky&BdX0{@|07mg&O_*C(L9TdKLaN96je#pvr&U$^XKn zhsVSmbk^M5_GxWLz`F?#SQ#>`QlD>M!hL?ux5E#=RIMwVYVq~>Eu+W(8Fn(xU(?fW zv8Mdxp2kV;9R-4?&B`Oy-&@@4uufZ5aDSod0x$imvvcn#Co1im*4rkkwopr9+O%`W zq}81HPfXLS|6m|EiDPP5gXQTujpr3*g%#=RSvE7gd1v+O$Ez7xy=gbT9lm(vxkUED z$7ZLFxiJ?W5PE7IpsYS4zDDI^gvt*dkLI(!lXv{Pam8)N`iZ}cT-1NWu>=(U6`u0& z?0<%=6Enn03+!w!N$fqzD!xhi^8~*7t-a!L&2fbvC#0R}JapsVhlG0;eDj;iFS@x( zaBpy8oZiD{wx%OQ)wxx-exc_&=b!Ff&88Xw4680qTC$VT?0Qm5m&u2jLNhcj%src4 zYi$@|`}ynZ$hse|nU)B>V6M1i$|rK;uzHS=Cd;a0jhr|8T;440kA1QDYT?6;Q=gS2 z%0%r+(psWX^1|VFACH#D;f?!qrl?>4vW(+D!)0mKGNaUqHyiw;jov&{`92};h~G`d zw186@Onasuw!GbVXj6bdMG-_vXSXyCW z^jo59hPg(Gik0K85-Gi9%T6l@i>#I9xtj9J|ATm%(G;byN3r}hrN=iPQc}GUKjFfP zceCFrO6v+;ye8ZzTtgBHh%t~e!=fh38?)KAb+@40aGY9WvE>M|cK83l% z!>H3?wkp%kbDQoyw3Jn5Zu-=`!MBEaW;@@c!+v+Z`F^zE?D#nM5TE?7rQH^POuE#qqRr?wDGrAdAgO>HE?9=6qaugI4aB=(3AZWe(Ju{!-iycLc zf>JJtmNJptGLtj8_qZ%~Z{78zf%)Kqf{Kut?S8J0_vq|V=GxKoD8*!H`om7%NyR-| z6b@Xp4okVvyYSVob=lRenRj$VF6v8KTyTv|Q*@c8bmqr_=hhMxr>^*IQnPN}$1|-@ zU72Ci+Sc#f3ri1Ay~6*Wf${3&T}`u1e#kL5ynJ_RUAA@F)Cug*EzbUGl?b?`mFSo= zQ8}665WhZ`h+@e>6@%;_nGzH4h*WETzVYnbvB0~WYMMTroBNO4nQ}4ZrFD;b!C?V4 zVds`N6MjFJ@Y~kM?9r?%wT=ELTOZgfFX3&)MALaw4h8&gnCc&=w2j6}@d`DieirjLkG3gP;u?8#Y~^lhGYFZQQjc;5JM+A@Ckx>;8%!*{y*E_^1Irq%SOwMF*4#QxTX zpd}AG%Eit^8+9-6vJU7hxAS6WNorAD$DF6;Yv@&=_GRbEr5Y3VPkH@fg2df-Io}@~ z+?&2l-r}~S#7VVml}XDC9&s!>+wr7PdDAQgg-C_!&cKPy!TmpvNzUm$tX#P7g8l(N z=Cu=FZVhD+jSGJCYwzWAZK;MHr)0G+t0}}x?B%`f`AKHw%f79R5j;kIb+=?y+Im@* z>|`wDXla=j#N41~d&I7PYWVW5<>-VK|y^@@_*tjt@s zDZGl^S@gF0xz!iXm@5W`&UbiEEN1-X%FM&=%5j--;S0ai07;enyYpFIw%sb@;@+B} zou{<@&i;t9ch?iuKekIx5TEiho>7}&r?%Wgr)68ta=xF+kufv%jB0_$B+H`JO&Z@= z_dbceA6Kiu;Sn&~N&Q>ZApyRXMr=V>o;Vx2?K$lf;5S#iTC+Lkvzu2h1J}CEU8`8u zxd*cF9aOupq~FpqL99sNK!B61pG3zM%dABHmbotlHRX>5cDXP+-<@4iCEQ#bByBc% z_U}Tao~hi6)tagnMHlV5wNX)Jj^XCEjaS^y72dYEr=NO!pLm4QtKTap$nb1<*wEyX zlc>2_Il=bmigE>a3k$o@1-WvKb`qZ@-YYXX2!*Md2jrPwOma=l7<-#Ihd4*C%;d;>NrIfr9ohnk){`aIA6Tk$xMTHJzRR*lK1?c# zeT%4e}k(^r)>JiW_byIp;?YSpb(r`E6T*s@GW z(b=O*dG3a13m6!09C?$F^kB+70WAid1A3AQAE#(GcH}s@DE~+hh+}-Y#3fMtl8(+> z!R==fIk<& zIQvAQTKOc8+5A-;lQ-rI&nxY|zRb<|;Ef62pZ<`zm|=YC{5H0x%Hu8NKdw3dRhQkR zk=MrKb-3APiO7Wxj!wmi0*W2w77O_PoZcF$wdRdhS1IEXH-Q7a+&vq&b^N|i>%8$* zzFC@rvRPE|f>)e#X0BA>jacIuv{GS%^<&YnMEC&uU1AZ3U`{le!knh#EG*u z_vm`qbJRzkUwrz3?91PY95bEvM!w>o-1WXfkjKAf(x-KCt1a(Y?El!7Q80}>6L6C8qGHR7HEY-G{D{lq*p#xf_cC90t(iD!W>bYi(OYGN01STeJH2vRSVV zCM5EFWxHK=twZ~I`lE>+?}UzSS>_YDiLH&7^}z(?ISZVGM6R#kl6(EJ%~;>Dq|xb7 z`u#{o0R>rx1#ka&crsXQ^yM(zYQx8L)2Zp^l8Hwalof|JlVv zJ;#%ReHR5kY?muuCNzzu&gJjS-^V0o%@At6p}ad?(C&uhce^>sp)5=x;@!5(6$B48 zF}x@{ux{otZKk67%RWXd2D4oJlfEC`x0HRc=M6DI<&ILW{|wScrmD0Y*fP;`acPl5 zh?-V<_<wL{|wS?vn$>R ze?PnUb4G&q`3(Ea?gM`g{b#5=FV|Oge~SP63nwNl6_yixdR(DjTv7c}dW}{2m$eTT zxCZ;_`rj*G^EvKECFkK)D<`HGh}T#<|4!JeD%Z!K#Gmu+(0uvF_b-{eo=|ptv!jjm zg+FOB*VZ4+x1Tx9*5OBeZ|5uSs`ZQY%lh9>oZIhwjA6lg@h!h3<{X;;eDY2|)A^RS ztATbD9mAHUvy#JE+zhJ8X4{j zR{Z)?C-ZAn;q%?B|7@S|{QS?b$LwqT`QW)GZ}s08wch@tck^6f#A1sJFXCTcXXxVn zaB2R&{POoNkNkZuS@`mpyhZQU^Ho3j`;-+nEHVCKRIRpO`eoTa`N!(+pB4%HXZY~5 zk^h|2jMcAN?Ca+|D@<9x;EKxRhyI%{oSM{MV0TR6okI1bqgN+CzIeT^c%RLaFUK~Q zwsP?A;`p5~Wy_xR7B8lMWWKs1@%HDf%g%{u@Fzbr_WmUP(Rhxk%cGJ7D-T{XNNGI0 zz~eiI{mcL>hUP!o&xNvb4={eVyw3Z)>HgHe+!vcRO4?t0IaA5>!YPXHWHE(9u&;J?P*Ie@GypsR6sqXJO{j)}T7tV)qPg;>Vr()Hl*#;5bEE`-_ z=dZW#etAqZQ=r`;;+?+v&za37F*P=iwg_64Sp528G<|2a%lw-!cA9_c{(WHnyEVnr z=Nh*QuZx#_-*H5so{@!`Ge;l?pb2NuP-4{?BsG|QGdqa8P}fLIn)(wV7#(Uq&01sUvA&# zg=Yko-~KUgQIZ;G_<@Ise60S?CqM3M`@kBnGNE<{pX2!j3ctQ2{bxv&oG|a)SE;(2 z-(Q}6_%bH0*kbB$zmv5o*90zKasK`yLUX^|{F<_l4ea?BnRnJ3UlG=D5!6ac=@c{V zSf_vQz{OjNojn=HLw=a-Ied&o@|Bun>D>C|I?@?Uwek_p36ZTO9b%m<+gcw=h8&u_ zwIe9dWBa4mAEtg%N!;l7;O~qBF6k5NGk-^(=c_o$GJz>aYWsgzKbK11S9r!!c5_I`qhp`s3Z6YUeq))5&Hh%` z`H!7X{8ahR@SMrrwsP~wI?MC3-`>Ky7bk=A2o)Y>y(zPx?q~SD=OiS{1KTpr6aR#7{eR) zr1b22vy|P#;mFE6vZ8^LPF~BmsZBH#m=W5cXO(HpExsuuUEq{(r)+#)NdE^3RV%HK z3})7@RgErvBI?{0$G62MY1c9~cMDwFu$a;Iy3`9UrI>wh_WfJXsI2B7epv2GLYvW= zw-JBSC-XkO^p{)twd|9SF9()M)vuSUohLP~bI<+XZ;t%(cdlS>*d!fQ+xT|sdZu~& z-@a9(Z<%>`;auKAk5!f&lZ|36)KO2U#aSt`e+pc+{@M%fB)vt|gE|!)2nSZ1RO(b*KIup}^=e{%m2kXrzEeAMr z%uMn%TzSG2SZ?mVs3!F#{#;aAQ|9fR-<`XCCw0j#jjv$Hu6yV8qu>O$aLa^4n~EIX z&Z%?MDL%%~+tz>v%&2qH& z@x#*sHb0#HZs1gltd5;~du@@Z6EA~FQY)uzQ~Y8H&V6BGlQ$Za_3-=eZt(h(Smg1h zH{dgmP4e6uwcJVS9j_!CD!anib9D%FS)=SFved(1jRxO;gY~{suxlSGXHN!LK z9QJ6+xtO$m!8*rNOg#rmPn0#l~Mor8lOXYoB8K;d9PWPk|d9{VVS2 zD`su}HvgQ)i6p@^#xa4$=qrwZ$BBR@(s$7CBoE&^*CzM=1 z#f5us++6cmw?gQbn8*VI!3+Nxlm)f>XYtM6^5o^srj@#q4|Qx^J|AY7q~>3dyHq@a z=gYevvu;buX!Ff>?7zfd%@!c!cw?*e`IkN15(?Aac`#p4+O+*O_ZcQx`9*^7Cx4#t zcKzF?b4kv*PwXomZt|GB@4d=BccGneM`DDzm@|1eBN7Uf#65}@OcvCL;n}c5?vJec zlEBdH=$HO(wgJ;aoGwMP%zfgsI>_lj&>4p6P5RSa_<~iK4!Rz65%KuY|J(302U7}r zBIBDw=`8{hlMXzZoSX9M7bk1ayQB7}=6FsybErXXf&0=@laqQm*=^qx;zgqqa=XHzZnIzaY&8y?3j0(eEy(jl=?2RYBx$IKY z=iA8Jc}n3^q3#v0+!z}smqR5EmQB5^K|8zhHNKr_lU}HPLw-$G_LA;*dX`&Vjx?Dn zsE5z{&(Q3=vA8wyZ(WhW<=->@GvsW{;qXeDdr~P&=!ftUMWO6Hoh1^B7?_qWFkA1# z<8JNr)|w|&@T#)l{8IPi{z^{Cc|TaDU0Wv2>=?{lKkdY(nJ$}8o!~WXR@IHqIZ$;$ z^-^r%6L)RllnFr^X;#TgLS2-T0@$`*R!p|8QaZw^v_Lko@248O%Y-d=9n}teh=^F= zV;=haTGdPq=4F;j5&cRrPgtfLzsswVCzyNAV-k<@cGGC#?c7}!zgKvrd6A!Ptv)qJPEqfa&5VL5475xHxOQO#3t=&|Ngh_+*|L~{z^KnRI1Yu{owXF zKB0#ZCwVt8_DvVw>Zac;DEgg8yM)nAKr7Yd+zJhcMXhff=IN!Y@J{vomDJMg@LuFy z@#C<>J2T(*tnhf6qj9+?dgj^n%4f2F2;S#9UdZv|$fCo!TNX`-Jaoi^H!)>ipi2Uu zKk-4~kCLq&ak9)J z9$k;-UViiQ(6l|vUS!;1@Oab1xTVu`=WgLMyes=YyqU%xsCYOh-iRlDLHum_Q&+2( z&e+1bsZdB%tTsjS!A{GUS9MYiy(S#^I3aDuqNtY-R>w06#&MG6PqHHGf(__daS zX{qJ}O{+$S6Zxx7EIqXGdK#zDrWkL}8*2sToT@nd+(F}fIs1?4+{IA=yMxj>XYEnt zXK`dcFiq`1&&A7DCC3cz`RLCP5ZD^ZbftC2k;4-XtXeLdKAFGsl9G6&!gm9CXRF2w z>?Z`C8nRBG%-)h_-F)Fdu7Tz+Cg$5V$D|KxbP7zWHf7(f@HMBx^YfzeFZmKauX1<2 z=KQpHie5vekXw_phoa&JX)pD&na>~0ND-JQHnIAs)Ott7EP+XroKzMvtXnU4(>Zo3 zYsA?T77w%&C!4UcCx3kYk%f`NeX^v+mQ{}uST@AxJFve@oVWHwcUX!H!xG^t{hPZs zHux|KPL%PUT>Gy=*hb={l2g7=IcI~fq(b-ANugG-^zH&0Fj*y)Nxenuj;bE)M@9U zee5;&KlYz9D^P5uz znrzX*uIhDi;}e}38CppJbKE}do~h}hp)Wp-wV=~iWri!CjAw!5FDHNQ#zWg1E^shd zv9lE(-)A2wJYQ1w^Ag!#g)Jw%rX`-!Ua{|5>w&}Otb6#crrux=Jn#KTBl~C52??W9 z+N>vn6@+#(tYaf6|bEV4cknB0NQwxsYIsLFRZTdUDphI_K6RH?_*1RqBQr}@qJ|p1uy2w9=>VeEiHJUKj68cR;TrX z8_n%&M59u4)+%%_F*fd-xzRwVtida^J7&Vx=5?VRFMMJdUfnR-BC7s`Oe#UtQc$iOFQ|^auPt zy^P*$5qzB&Zm{q;eA#lucDGeW-o|6<{}Q&c9QBf75RG-S@(l6XDC{*^n0pty(CH-( zvJ4E?>HBy#P7Rhw%$u*i%_Cix*Dg~0KIgUB4qtcudBXC^#a`R)e9rv9r$GrG95fzTu;N?P+FT{#J{h#{xthosWe}exH1- z=-JiO!$eLurhp7DQCXSBHTnelvo%Yc;E%6#?TP2WzAC{vbwXYhI6&D|&0 zJhx7M%)e&lgTo5%mY51{Wsl^pDBP^Nv7=_U&-`GY z*MbMw+=ZUc(U{Ir6UiBC<(2;GK$CgoW9>8P@3k$?nSbxw6=qYn;qba2?#r`mZBoNF z{eFBYei5UG?qb&`Jug{5Z3$ug&U$43o@zToC8xe)1xM{OrZlbyTG92i)kkkK+l&h- zeu5T%D!%l`)zM^xeEw>=VANcBaySBEHGX zm@cdfnD9#Ji`1UT#|kSp8**+>SXG+a#(rVeiJ1H(u8rH~x92?nP;3AHrot!~4S~@R z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7 mfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!82|3IPDlJtx-y diff --git a/modules/core/boot.nix b/modules/core/boot.nix deleted file mode 100644 index c0d7041..0000000 --- a/modules/core/boot.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ pkgs, ... }: -{ - boot.loader = { - systemd-boot.enable = true; - systemd-boot.configurationLimit = 8; - efi.canTouchEfiVariables = true; - }; - - boot.supportedFilesystems = [ "nfs" ]; - boot.kernelPackages = pkgs.linuxPackages_latest; -} \ No newline at end of file diff --git a/modules/core/ca/root_ca.crt b/modules/core/ca/root_ca.crt deleted file mode 100644 index 1e60529..0000000 --- a/modules/core/ca/root_ca.crt +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIBszCCAVqgAwIBAgIRAPCAxajuCEmnXKploQS+KAkwCgYIKoZIzj0EAwIwODEW -MBQGA1UEChMNTW9vbnMgSG9tZSBDQTEeMBwGA1UEAxMVTW9vbnMgSG9tZSBDQSBS -b290IENBMB4XDTI1MTIwNjE4MDgwN1oXDTM1MTIwNDE4MDgwN1owODEWMBQGA1UE -ChMNTW9vbnMgSG9tZSBDQTEeMBwGA1UEAxMVTW9vbnMgSG9tZSBDQSBSb290IENB -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDw2M0NQMju2zN5ZXwsYaTieWggId -XmRSXjOHW4/pBEI11xk1GkMFbeVmppr1cbcNmbB+fmxoFa+oKguhFDSsdaNFMEMw -DgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYEFGuC -UGL5CxdamFfBVC8xH306Wo6xMAoGCCqGSM49BAMCA0cAMEQCIBqWCNWBuwhWDYoi -fpqOqz2HSChOsKCIAgfTJlUUgSlSAiALekUJ+4M+L4/vP4GpkrSovuQ7JOMXV44+ -30Pcx4AoJg== ------END CERTIFICATE----- diff --git a/modules/core/cachix.nix b/modules/core/cachix.nix deleted file mode 100644 index a117257..0000000 --- a/modules/core/cachix.nix +++ /dev/null @@ -1,15 +0,0 @@ -{...}: { - nix.settings = { - extra-substituters = [ - "https://moons-dotfiles.cachix.org" - "https://noctalia.cachix.org" - "https://vicinae.cachix.org" - ]; - - extra-trusted-public-keys = [ - "moons-dotfiles.cachix.org-1:WHoroKiNScG2/dpxHHL1I0qVmvuQhJbEAP+DS2j9Rr0=" - "noctalia.cachix.org-1:pCOR47nnMEo5thcxNDtzWpOxNFQsBRglJzxWPp3dkU4=" - "vicinae.cachix.org-1:1kDrfienkGHPYbkpNj1mWTr7Fm1+zcenzgTizIcI3oc=" - ]; - }; -} diff --git a/modules/core/camera.nix b/modules/core/camera.nix deleted file mode 100644 index 9204cd6..0000000 --- a/modules/core/camera.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ pkgs, ... }: -{ - boot.kernelModules = [ "uvcvideo" ]; - - environment.systemPackages = with pkgs; [ - v4l-utils - (ffmpeg-full) - ]; - - services.pipewire = { - enable = true; - alsa.enable = true; - pulse.enable = true; - }; - security.rtkit.enable = true; - - xdg.portal = { - enable = true; - extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; - }; -} \ No newline at end of file diff --git a/modules/core/default.nix b/modules/core/default.nix deleted file mode 100644 index 196cbe6..0000000 --- a/modules/core/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{...}: { - imports = [ - ./boot.nix - ./cachix.nix - ./environment.nix - ./fonts.nix - ./gc.nix - ./hardware.nix - ./i18n.nix - ./network.nix - ./packages.nix - ./services.nix - ./ssh.nix - ./system.nix - ./user.nix - ./xserver.nix - ]; -} diff --git a/modules/core/environment.nix b/modules/core/environment.nix deleted file mode 100644 index 14f0ee7..0000000 --- a/modules/core/environment.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ ... }: -{ - environment.sessionVariables = { - ELECTRON_OZONE_PLATFORM_HINT = "wayland"; - QT_QPA_PLATFORM = "wayland;xcb"; - NIXOS_OZONE_WL = "1"; - }; - environment.variables.EDITOR = "nvim"; -} \ No newline at end of file diff --git a/modules/core/fingerprint.nix b/modules/core/fingerprint.nix deleted file mode 100644 index 10f0ea6..0000000 --- a/modules/core/fingerprint.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ ... }: -{ - services.fprintd.enable = true; - - # Add fingerprint command - # fprintd-enroll - # List fingerprints - # fprintd-list $USER - # Test fingerprint authentication - # fprintd-verify - - security.pam.services = { - login.fprintAuth = true; - - # sudo - sudo.fprintAuth = true; - - # greetd (tuigreet / ReGreet) - greetd.fprintAuth = true; - }; -} \ No newline at end of file diff --git a/modules/core/fonts.nix b/modules/core/fonts.nix deleted file mode 100644 index 466ceb4..0000000 --- a/modules/core/fonts.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ pkgs, ... }: -{ - fonts = { - packages = with pkgs; [ - noto-fonts - noto-fonts-cjk-sans - noto-fonts-color-emoji - terminus_font - cantarell-fonts - font-awesome - nerd-fonts.blex-mono - ]; - - fontDir.enable = true; - fontconfig = { - defaultFonts = { - serif = [ - "Noto Serif CJK JP" - "Noto Color Emoji" - ]; - sansSerif =[ - "Noto Sans CJK JP" - "Noto Clor Emoji" - ]; - emoji = ["Noto Color Emoji"]; - }; - }; - }; -} diff --git a/modules/core/gc.nix b/modules/core/gc.nix deleted file mode 100644 index 76bbd7f..0000000 --- a/modules/core/gc.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ ... }: -{ - nix.gc = { - automatic = true; - dates = "daily"; - options = "--delete-older-than 7d"; - }; - - nix.settings.auto-optimise-store = true; - nix.optimise.automatic = true; -} \ No newline at end of file diff --git a/modules/core/greetd.nix b/modules/core/greetd.nix deleted file mode 100644 index 09ca405..0000000 --- a/modules/core/greetd.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ pkgs, username, ... }: { - services.greetd = { - enable = true; - settings = { - default_session = { - user = "greeter"; - command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --cmd niri-session"; - }; - }; - }; -} diff --git a/modules/core/gui.nix b/modules/core/gui.nix deleted file mode 100644 index 4b0d337..0000000 --- a/modules/core/gui.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ pkgs, ... }: -{ - environment.systemPackages = with pkgs; [ - slack - insomnia - obsidian - ]; -} \ No newline at end of file diff --git a/modules/core/hardware.nix b/modules/core/hardware.nix deleted file mode 100644 index b5a337c..0000000 --- a/modules/core/hardware.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ pkgs, ... }: -{ - hardware = { - sane = { - enable = true; - extraBackends = [ pkgs.sane-airscan ]; - disabledDefaultBackends = [ "escl" ]; - }; - graphics.enable = true; - enableRedistributableFirmware = true; - keyboard.qmk.enable = true; - bluetooth.enable = true; - bluetooth.powerOnBoot = true; - }; -} diff --git a/modules/core/hyprland.nix b/modules/core/hyprland.nix deleted file mode 100644 index f2681cc..0000000 --- a/modules/core/hyprland.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ ... }: -{ - programs = { - hyprland = { - enable = true; - withUWSM = false; - }; - hyprlock.enable = true; - }; -} \ No newline at end of file diff --git a/modules/core/i18n.nix b/modules/core/i18n.nix deleted file mode 100644 index 7d3a526..0000000 --- a/modules/core/i18n.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ pkgs, ... }: -{ - i18n.inputMethod = { - enable = true; - type = "fcitx5"; - fcitx5 = { - addons = with pkgs; [ - fcitx5-mozc - fcitx5-gtk - qt6Packages.fcitx5-configtool - ]; - settings.inputMethod = { - GroupOrder = { - "0" = "Default"; - }; - "Groups/0" = { - Name = "Default"; - "Default Layout" = "keyboard-jp"; - DefaultIM = "mozc"; - }; - "Groups/0/Items/0" = { - Name = "keyboard-jp"; - Layout = ""; - }; - "Groups/0/Items/1" = { - Name = "mozc"; - Layout = ""; - }; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/core/kde.nix b/modules/core/kde.nix deleted file mode 100644 index dd5f20c..0000000 --- a/modules/core/kde.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - programs.kdeconnect = { - enable = true; - }; -} - diff --git a/modules/core/network.nix b/modules/core/network.nix deleted file mode 100644 index 41400ee..0000000 --- a/modules/core/network.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - host, - pkgs, - ... -}: { - networking = { - hostName = "${host}"; - nameservers = [ - "1.1.1.1" - "1.0.0.1" - ]; - - networkmanager = { - enable = true; - dns = "none"; - wifi.powersave = false; - wifi.backend = "wpa_supplicant"; - settings = { - "device"."wifi.scan-rand-mac-address" = "no"; - "connection"."wifi.cloned-mac-address" = "permanent"; - }; - }; - - wireless.iwd.enable = false; - }; - - boot.extraModprobeConfig = '' - options cfg80211 ieee80211_regdom=JP - options iwlwifi power_save=0 - options iwlwifi uapsd_disable=1 - ''; - - services.resolved.enable = false; - - environment.systemPackages = [pkgs.networkmanagerapplet]; - programs.nm-applet.enable = true; - - security.pki.certificateFiles = [./ca/root_ca.crt]; -} diff --git a/modules/core/niri.nix b/modules/core/niri.nix deleted file mode 100644 index 6e16b96..0000000 --- a/modules/core/niri.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ pkgs, ... }: -{ - programs.niri = { - enable = true; - }; -} \ No newline at end of file diff --git a/modules/core/noctalia.nix b/modules/core/noctalia.nix deleted file mode 100644 index 48eb326..0000000 --- a/modules/core/noctalia.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ pkgs, inputs, ... }: -{ - environment.systemPackages = with pkgs; [ - inputs.noctalia.packages.${system}.default - ]; -} \ No newline at end of file diff --git a/modules/core/packages.nix b/modules/core/packages.nix deleted file mode 100644 index 9210bee..0000000 --- a/modules/core/packages.nix +++ /dev/null @@ -1,68 +0,0 @@ -{ - pkgs, - inputs, - ... -}: let - unstable = import inputs.nixpkgs-unstable { - system = pkgs.system; - config = { - allowUnfree = true; - }; - }; -in { - programs = { - xwayland.enable = true; - dconf.enable = true; - seahorse.enable = true; - fuse.userAllowOther = true; - adb.enable = true; - gnupg.agent = { - enable = true; - enableSSHSupport = false; - }; - zsh = { - enable = true; - }; - java.enable = true; - java.package = pkgs.jdk25; - }; - - nixpkgs.config.allowUnfree = true; - - environment.systemPackages = with pkgs; [ - tuigreet # The Login Manager (Sometimes Referred To As Display Manager) - htop - btop # Simple Terminal Based System Monitor - unrar # Tool For Handling .rar Files - unzip # Tool For Handling .zip Files - uwsm # Universal Wayland Session Manager (optional must be enabled) - wget # Tool For Fetching Files With Links - curl # Tool For Fetching Files With Links - alacritty # A GPU Accelerated Terminal Emulator - fuzzel # A Simple And Lightweight Application Launcher - git # Version Control System - tailscale # Zero-Config VPN - unstable.msedit # Microsoft Editor - nil # Nix Language Server - docker # Containerization Platform - unstable._1password-cli - unstable._1password-gui - unstable.ghostty - tio - sbctl - xwayland-satellite - slurp - grim - wf-recorder - sqlite # Vscode Raycast Extension Dependency - oxker # Docker TUI Tool - jdk25 - maven - gradle - python312 - uv - bun - unstable.claude-code - unstable.codex - ]; -} diff --git a/modules/core/power.nix b/modules/core/power.nix deleted file mode 100644 index df3b17c..0000000 --- a/modules/core/power.nix +++ /dev/null @@ -1,14 +0,0 @@ -{...}: { - boot.kernelParams = [ - "mem_sleep_default=deep" - ]; - - powerManagement = { - enable = true; - powertop.enable = true; - }; - - services.power-profiles-daemon.enable = true; - services.tlp.enable = false; - services.upower.enable = true; -} diff --git a/modules/core/secure-boot.nix b/modules/core/secure-boot.nix deleted file mode 100644 index fa89542..0000000 --- a/modules/core/secure-boot.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ inputs, pkgs, lib, ... }: -{ - imports = [ - inputs.lanzaboote.nixosModules.lanzaboote - ]; - - boot.loader = { - systemd-boot.enable = lib.mkForce false; - efi.canTouchEfiVariables = true; - efi.efiSysMountPoint = "/boot"; - }; - - boot.lanzaboote = { - enable = true; - pkiBundle = "/var/lib/sbctl"; - }; -} \ No newline at end of file diff --git a/modules/core/services.nix b/modules/core/services.nix deleted file mode 100644 index fa72590..0000000 --- a/modules/core/services.nix +++ /dev/null @@ -1,76 +0,0 @@ -{pkgs, ...}: { - services = { - blueman.enable = true; # Bluetooth Support - tumbler.enable = true; # Image/video preview - - fwupd.enable = true; - - gnome.gnome-keyring.enable = true; - - upower.enable = true; - - tailscale = { - enable = true; - extraUpFlags = [ - "--accept-dns=false" - "--accept-routes" - ]; - }; - - pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - jack.enable = true; - wireplumber.enable = true; - }; - - logind = { - settings.Login = { - HandleLidSwitch = "suspend"; - HandleLidSwitchDocked = "ignore"; - HandleLidSwitchExternalPower = "suspend"; - LidSwitchIgnoreInhibited = "no"; - }; - }; - - rpcbind.enable = true; - }; - - virtualisation.docker = { - enable = true; - autoPrune = { - enable = true; - dates = "weekly"; - }; - daemon.settings = { - ipv6 = true; - "fixed-cidr-v6" = "fd00:30::/64"; - ip6tables = true; - }; - }; - - programs.nix-ld.enable = true; - security.rtkit.enable = true; - - xdg.portal = { - enable = true; - wlr.enable = true; - extraPortals = [ - pkgs.xdg-desktop-portal-wlr - pkgs.xdg-desktop-portal-gtk - ]; - xdgOpenUsePortal = true; - config = { - common.default = [ - "wlr" - "gtk" - ]; - niri.default = [ - "wlr" - "gtk" - ]; - }; - }; -} diff --git a/modules/core/ssh.nix b/modules/core/ssh.nix deleted file mode 100644 index 64851f7..0000000 --- a/modules/core/ssh.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ pkgs, ... }: -{ - - services.openssh = { - enable = true; - openFirewall = true; - - settings = { - PermitRootLogin = "no"; - PasswordAuthentication = false; - KbdInteractiveAuthentication = false; - PubkeyAuthentication = "yes"; - }; - }; - - users.users.moons = { - - openssh.authorizedKeys.keys = [ - "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIKhxDkucmeCor6CKoXAua7DgDSzuXrZOtpdkyzQxz5+aAAAABHNzaDo= moons@moons14.com" - "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIN6hZJyng/5LgFKPjR6uZAd/00UkO0vN0uQOoIvfSELdAAAABHNzaDo= moons@moons14.com" - ]; - }; - -} diff --git a/modules/core/system.nix b/modules/core/system.nix deleted file mode 100644 index bcb41e5..0000000 --- a/modules/core/system.nix +++ /dev/null @@ -1,30 +0,0 @@ -{...}: { - nix = { - settings = { - experimental-features = ["nix-command" "flakes"]; - }; - }; - - # Localization settings - time.timeZone = "Asia/Tokyo"; - i18n.defaultLocale = "ja_JP.UTF-8"; - i18n.extraLocaleSettings = { - LC_ADDRESS = "ja_JP.UTF-8"; - LC_IDENTIFICATION = "ja_JP.UTF-8"; - LC_MEASUREMENT = "ja_JP.UTF-8"; - LC_MONETARY = "ja_JP.UTF-8"; - LC_NAME = "ja_JP.UTF-8"; - LC_NUMERIC = "ja_JP.UTF-8"; - LC_PAPER = "ja_JP.UTF-8"; - LC_TELEPHONE = "ja_JP.UTF-8"; - LC_TIME = "ja_JP.UTF-8"; - }; - - environment.variables = { - NIXOS_OZONE_WL = "1"; - }; - - console.keyMap = "jp106"; - system.stateVersion = "25.11"; -} - diff --git a/modules/core/user.nix b/modules/core/user.nix deleted file mode 100644 index e052c8d..0000000 --- a/modules/core/user.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ pkgs, inputs, username, host, profile, ...}: -{ - imports = [ inputs.home-manager.nixosModules.home-manager ]; - home-manager = { - useUserPackages = true; - useGlobalPkgs = false; - backupFileExtension = "backup"; - extraSpecialArgs = { inherit inputs username host profile; }; - users.moons = { - imports = [ ./../home ]; - home = { - username = "moons"; - homeDirectory = "/home/moons"; - stateVersion = "25.11"; - }; - }; - }; - users.mutableUsers = true; - users.users.moons = { - isNormalUser = true; - description = "moons-14"; - extraGroups = [ - "adbusers" - "docker" #access to docker as non-root - "libvirtd" #Virt manager/QEMU access - "lp" - "networkmanager" - "scanner" - "wheel" #subdo access - "vboxusers" #Virtual Box - "dialout" #Serial Port Access - ]; - shell = pkgs.zsh; - ignoreShellProgramCheck = true; - }; - nix.settings.allowed-users = [ "moons" ]; - nix.settings.trusted-users = [ "root" "moons" ]; -} diff --git a/modules/core/xserver.nix b/modules/core/xserver.nix deleted file mode 100644 index c21bdbc..0000000 --- a/modules/core/xserver.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ ... }: -{ - services = { - xserver = { - enable = true; - xkb = { - layout = "jp"; - variant = ""; - options = "ctrl:nocaps"; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/drivers/intel-drivers.nix b/modules/drivers/intel-drivers.nix deleted file mode 100644 index bb8cc83..0000000 --- a/modules/drivers/intel-drivers.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ lib, pkgs, config, ... }: -with lib; let - cfg = config.drivers.intel; -in -{ - options.drivers.intel = { - enable = mkEnableOption "Enable Intel Graphics Drivers"; - }; - - config = mkIf cfg.enable { - # OpenGL - hardware.graphics = { - extraPackages = with pkgs; [ - intel-media-driver - vaapiIntel - vaapiVdpau - libvdpau-va-gl - ]; - }; - }; -} diff --git a/modules/home/avatar.nix b/modules/home/avatar.nix deleted file mode 100644 index f57ef45..0000000 --- a/modules/home/avatar.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: -{ - home.file.".face" = { - recursive = true; - source = ./../../images/avatar.jpg; - }; -} \ No newline at end of file diff --git a/modules/home/browser.nix b/modules/home/browser.nix deleted file mode 100644 index ed5cfe6..0000000 --- a/modules/home/browser.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ pkgs, ... }: - -{ - nixpkgs.config.allowUnfree = true; - - home.packages = with pkgs; [ - google-chrome - ]; - - xdg.desktopEntries."google-chrome" = { - name = "Google Chrome"; - genericName = "Web Browser"; - exec = "${pkgs.google-chrome}/bin/google-chrome-stable --enable-features=TouchpadOverscrollHistoryNavigation %U"; - terminal = false; - icon = "google-chrome"; - categories = [ "Network" "WebBrowser" ]; - startupNotify = true; - type = "Application"; - }; - - xdg.mimeApps.defaultApplications = { - "text/html" = "google-chrome.desktop"; - "x-scheme-handler/http" = "google-chrome.desktop"; - "x-scheme-handler/https" = "google-chrome.desktop"; - }; -} diff --git a/modules/home/btop/default.nix b/modules/home/btop/default.nix deleted file mode 100644 index 106d982..0000000 --- a/modules/home/btop/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ ... }: -{ - programs = { - btop = { - enable = true; - settings.color_theme = "dracula"; - themes = { - dracula = builtins.readFile ./dracula.theme; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home/btop/dracula.theme b/modules/home/btop/dracula.theme deleted file mode 100644 index a0355f3..0000000 --- a/modules/home/btop/dracula.theme +++ /dev/null @@ -1,89 +0,0 @@ -#Bashtop theme with nord palette (https://www.nordtheme.com) -#by Justin Zobel - -# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" -# example for white: "#ffffff", "#ff" or "255 255 255". - -# All graphs and meters can be gradients -# For single color graphs leave "mid" and "end" variable empty. -# Use "start" and "end" variables for two color gradient -# Use "start", "mid" and "end" for three color gradient - -# Main background, empty for terminal default, need to be empty if you want transparent background -theme[main_bg]="#282A36" - -# Main text color -theme[main_fg]="#BD93F9" - -# Title color for boxes -theme[title]="#f8f8f2" - -# Higlight color for keyboard shortcuts -theme[hi_fg]="#ff79c6" - -# Background color of selected item in processes box -theme[selected_bg]="#44475A" - -# Foreground color of selected item in processes box -theme[selected_fg]="#ECEFF4" - -# Color of inactive/disabled text -theme[inactive_fg]="#6272a4" - -# Misc colors for processes box including mini cpu graphs, details memory graph and details status text -theme[proc_misc]="#BD93F9" - -# Cpu box outline color -theme[cpu_box]="#ff79c6" - -# Memory/disks box outline color -theme[mem_box]="#ff79c6" - -# Net up/down box outline color -theme[net_box]="#ff79c6" - -# Processes box outline color -theme[proc_box]="#ff79c6" - -# Box divider line and small boxes line color -theme[div_line]="#ff79c6" - -# Temperature graph colors -theme[temp_start]="#bd93f9" -theme[temp_mid]="#bd93f9" -theme[temp_end]="#bd93f9" - -# CPU graph colors -theme[cpu_start]="#bd93f9" -theme[cpu_mid]="#bd93f9" -theme[cpu_end]="#bd93f9" - -# Mem/Disk free meter -theme[free_start]="#bd93f9" -theme[free_mid]="#bd93f9" -theme[free_end]="#bd93f9" - -# Mem/Disk cached meter -theme[cached_start]="#bd93f9" -theme[cached_mid]="#bd93f9" -theme[cached_end]="#bd93f9" - -# Mem/Disk available meter -theme[available_start]="#bd93f9" -theme[available_mid]="#bd93f9" -theme[available_end]="#bd93f9" - -# Mem/Disk used meter -theme[used_start]="#bd93f9" -theme[used_mid]="#bd93f9" -theme[used_end]="#bd93f9" - -# Download graph colors -theme[download_start]="#bd93f9" -theme[download_mid]="#bd93f9" -theme[download_end]="#bd93f9" - -# Upload graph colors -theme[upload_start]="#bd93f9" -theme[upload_mid]="#bd93f9" -theme[upload_end]="#bd93f9" diff --git a/modules/home/claude.nix b/modules/home/claude.nix deleted file mode 100644 index f0c9735..0000000 --- a/modules/home/claude.nix +++ /dev/null @@ -1,9 +0,0 @@ -{...}: { - home.file.".claude/settings.json".text = builtins.toJSON { - statusLine = { - type = "command"; - command = "bun x ccusage statusline --no-offline"; - padding = 0; - }; - }; -} diff --git a/modules/home/default.nix b/modules/home/default.nix deleted file mode 100644 index 3f5c4a9..0000000 --- a/modules/home/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{...}: { - imports = [ - ./btop - ./git.nix - ./fcitx5 - ./ssh.nix - ./nixvim - ./zsh.nix - ./environment.nix - ./zellij.nix - ./claude.nix - ]; -} diff --git a/modules/home/discord.nix b/modules/home/discord.nix deleted file mode 100644 index 2220975..0000000 --- a/modules/home/discord.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ ... }: -{ - programs.vesktop = { - enable = true; - }; -} \ No newline at end of file diff --git a/modules/home/environment.nix b/modules/home/environment.nix deleted file mode 100644 index 7ce78b9..0000000 --- a/modules/home/environment.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - # use project directory: `echo 'use flake ~/dotfiles#next-web' > .envrc` - programs.direnv = { - enable = true; - nix-direnv.enable = true; - }; -} diff --git a/modules/home/fcitx5/config b/modules/home/fcitx5/config deleted file mode 100644 index 1e330aa..0000000 --- a/modules/home/fcitx5/config +++ /dev/null @@ -1,70 +0,0 @@ -[Hotkey] -# トリガーキーを押すたびに切り替える -EnumerateWithTriggerKeys=False -# 一時的に第1入力メソッドに切り替える -AltTriggerKeys= -# 切り替え時は第1入力メソッドをスキップする -EnumerateSkipFirst=False -# Time limit in milliseconds for triggering modifier key shortcuts -ModifierOnlyKeyTimeout=250 - -[Hotkey/TriggerKeys] -1=Zenkaku_Hankaku - -[Hotkey/ActivateKeys] -0=Henkan - -[Hotkey/DeactivateKeys] -0=Muhenkan - -[Hotkey/PrevPage] -0=Up - -[Hotkey/NextPage] -0=Down - -[Hotkey/PrevCandidate] -0=Shift+Tab - -[Hotkey/NextCandidate] -0=Tab - -[Hotkey/TogglePreedit] -0=Control+Alt+P - -[Behavior] -# デフォルトで有効にする -ActiveByDefault=False -# フォーカス時に状態をリセット -resetStateWhenFocusIn=No -# 入力状態を共有する -ShareInputState=No -# アプリケーションにプリエディットを表示する -PreeditEnabledByDefault=True -# 入力メソッドを切り替える際に入力メソッドの情報を表示する -ShowInputMethodInformation=True -# フォーカスを変更する際に入力メソッドの情報を表示する -showInputMethodInformationWhenFocusIn=False -# 入力メソッドの情報をコンパクトに表示する -CompactInputMethodInformation=True -# 第1入力メソッドの情報を表示する -ShowFirstInputMethodInformation=True -# デフォルトのページサイズ -DefaultPageSize=5 -# XKB オプションより優先する -OverrideXkbOption=False -# カスタム XKB オプション -CustomXkbOption= -# Force Enabled Addons -EnabledAddons= -# Force Disabled Addons -DisabledAddons= -# Preload input method to be used by default -PreloadInputMethod=True -# パスワード欄に入力メソッドを許可する -AllowInputMethodForPassword=False -# パスワード入力時にプリエディットテキストを表示する -ShowPreeditForPassword=False -# ユーザーデータを保存する間隔(分) -AutoSavePeriod=30 - diff --git a/modules/home/fcitx5/default.nix b/modules/home/fcitx5/default.nix deleted file mode 100644 index c7cf1e1..0000000 --- a/modules/home/fcitx5/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: -{ - home.file.".config/fcitx5/config" = { - recursive = true; - source = ./config; - }; -} \ No newline at end of file diff --git a/modules/home/ghostty/config b/modules/home/ghostty/config deleted file mode 100644 index 2410ddb..0000000 --- a/modules/home/ghostty/config +++ /dev/null @@ -1,30 +0,0 @@ -theme = dracula -background-blur-radius = 20 -background-opacity = 0.9 -font-family = BlexMono Nerd Font Mono -mouse-hide-while-typing = true -window-decoration = true - - -# keybind - -# Copy/Paste -keybind = ctrl+shift+c=copy_to_clipboard -keybind = ctrl+shift+v=paste_from_clipboard - -# create new tab -keybind = ctrl+shift+t=new_tab - -# move tabs -keybind = ctrl+alt+left_bracket=previous_tab -keybind = ctrl+alt+right_bracket=next_tab - -# close tab -keybind = ctrl+alt+q=close_window - -# font size -keybind = ctrl+shift+semicolon=increase_font_size:1 -keybind = ctrl+shift+minus=increase_font_size:1 - - -shell-integration-features = ssh-terminfo,ssh-env diff --git a/modules/home/ghostty/default.nix b/modules/home/ghostty/default.nix deleted file mode 100644 index cc6c658..0000000 --- a/modules/home/ghostty/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ ... }: -{ - - home.file.".config/ghostty/config" = { - recursive = true; - source = ./config; - }; - - home.file.".config/ghostty/themes/dracula" = { - recursive = true; - source = ./dracula.theme; - }; -} \ No newline at end of file diff --git a/modules/home/ghostty/dracula.theme b/modules/home/ghostty/dracula.theme deleted file mode 100644 index 172180b..0000000 --- a/modules/home/ghostty/dracula.theme +++ /dev/null @@ -1,44 +0,0 @@ -# MIT License -# -# Copyright (c) 2023 Dracula Theme -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -palette = 0=#21222c -palette = 1=#ff5555 -palette = 2=#50fa7b -palette = 3=#f1fa8c -palette = 4=#bd93f9 -palette = 5=#ff79c6 -palette = 6=#8be9fd -palette = 7=#f8f8f2 -palette = 8=#6272a4 -palette = 9=#ff6e6e -palette = 10=#69ff94 -palette = 11=#ffffa5 -palette = 12=#d6acff -palette = 13=#ff92df -palette = 14=#a4ffff -palette = 15=#ffffff -background = #282a36 -foreground = #f8f8f2 -cursor-color = #f8f8f2 -cursor-text = #282a36 -selection-foreground = #f8f8f2 -selection-background = #44475a \ No newline at end of file diff --git a/modules/home/git.nix b/modules/home/git.nix deleted file mode 100644 index 1f6d84f..0000000 --- a/modules/home/git.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ host, ... }: -{ - programs.git = { - enable = true; - ignores = [ - ".direnv/" - ".envrc" - "!.envrc.example" - ]; - - settings = { - user.name = "moons-14"; - user.email = "moons@moons14.com"; - push.default = "simple"; - credential.helper = "cache --timeout=7200"; - init.defaultBranch = "main"; - log.decorate = "full"; - log.date = "iso"; - merge.conflictStyle = "diff3"; - alias = { - br = "branch --sort=-committerdate"; - co = "checkout"; - df = "diff"; - com = "commit -a"; - gs = "stash"; - gp = "pull"; - lg = "log --graph --pretty=format:'%Cred%h%Creset - %C(yellow)%d%Creset %s %C(green)(%cr)%C(bold blue) <%an>%Creset' --abbrev-commit"; - st = "status"; - }; - }; - }; -} diff --git a/modules/home/gtk.nix b/modules/home/gtk.nix deleted file mode 100644 index 235ef58..0000000 --- a/modules/home/gtk.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ pkgs, ... }: -{ - gtk = { - enable = true; - theme = { - name = "Dracula"; - package = pkgs.dracula-theme; - }; - cursorTheme = { - package = pkgs.adwaita-icon-theme; - name = "Adwaita"; - }; - iconTheme = { - package = pkgs.papirus-icon-theme; - name = "Papirus-Dark"; - }; - }; -} \ No newline at end of file diff --git a/modules/home/lock.nix b/modules/home/lock.nix deleted file mode 100644 index 4322151..0000000 --- a/modules/home/lock.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ pkgs, lib, inputs, ... }: - -let - noctaliaPkg = inputs.noctalia.packages.${pkgs.system}.default; - noctaliaExe = lib.getExe noctaliaPkg; - - lockCmd = "${pkgs.bash}/bin/bash -lc '${noctaliaExe} ipc call lockScreen lock'"; - lockAndSuspendCmd = "${pkgs.bash}/bin/bash -lc '${noctaliaExe} ipc call sessionMenu lockAndSuspend'"; - - dpmsOff = "${pkgs.niri}/bin/niri msg action power-off-monitors"; - dpmsOn = "${pkgs.niri}/bin/niri msg action power-on-monitors"; -in -{ - services.swayidle = { - enable = true; - systemdTarget = "graphical-session.target"; - - timeouts = [ - { timeout = 300; command = lockAndSuspendCmd; } - ]; - - events = [ - { event = "lock"; command = lockCmd; } - { event = "before-sleep"; command = lockCmd; } - { event = "after-resume"; command = dpmsOn; } - ]; - }; - - systemd.user.services.swayidle = { - Service = { - PassEnvironment = [ "WAYLAND_DISPLAY" "XDG_RUNTIME_DIR" "DBUS_SESSION_BUS_ADDRESS" ]; - }; - }; -} diff --git a/modules/home/nautilus.nix b/modules/home/nautilus.nix deleted file mode 100644 index d3c5d01..0000000 --- a/modules/home/nautilus.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ pkgs, ... }: -{ - home.packages = with pkgs; [ - nautilus - gvfs sushi - ]; - - -} diff --git a/modules/home/niri/default.nix b/modules/home/niri/default.nix deleted file mode 100644 index 1dbc2bd..0000000 --- a/modules/home/niri/default.nix +++ /dev/null @@ -1,147 +0,0 @@ -{ - inputs, - pkgs, - ... -}: let - defaultKeyBind = import ./defaultKeyBind.nix; -in { - imports = [inputs.niri-flake.homeModules.niri]; - programs.niri.package = pkgs.niri; - - programs.niri.settings = { - input.touchpad = { - natural-scroll = true; - scroll-factor = 4.0; - scroll-method = "two-finger"; - click-method = "clickfinger"; - drag = true; - drag-lock = true; - }; - - spawn-at-startup = [ - {command = ["noctalia-shell"];} - ]; - - outputs."eDP-1".scale = 1; - cursor.size = 16; - - # Doracura color - layout = { - focus-ring = { - active.color = "#bd93f9"; - inactive.color = "#6272a4"; - }; - border = { - active.color = "#ffc87f"; - inactive.color = "#505050"; - urgent.color = "#9b0000"; - }; - shadow = { - color = "#0007"; - }; - }; - - binds = - defaultKeyBind - // { - "Mod+T" = { - action.spawn = "ghostty"; - hotkey-overlay.title = "Open a Terminal: ghostty"; - }; - "Mod+D" = { - action.spawn = [ - "vicinae" - "toggle" - ]; - hotkey-overlay.title = "Run an Application: vicinae"; - }; - "Mod+Space" = { - action.spawn = [ - "vicinae" - "toggle" - ]; - hotkey-overlay.title = "Run an Application: vicinae"; - }; - "Mod+E" = { - action.spawn = [ - "nautilus" - "--new-window" - ]; - hotkey-overlay.title = "Open File Manager: nautilus"; - }; - "Mod+L" = { - action.spawn = [ - "noctalia-shell" - "ipc" - "call" - "sessionMenu" - "lockAndSuspend" - ]; - hotkey-overlay.title = "Lock the Screen: noctalia"; - }; - "Mod+V" = { - action.spawn = [ - "vicinae" - "vicinae://extensions/vicinae/clipboard/history" - ]; - hotkey-overlay.title = "Clipboard History"; - }; - - "XF86AudioRaiseVolume" = { - action.spawn = [ - "noctalia-shell" - "ipc" - "call" - "volume" - "increase" - ]; - }; - "XF86AudioLowerVolume" = { - action.spawn = [ - "noctalia-shell" - "ipc" - "call" - "volume" - "decrease" - ]; - }; - "XF86AudioMute" = { - action.spawn = [ - "noctalia-shell" - "ipc" - "call" - "volume" - "muteOutput" - ]; - }; - "XF86AudioMicMute" = { - action.spawn = [ - "noctalia-shell" - "ipc" - "call" - "volume" - "muteInput" - ]; - }; - - "XF86MonBrightnessUp" = { - action.spawn = [ - "noctalia-shell" - "ipc" - "call" - "brightness" - "increase" - ]; - }; - "XF86MonBrightnessDown" = { - action.spawn = [ - "noctalia-shell" - "ipc" - "call" - "brightness" - "decrease" - ]; - }; - }; - }; -} diff --git a/modules/home/niri/defaultKeyBind.nix b/modules/home/niri/defaultKeyBind.nix deleted file mode 100644 index db095f2..0000000 --- a/modules/home/niri/defaultKeyBind.nix +++ /dev/null @@ -1,240 +0,0 @@ -{ - # https://github.com/sodiboo/niri-flake/issues/483 - - # Keys consist of modifiers separated by + signs, followed by an XKB key name - # in the end. To find an XKB name for a particular key, you may use a program - # like wev. - # - # "Mod" is a special modifier equal to Super when running on a TTY, and to Alt - # when running as a winit window. - # - # Most actions that you can bind here can also be invoked programmatically with - # `niri msg action do-something`. - - # Mod-Shift-/, which is usually the same as Mod-?, - # shows a list of important hotkeys. - "Mod+Shift+Slash".action.show-hotkey-overlay = {}; - - # You can also use a shell. Do this if you need pipes, multiple commands, etc. - # Note: the entire command goes as a single argument in the end. - # Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; } - - # Example volume keys mappings for PipeWire & WirePlumber. - # The allow-when-locked=true property makes them work even when the session is locked. - "XF86AudioRaiseVolume" = { - allow-when-locked = true; - action.spawn = [ "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+" ]; - }; - "XF86AudioLowerVolume" = { - allow-when-locked = true; - action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"]; - }; - "XF86AudioMute" = { - allow-when-locked = true; - action.spawn = [ "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle" ]; - }; - "XF86AudioMicMute" = { - allow-when-locked = true; - action.spawn = [ "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle" ]; - }; - - "Mod+Q".action.close-window = {}; - - "Mod+Left".action.focus-column-left = {}; - "Mod+Down".action.focus-window-down = {}; - "Mod+Up".action.focus-window-up = {}; - "Mod+Right".action.focus-column-right = {}; - "Mod+H".action.focus-column-left = {}; - "Mod+J".action.focus-window-down = {}; - "Mod+K".action.focus-window-up = {}; - "Mod+L".action.focus-column-right = {}; - - "Mod+Ctrl+Left".action.move-column-left = {}; - "Mod+Ctrl+Down".action.move-window-down = {}; - "Mod+Ctrl+Up".action.move-window-up = {}; - "Mod+Ctrl+Right".action.move-column-right = {}; - "Mod+Ctrl+H".action.move-column-left = {}; - "Mod+Ctrl+J".action.move-window-down = {}; - "Mod+Ctrl+K".action.move-window-up = {}; - "Mod+Ctrl+L".action.move-column-right = {}; - - # Alternative commands that move across workspaces when reaching - # the first or last window in a column. - # Mod+J { focus-window-or-workspace-down; } - # Mod+K { focus-window-or-workspace-up; } - # Mod+Ctrl+J { move-window-down-or-to-workspace-down; } - # Mod+Ctrl+K { move-window-up-or-to-workspace-up; } - - "Mod+Home".action.focus-column-first = {}; - "Mod+End".action.focus-column-last = {}; - "Mod+Ctrl+Home".action.move-column-to-first = {}; - "Mod+Ctrl+End".action.move-column-to-last = {}; - - "Mod+Shift+Left".action.focus-monitor-left = {}; - "Mod+Shift+Down".action.focus-monitor-down = {}; - "Mod+Shift+Up".action.focus-monitor-up = {}; - "Mod+Shift+Right".action.focus-monitor-right = {}; - "Mod+Shift+H".action.focus-monitor-left = {}; - "Mod+Shift+J".action.focus-monitor-down = {}; - "Mod+Shift+K".action.focus-monitor-up = {}; - "Mod+Shift+L".action.focus-monitor-right = {}; - - "Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = {}; - "Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = {}; - "Mod+Shift+Ctrl+Up".action.move-column-to-monitor-up = {}; - "Mod+Shift+Ctrl+Right".action.move-column-to-monitor-right = {}; - "Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = {}; - "Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = {}; - "Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = {}; - "Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = {}; - - # Alternatively, there are commands to move just a single window: - # Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } - # ... - - # And you can also move a whole workspace to another monitor: - # Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; } - # ... - - "Mod+Page_Down".action.focus-workspace-down = {}; - "Mod+Page_Up".action.focus-workspace-up = {}; - "Mod+U".action.focus-workspace-down = {}; - "Mod+I".action.focus-workspace-up = {}; - "Mod+Ctrl+Page_Down".action.move-column-to-workspace-down = {}; - "Mod+Ctrl+Page_Up".action.move-column-to-workspace-up = {}; - "Mod+Ctrl+U".action.move-column-to-workspace-down = {}; - "Mod+Ctrl+I".action.move-column-to-workspace-up = {}; - - # Alternatively, there are commands to move just a single window: - # Mod+Ctrl+Page_Down { move-window-to-workspace-down; } - # ... - - "Mod+Shift+Page_Down".action.move-workspace-down = {}; - "Mod+Shift+Page_Up".action.move-workspace-up = {}; - "Mod+Shift+U".action.move-workspace-down = {}; - "Mod+Shift+I".action.move-workspace-up = {}; - - # You can bind mouse wheel scroll ticks using the following syntax. - # These binds will change direction based on the natural-scroll setting. - # - # To avoid scrolling through workspaces really fast, you can use - # the cooldown-ms property. The bind will be rate-limited to this value. - # You can set a cooldown on any bind, but it's most useful for the wheel. - "Mod+WheelScrollDown" = { - cooldown-ms = 150; - action.focus-workspace-down = {}; - }; - "Mod+WheelScrollUp" = { - cooldown-ms = 150; - action.focus-workspace-up = {}; - }; - "Mod+Ctrl+WheelScrollDown" = { - cooldown-ms = 150; - action.move-column-to-workspace-down = {}; - }; - "Mod+Ctrl+WheelScrollUp" = { - cooldown-ms = 150; - action.move-column-to-workspace-up = {}; - }; - - "Mod+WheelScrollRight".action.focus-column-right = {}; - "Mod+WheelScrollLeft".action.focus-column-left = {}; - "Mod+Ctrl+WheelScrollRight".action.move-column-right = {}; - "Mod+Ctrl+WheelScrollLeft".action.move-column-left = {}; - - # Usually scrolling up and down with Shift in applications results in - # horizontal scrolling; these binds replicate that. - "Mod+Shift+WheelScrollDown".action.focus-column-right = {}; - "Mod+Shift+WheelScrollUp".action.focus-column-left = {}; - "Mod+Ctrl+Shift+WheelScrollDown".action.move-column-right = {}; - "Mod+Ctrl+Shift+WheelScrollUp".action.move-column-left = {}; - - # Similarly, you can bind touchpad scroll "ticks". - # Touchpad scrolling is continuous, so for these binds it is split into - # discrete intervals. - # These binds are also affected by touchpad's natural-scroll, so these - # example binds are "inverted", since we have natural-scroll enabled for - # touchpads by default. - # Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; } - # Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; } - - # You can refer to workspaces by index. However, keep in mind that - # niri is a dynamic workspace system, so these commands are kind of - # "best effort". Trying to refer to a workspace index bigger than - # the current workspace count will instead refer to the bottommost - # (empty) workspace. - # - # For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on - # will all refer to the 3rd workspace. - "Mod+1".action.focus-workspace = 1; - "Mod+2".action.focus-workspace = 2; - "Mod+3".action.focus-workspace = 3; - "Mod+4".action.focus-workspace = 4; - "Mod+5".action.focus-workspace = 5; - "Mod+6".action.focus-workspace = 6; - "Mod+7".action.focus-workspace = 7; - "Mod+8".action.focus-workspace = 8; - "Mod+9".action.focus-workspace = 9; - "Mod+Ctrl+1".action.move-column-to-workspace = 1; - "Mod+Ctrl+2".action.move-column-to-workspace = 2; - "Mod+Ctrl+3".action.move-column-to-workspace = 3; - "Mod+Ctrl+4".action.move-column-to-workspace = 4; - "Mod+Ctrl+5".action.move-column-to-workspace = 5; - "Mod+Ctrl+6".action.move-column-to-workspace = 6; - "Mod+Ctrl+7".action.move-column-to-workspace = 7; - "Mod+Ctrl+8".action.move-column-to-workspace = 8; - "Mod+Ctrl+9".action.move-column-to-workspace = 9; - - # Alternatively, there are commands to move just a single window: - # Mod+Ctrl+1 { move-window-to-workspace 1; } - - # Switches focus between the current and the previous workspace. - # Mod+Tab { focus-workspace-previous; } - - "Mod+Comma".action.consume-window-into-column = {}; - "Mod+Period".action.expel-window-from-column = {}; - - # There are also commands that consume or expel a single window to the side. - # Mod+BracketLeft { consume-or-expel-window-left; } - # Mod+BracketRight { consume-or-expel-window-right; } - - "Mod+R".action.switch-preset-column-width = {}; - "Mod+Shift+R".action.reset-window-height = {}; - "Mod+F".action.maximize-column = {}; - "Mod+Shift+F".action.fullscreen-window = {}; - "Mod+C".action.center-column = {}; - - # Finer width adjustments. - # This command can also: - # * set width in pixels: "1000" - # * adjust width in pixels: "-5" or "+5" - # * set width as a percentage of screen width: "25%" - # * adjust width as a percentage of screen width: "-10%" or "+10%" - # Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, - # set-column-width "100" will make the column occupy 200 physical screen pixels. - "Mod+Minus".action.set-column-width = "-10%"; - "Mod+Equal".action.set-column-width = "+10%"; - - # Finer height adjustments when in column with other windows. - "Mod+Shift+Minus".action.set-window-height = "-10%"; - "Mod+Shift+Equal".action.set-window-height = "+10%"; - - # Actions to switch layouts. - # Note: if you uncomment these, make sure you do NOT have - # a matching layout switch hotkey configured in xkb options above. - # Having both at once on the same hotkey will break the switching, - # since it will switch twice upon pressing the hotkey (once by xkb, once by niri). - # Mod+Space { switch-layout "next"; } - # Mod+Shift+Space { switch-layout "prev"; } - - "Print".action.screenshot = {}; - "Ctrl+Print".action.screenshot-screen = {}; - "Alt+Print".action.screenshot-window = {}; - - # The quit action will show a confirmation dialog to avoid accidental exits. - "Mod+Shift+E".action.quit = {}; - - # Powers off the monitors. To> turn them back on, do any input like - # moving the mouse or pressing any other key. - "Mod+Shift+P".action.power-off-monitors = {}; -} \ No newline at end of file diff --git a/modules/home/nixvim/autocmds.nix b/modules/home/nixvim/autocmds.nix deleted file mode 100644 index 4e8a2ec..0000000 --- a/modules/home/nixvim/autocmds.nix +++ /dev/null @@ -1,8 +0,0 @@ -{...}: { - programs.nixvim.autoCmd = [ - { - event = "TextYankPost"; - callback.__raw = "function() vim.highlight.on_yank() end"; - } - ]; -} diff --git a/modules/home/nixvim/colorscheme.nix b/modules/home/nixvim/colorscheme.nix deleted file mode 100644 index ff6c363..0000000 --- a/modules/home/nixvim/colorscheme.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - programs.nixvim.colorschemes.catppuccin = { - enable = true; - settings.transparent_background = true; - }; -} diff --git a/modules/home/nixvim/default.nix b/modules/home/nixvim/default.nix deleted file mode 100644 index 6058473..0000000 --- a/modules/home/nixvim/default.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ - pkgs, - inputs, - ... -}: { - imports = [ - inputs.nixvim.homeModules.nixvim - ./options.nix - ./autocmds.nix - ./keymaps.nix - ./language.nix - ./colorscheme.nix - ./lsp.nix - ./plugins - ]; - - programs.nixvim = { - enable = true; - vimAlias = true; - viAlias = true; - withNodeJs = true; - - extraPackages = with pkgs; [ - git - ripgrep - fd - nodejs - zellij - - # LSP / formatter / misc - vtsls - vscode-langservers-extracted - tailwindcss-language-server - prettierd - prettier - biome - stylua - shfmt - alejandra - lua-language-server - nixd - ]; - - }; -} diff --git a/modules/home/nixvim/keymaps.nix b/modules/home/nixvim/keymaps.nix deleted file mode 100644 index 4d550aa..0000000 --- a/modules/home/nixvim/keymaps.nix +++ /dev/null @@ -1,174 +0,0 @@ -{...}: let - mk = key: action: desc: { - mode = "n"; - inherit key action; - options = { - silent = true; - inherit desc; - }; - }; - - mkRaw = key: raw: desc: { - mode = "n"; - inherit key; - action.__raw = raw; - options = { - silent = true; - inherit desc; - }; - }; - - mkExpr = key: raw: desc: { - mode = "n"; - inherit key; - action.__raw = raw; - options = { - silent = true; - expr = true; - inherit desc; - }; - }; -in { - programs.nixvim = { - opts = { - # ジャンプ履歴をスタック寄りに扱う - jumpoptions = "stack"; - - # 既に開いているバッファや直前のウィンドウを優先して再利用 - switchbuf = "useopen,uselast"; - }; - - keymaps = [ - # Search - (mk "" "nohlsearch" "検索ハイライトを解除") - - # Screen line movement - (mkExpr "j" "function() return vim.v.count == 0 and 'gj' or 'j' end" "下へ移動(画面行優先)") - (mkExpr "k" "function() return vim.v.count == 0 and 'gk' or 'k' end" "上へ移動(画面行優先)") - - # LSP: hover / direct jump - (mkRaw "K" "vim.lsp.buf.hover" "シンボル情報を表示") - (mkRaw "gd" "vim.lsp.buf.definition" "定義へジャンプ") - (mkRaw "grr" "vim.lsp.buf.references" "参照一覧を開く") - (mkRaw "gri" "vim.lsp.buf.implementation" "実装一覧を開く") - (mkRaw "grt" "vim.lsp.buf.type_definition" "型定義一覧を開く") - (mkRaw "grn" "vim.lsp.buf.rename" "シンボル名を一括変換") - (mkRaw "gra" "vim.lsp.buf.code_action" "コードアクション") - (mkRaw "gO" "vim.lsp.buf.document_symbol" "現在ファイルのシンボル一覧") - - # Glance: preview / peek - (mk "gD" "Glance definitions" "定義をプレビュー") - (mk "gR" "Glance references" "参照をプレビュー") - (mk "gM" "Glance implementations" "実装をプレビュー") - (mk "gY" "Glance type_definitions" "型定義をプレビュー") - (mk "g." "Glance resume" "直前のGlanceを再開") - - # Convenience aliases - (mkRaw "rn" "vim.lsp.buf.rename" "シンボル名を一括変換") - (mkRaw "cf" "function() require('conform').format({ timeout_ms = 1000, lsp_format = 'fallback' }) end" "コードをフォーマット") - (mkRaw "ca" "vim.lsp.buf.code_action" "コードアクション") - - # Diagnostics - (mkRaw "]d" "vim.diagnostic.goto_next" "次の診断へ移動") - (mkRaw "[d" "vim.diagnostic.goto_prev" "前の診断へ移動") - (mkRaw "dl" "vim.diagnostic.open_float" "診断の詳細を表示") - - # File tree - (mk "e" "Neotree toggle left" "ファイルツリー") - - # Terminal - (mk "tt" "ToggleTerm direction=float" "ターミナル") - - # Trouble - (mk "xx" "Trouble diagnostics toggle" "診断一覧") - (mk "xq" "Trouble qflist toggle" "Quickfix一覧") - (mk "xl" "Trouble loclist toggle" "Location List一覧") - (mk "xs" "Trouble symbols toggle" "シンボル一覧") - (mk "xw" "Trouble lsp toggle" "LSP一覧") - - # Quickfix / Location list navigation - (mk "]q" "cnext" "次のQuickfixへ") - (mk "[q" "cprev" "前のQuickfixへ") - (mk "]l" "lnext" "次のLocation Listへ") - (mk "[l" "lprev" "前のLocation Listへ") - - # Window navigation - (mk "" "h" "左のウィンドウへ") - (mk "" "j" "下のウィンドウへ") - (mk "" "k" "上のウィンドウへ") - (mk "" "l" "右のウィンドウへ") - (mk "" "h" "左のウィンドウへ") - (mk "" "j" "下のウィンドウへ") - (mk "" "k" "上のウィンドウへ") - (mk "" "l" "右のウィンドウへ") - - # Alternate file / previous file - (mk "" "" "直前のファイルへ戻る") - (mk "w-" "" "直前のファイルをsplitで開く") - - # Buffer Bar - (mk "[b" "BufferPrevious" "前のバッファーに移動") - (mk "]b" "BufferNext" "次のバッファーに移動") - (mk "bc" "BufferClose" "バッファーを閉じる") - - # Git Conflict - (mk "gco" "GitConflictChooseOurs" "現在のブランチを選択") - (mk "gct" "GitConflictChooseTheirs" "相手のブランチを選択") - (mk "gcb" "GitConflictChooseBoth" "両方を選択") - (mk "gcx" "GitConflictListQf" "コンフリクト一覧") - (mk "]x" "GitConflictNextConflict" "次のコンフリクト") - (mk "[x" "GitConflictPrevConflict" "前のコンフリクト") - - # Git - (mk "gl" "LazyGit" "LazyGitを開く") - (mk "gd" "DiffviewOpen" "差分を開く") - (mk "gH" "DiffviewFileHistory" "リポジトリ履歴") - (mk "gh" "DiffviewFileHistory %" "現在ファイルの履歴") - (mk "gq" "DiffviewClose" "差分を閉じる") - - # Markview - (mk "mp" "Markview splitToggle" "Markdownプレビュー") - - # Zen Mode - (mk "zz" "ZenMode" "Zen Modeを開く/閉じる") - - # UFO (folding) - (mkRaw "zR" "require('ufo').openAllFolds" "全て展開") - (mkRaw "zM" "require('ufo').closeAllFolds" "全て折りたたむ") - - # Dropbar - (mkRaw "dp" "function() require('dropbar.api').pick() end" "dropbarでナビゲート") - - # Snacks - (mkRaw "sd" "function() Snacks.dim.toggle() end" "Dimモードをトグル") - - # Flash - (mkRaw "s" "function() require('flash').jump() end" "Flashジャンプ") - (mkRaw "S" "function() require('flash').treesitter() end" "Flashツリーシッタ選択") - - # Todo Comments - (mk "]t" "TodoNext" "次のTODO") - (mk "[t" "TodoPrev" "前のTODO") - (mkRaw "ft" "function() Snacks.picker.todo_comments() end" "TODO一覧") - - # Spectre - (mkRaw "sr" "function() require('spectre').toggle() end" "検索・置換") - - # Snacks Picker: generic - (mkRaw "ff" "function() Snacks.picker.files() end" "ファイルを探す") - (mkRaw "fg" "function() Snacks.picker.grep() end" "文字列を全文検索") - (mkRaw "fb" "function() Snacks.picker.buffers() end" "開いているバッファを探す") - (mkRaw "fh" "function() Snacks.picker.help() end" "ヘルプ項目を探す") - (mkRaw "fk" "function() Snacks.picker.keymaps() end" "キーマップを探す") - (mkRaw "fc" "function() Snacks.picker.commands() end" "コマンドを探す") - - # Snacks Picker: code navigation - (mkRaw "fs" "function() Snacks.picker.lsp_symbols() end" "現在ファイルのシンボルを探す") - (mkRaw "fS" "function() Snacks.picker.lsp_workspace_symbols() end" "ワークスペース全体のシンボルを探す") - (mkRaw "fr" "function() Snacks.picker.registers() end" "レジスタを探す") - (mkRaw "fj" "function() Snacks.picker.jumps() end" "ジャンプ履歴を探す") - (mkRaw "fq" "function() Snacks.picker.qflist() end" "Quickfixを探す") - (mkRaw "fl" "function() Snacks.picker.loclist() end" "Location Listを探す") - ]; - }; -} diff --git a/modules/home/nixvim/language.nix b/modules/home/nixvim/language.nix deleted file mode 100644 index 3e66375..0000000 --- a/modules/home/nixvim/language.nix +++ /dev/null @@ -1,13 +0,0 @@ -{...}: { - programs.nixvim = { - env = { - LANG = "ja_JP.UTF-8"; - LC_MESSAGES = "ja_JP.UTF-8"; - }; - - extraConfigLua = '' - vim.cmd.language("ja_JP.utf8") - vim.opt.helplang = { "ja", "en" } - ''; - }; -} diff --git a/modules/home/nixvim/lsp.nix b/modules/home/nixvim/lsp.nix deleted file mode 100644 index 171ad5e..0000000 --- a/modules/home/nixvim/lsp.nix +++ /dev/null @@ -1,65 +0,0 @@ -{...}: { - programs.nixvim = { - plugins.lsp = { - enable = true; - - servers = { - # TypeScript / JavaScript - vtsls = { - enable = true; - packageFallback = true; - rootMarkers = [ - "pnpm-workspace.yaml" - "package.json" - "tsconfig.json" - "jsconfig.json" - ".git" - ]; - extraOptions.settings.typescript.locale = "ja"; - }; - - # Biome for lint / format - biome = { - enable = true; - packageFallback = true; - rootMarkers = [ - "biome.json" - "biome.jsonc" - "package.json" - "pnpm-workspace.yaml" - ".git" - ]; - }; - - # Frontend / config languages - tailwindcss.enable = true; - cssls.enable = true; - jsonls.enable = true; - yamlls.enable = true; - lua_ls.enable = true; - nixd.enable = true; - - # Other languages - rust_analyzer = { - enable = true; - installCargo = true; - installRustc = true; - }; - svelte.enable = true; - ty.enable = true; - ruff.enable = true; - astro.enable = true; - gopls.enable = true; - }; - }; - - # Diagnostic UI - diagnostic.settings = { - virtual_text = true; - float = { - border = "rounded"; - source = true; - }; - }; - }; -} diff --git a/modules/home/nixvim/options.nix b/modules/home/nixvim/options.nix deleted file mode 100644 index 5f7c3e4..0000000 --- a/modules/home/nixvim/options.nix +++ /dev/null @@ -1,50 +0,0 @@ -{...}: { - programs.nixvim = { - opts = { - # display - number = true; - relativenumber = true; - signcolumn = "yes"; - termguicolors = true; - - # action - mouse = "a"; - clipboard = "unnamedplus"; - updatetime = 200; - timeoutlen = 300; - undofile = true; - - # display - wrap = false; - scrolloff = 8; - - # search - ignorecase = true; - smartcase = true; - - # window split - splitright = true; - splitbelow = true; - - # indent - tabstop = 2; - shiftwidth = 2; - expandtab = true; - - # file encoding - encoding = "utf-8"; - fileencoding = "utf-8"; - fileencodings = "utf-8,sjis,euc-jp,iso-2022-jp"; - - # invisible characters - list = true; - listchars = "tab:»-,trail:-,extends:»,precedes:«,nbsp:%"; - }; - - globals = { - mapleader = " "; - maplocalleader = " "; - clipboard = "osc52"; - }; - }; -} diff --git a/modules/home/nixvim/plugins/default.nix b/modules/home/nixvim/plugins/default.nix deleted file mode 100644 index 8657654..0000000 --- a/modules/home/nixvim/plugins/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - imports = [ - ./ui - ./editor - ]; -} diff --git a/modules/home/nixvim/plugins/editor/autopairs.nix b/modules/home/nixvim/plugins/editor/autopairs.nix deleted file mode 100644 index 810bcf2..0000000 --- a/modules/home/nixvim/plugins/editor/autopairs.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - programs.nixvim.plugins.nvim-autopairs.enable = true; -} diff --git a/modules/home/nixvim/plugins/editor/blink-cmp.nix b/modules/home/nixvim/plugins/editor/blink-cmp.nix deleted file mode 100644 index ba01396..0000000 --- a/modules/home/nixvim/plugins/editor/blink-cmp.nix +++ /dev/null @@ -1,47 +0,0 @@ -{...}: { - programs.nixvim.plugins.blink-cmp = { - enable = true; - setupLspCapabilities = true; - - settings = { - keymap = { - preset = "enter"; - - "" = ["show"]; - "" = ["scroll_documentation_up"]; - "" = ["hide"]; - "" = ["scroll_documentation_down"]; - - "" = [ - "accept" - { - __raw = '' - function() - local ok, copilot = pcall(require, "copilot.suggestion") - if ok and copilot.is_visible() then - copilot.accept() - return true - end - end - ''; - } - "fallback" - ]; - "" = ["select_prev" "fallback"]; - "" = ["select_next" "fallback"]; - "" = ["select_prev" "fallback"]; - }; - - completion.list.selection = { - preselect = true; - auto_insert = false; - }; - - sources.default = [ - "lsp" - "path" - "buffer" - ]; - }; - }; -} diff --git a/modules/home/nixvim/plugins/editor/comment.nix b/modules/home/nixvim/plugins/editor/comment.nix deleted file mode 100644 index 2f68e6c..0000000 --- a/modules/home/nixvim/plugins/editor/comment.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - programs.nixvim.plugins.comment.enable = true; -} diff --git a/modules/home/nixvim/plugins/editor/conform.nix b/modules/home/nixvim/plugins/editor/conform.nix deleted file mode 100644 index 16f6e1e..0000000 --- a/modules/home/nixvim/plugins/editor/conform.nix +++ /dev/null @@ -1,24 +0,0 @@ -{...}: { - programs.nixvim.plugins."conform-nvim" = { - enable = true; - settings = { - formatters_by_ft = { - javascript.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }''; - javascriptreact.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }''; - typescript.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }''; - typescriptreact.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }''; - json.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }''; - yaml.__raw = ''{ "prettierd", "prettier", stop_after_first = true }''; - markdown.__raw = ''{ "prettierd", "prettier", stop_after_first = true }''; - lua = ["stylua"]; - nix = ["alejandra"]; - sh = ["shfmt"]; - }; - format_on_save.__raw = '' - function(_) - return { timeout_ms = 1000, lsp_format = "fallback" } - end - ''; - }; - }; -} diff --git a/modules/home/nixvim/plugins/editor/copilot.nix b/modules/home/nixvim/plugins/editor/copilot.nix deleted file mode 100644 index 783bfd1..0000000 --- a/modules/home/nixvim/plugins/editor/copilot.nix +++ /dev/null @@ -1,11 +0,0 @@ -{...}: { - programs.nixvim.plugins.copilot-lua = { - enable = true; - settings = { - suggestion = { - auto_trigger = true; - keymap.enabled = false; - }; - }; - }; -} diff --git a/modules/home/nixvim/plugins/editor/default.nix b/modules/home/nixvim/plugins/editor/default.nix deleted file mode 100644 index bb6c431..0000000 --- a/modules/home/nixvim/plugins/editor/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{...}: { - imports = [ - ./snacks.nix - ./treesitter.nix - ./blink-cmp.nix - ./gitsigns.nix - ./comment.nix - ./autopairs.nix - ./lsp-signature.nix - ./copilot.nix - ./trouble.nix - ./conform.nix - ./surround.nix - ./git.nix - ./git-conflict.nix - ./glance.nix - ./flash.nix - ./todo-comments.nix - ./spectre.nix - ./wakatime.nix - ]; -} diff --git a/modules/home/nixvim/plugins/editor/flash.nix b/modules/home/nixvim/plugins/editor/flash.nix deleted file mode 100644 index 3396c61..0000000 --- a/modules/home/nixvim/plugins/editor/flash.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim = { - extraPlugins = [ pkgs.vimPlugins.flash-nvim ]; - extraConfigLua = '' - require("flash").setup() - ''; - }; -} diff --git a/modules/home/nixvim/plugins/editor/git-conflict.nix b/modules/home/nixvim/plugins/editor/git-conflict.nix deleted file mode 100644 index 84d119a..0000000 --- a/modules/home/nixvim/plugins/editor/git-conflict.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim = { - extraPlugins = [ pkgs.vimPlugins.git-conflict-nvim ]; - extraConfigLua = '' - require("git-conflict").setup() - ''; - }; -} diff --git a/modules/home/nixvim/plugins/editor/git.nix b/modules/home/nixvim/plugins/editor/git.nix deleted file mode 100644 index 713f896..0000000 --- a/modules/home/nixvim/plugins/editor/git.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim = { - extraPackages = [ pkgs.lazygit ]; - - plugins = { - lazygit.enable = true; - diffview.enable = true; - }; - }; -} diff --git a/modules/home/nixvim/plugins/editor/gitsigns.nix b/modules/home/nixvim/plugins/editor/gitsigns.nix deleted file mode 100644 index eba120a..0000000 --- a/modules/home/nixvim/plugins/editor/gitsigns.nix +++ /dev/null @@ -1,15 +0,0 @@ -{...}: { - # git change view - programs.nixvim.plugins.gitsigns = { - enable = true; - settings = { - signs = { - add = {text = "+";}; - change = {text = "~";}; - delete = {text = "_";}; - topdelete = {text = "‾";}; - changedelete = {text = "~";}; - }; - }; - }; -} diff --git a/modules/home/nixvim/plugins/editor/glance.nix b/modules/home/nixvim/plugins/editor/glance.nix deleted file mode 100644 index d5b6c24..0000000 --- a/modules/home/nixvim/plugins/editor/glance.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim = { - extraPlugins = [ pkgs.vimPlugins.glance-nvim ]; - extraConfigLua = '' - require("glance").setup() - ''; - }; -} diff --git a/modules/home/nixvim/plugins/editor/lsp-signature.nix b/modules/home/nixvim/plugins/editor/lsp-signature.nix deleted file mode 100644 index b9a2711..0000000 --- a/modules/home/nixvim/plugins/editor/lsp-signature.nix +++ /dev/null @@ -1,11 +0,0 @@ -{...}: { - programs.nixvim.plugins.lsp-signature = { - enable = true; - settings = { - hint_enable = true; - hint_prefix = " "; - floating_window = true; - bind = true; - }; - }; -} diff --git a/modules/home/nixvim/plugins/editor/snacks.nix b/modules/home/nixvim/plugins/editor/snacks.nix deleted file mode 100644 index 4af9f49..0000000 --- a/modules/home/nixvim/plugins/editor/snacks.nix +++ /dev/null @@ -1,31 +0,0 @@ -{pkgs, ...}: { - programs.nixvim = { - extraPlugins = [pkgs.vimPlugins.snacks-nvim]; - - extraConfigLua = '' - require("snacks").setup({ - picker = { - enabled = true, - - actions = require("trouble.sources.snacks").actions, - - win = { - input = { - keys = { - [""] = { - "trouble_open", - mode = { "n", "i" }, - }, - }, - }, - }, - }, - - notifier = { enabled = true }, - words = { enabled = true }, - scroll = { enabled = true }, - dim = { enabled = true }, - }) - ''; - }; -} diff --git a/modules/home/nixvim/plugins/editor/spectre.nix b/modules/home/nixvim/plugins/editor/spectre.nix deleted file mode 100644 index 98a1403..0000000 --- a/modules/home/nixvim/plugins/editor/spectre.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim = { - extraPackages = [ pkgs.ripgrep ]; - extraPlugins = [ pkgs.vimPlugins.nvim-spectre ]; - extraConfigLua = '' - require("spectre").setup() - ''; - }; -} diff --git a/modules/home/nixvim/plugins/editor/surround.nix b/modules/home/nixvim/plugins/editor/surround.nix deleted file mode 100644 index a6575b0..0000000 --- a/modules/home/nixvim/plugins/editor/surround.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - programs.nixvim.plugins.nvim-surround.enable = true; -} diff --git a/modules/home/nixvim/plugins/editor/todo-comments.nix b/modules/home/nixvim/plugins/editor/todo-comments.nix deleted file mode 100644 index 495eb25..0000000 --- a/modules/home/nixvim/plugins/editor/todo-comments.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim = { - extraPlugins = [ pkgs.vimPlugins.todo-comments-nvim ]; - extraConfigLua = '' - require("todo-comments").setup() - ''; - }; -} diff --git a/modules/home/nixvim/plugins/editor/treesitter.nix b/modules/home/nixvim/plugins/editor/treesitter.nix deleted file mode 100644 index 62b8fd4..0000000 --- a/modules/home/nixvim/plugins/editor/treesitter.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim = { - plugins.treesitter = { - enable = true; - settings = { - highlight.enable = true; - indent.enable = true; - }; - }; - - extraPlugins = [ pkgs.vimPlugins.nvim-ts-autotag ]; - extraConfigLua = '' - require("nvim-ts-autotag").setup() - ''; - }; -} diff --git a/modules/home/nixvim/plugins/editor/trouble.nix b/modules/home/nixvim/plugins/editor/trouble.nix deleted file mode 100644 index b702029..0000000 --- a/modules/home/nixvim/plugins/editor/trouble.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - programs.nixvim.plugins.trouble.enable = true; -} diff --git a/modules/home/nixvim/plugins/editor/wakatime.nix b/modules/home/nixvim/plugins/editor/wakatime.nix deleted file mode 100644 index 4918da6..0000000 --- a/modules/home/nixvim/plugins/editor/wakatime.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim.extraPlugins = [ pkgs.vimPlugins.vim-wakatime ]; -} diff --git a/modules/home/nixvim/plugins/ui/barbar.nix b/modules/home/nixvim/plugins/ui/barbar.nix deleted file mode 100644 index 2d9926a..0000000 --- a/modules/home/nixvim/plugins/ui/barbar.nix +++ /dev/null @@ -1,26 +0,0 @@ -{...}: { - programs.nixvim.plugins.barbar = { - enable = true; - settings = { - animation = false; - auto_hide = 1; - tabpages = true; - clickable = true; - focus_on_close = "left"; - - icons = { - button = "󰅖"; - separator = { - left = "▎"; - right = ""; - }; - separator_at_end = false; - filetype.enabled = true; - }; - - sidebar_filetypes = { - neo-tree = true; - }; - }; - }; -} diff --git a/modules/home/nixvim/plugins/ui/blankline.nix b/modules/home/nixvim/plugins/ui/blankline.nix deleted file mode 100644 index 657f113..0000000 --- a/modules/home/nixvim/plugins/ui/blankline.nix +++ /dev/null @@ -1,20 +0,0 @@ -{...}: { - programs.nixvim.plugins.indent-blankline = { - enable = true; - settings = { - scope = { - enabled = true; - show_start = true; - show_end = true; - }; - exclude = { - filetypes = [ - "help" - "neo-tree" - "toggleterm" - "lazy" - ]; - }; - }; - }; -} diff --git a/modules/home/nixvim/plugins/ui/colorizer.nix b/modules/home/nixvim/plugins/ui/colorizer.nix deleted file mode 100644 index acb3d20..0000000 --- a/modules/home/nixvim/plugins/ui/colorizer.nix +++ /dev/null @@ -1,23 +0,0 @@ -{...}: { - programs.nixvim.plugins.colorizer = { - enable = true; - - settings = { - filetypes = ["*" "!markdown"]; - user_commands = true; - - options = { - parsers = { - css = true; - tailwind = { - enable = true; - lsp = true; - update_names = true; - }; - }; - - display.mode = "background"; - }; - }; - }; -} diff --git a/modules/home/nixvim/plugins/ui/default.nix b/modules/home/nixvim/plugins/ui/default.nix deleted file mode 100644 index fcac723..0000000 --- a/modules/home/nixvim/plugins/ui/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{...}: { - imports = [ - ./lualine.nix - ./neo-tree.nix - ./blankline.nix - ./which-key.nix - ./web-devicons.nix - ./toggleterm.nix - ./treesitter.nix - ./barbar.nix - ./lightbulb.nix - ./colorizer.nix - ./dropbar.nix - ./scrollbar.nix - ./ufo.nix - ./zen-mode.nix - ./markview.nix - ]; -} diff --git a/modules/home/nixvim/plugins/ui/dropbar.nix b/modules/home/nixvim/plugins/ui/dropbar.nix deleted file mode 100644 index 586aff5..0000000 --- a/modules/home/nixvim/plugins/ui/dropbar.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - programs.nixvim.plugins.dropbar.enable = true; -} diff --git a/modules/home/nixvim/plugins/ui/lightbulb.nix b/modules/home/nixvim/plugins/ui/lightbulb.nix deleted file mode 100644 index f862079..0000000 --- a/modules/home/nixvim/plugins/ui/lightbulb.nix +++ /dev/null @@ -1,6 +0,0 @@ -{...}: { - programs.nixvim.plugins.nvim-lightbulb = { - enable = true; - settings.autocmd.enabled = true; - }; -} diff --git a/modules/home/nixvim/plugins/ui/lualine.nix b/modules/home/nixvim/plugins/ui/lualine.nix deleted file mode 100644 index 328f3cf..0000000 --- a/modules/home/nixvim/plugins/ui/lualine.nix +++ /dev/null @@ -1,25 +0,0 @@ -{...}: { - programs.nixvim.plugins.lualine = { - enable = true; - settings.sections.lualine_x = [ - { - __raw = '' - function() - local ok, conform = pcall(require, "conform") - if not ok then return "" end - local formatters = conform.list_formatters(0) - for _, f in ipairs(formatters) do - if f.available then - return "󰛖 " .. f.name - end - end - return "" - end - ''; - } - "encoding" - "fileformat" - "filetype" - ]; - }; -} diff --git a/modules/home/nixvim/plugins/ui/markview.nix b/modules/home/nixvim/plugins/ui/markview.nix deleted file mode 100644 index af2a0e1..0000000 --- a/modules/home/nixvim/plugins/ui/markview.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim = { - extraPlugins = [ pkgs.vimPlugins.markview-nvim ]; - extraConfigLua = '' - require("markview").setup({ initial_state = false }) - ''; - }; -} diff --git a/modules/home/nixvim/plugins/ui/neo-tree.nix b/modules/home/nixvim/plugins/ui/neo-tree.nix deleted file mode 100644 index e151a65..0000000 --- a/modules/home/nixvim/plugins/ui/neo-tree.nix +++ /dev/null @@ -1,37 +0,0 @@ -{...}: { - programs.nixvim = { - plugins.neo-tree = { - enable = true; - settings = { - close_if_last_window = true; - - filesystem = { - follow_current_file = { - enabled = true; - leave_dirs_open = true; - }; - - filtered_items = { - visible = true; - hide_dotfiles = false; - hide_gitignored = true; - hide_ignored = false; - hide_hidden = false; - - hide_by_name = []; - hide_by_pattern = []; - - always_show = []; - always_show_by_pattern = []; - - never_show = [ - ".DS_Store" - "thumbs.db" - ]; - never_show_by_pattern = []; - }; - }; - }; - }; - }; -} diff --git a/modules/home/nixvim/plugins/ui/scrollbar.nix b/modules/home/nixvim/plugins/ui/scrollbar.nix deleted file mode 100644 index c31d384..0000000 --- a/modules/home/nixvim/plugins/ui/scrollbar.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim = { - extraPlugins = [ pkgs.vimPlugins.nvim-scrollbar ]; - extraConfigLua = '' - require("scrollbar").setup() - ''; - }; -} diff --git a/modules/home/nixvim/plugins/ui/toggleterm.nix b/modules/home/nixvim/plugins/ui/toggleterm.nix deleted file mode 100644 index ccdee4b..0000000 --- a/modules/home/nixvim/plugins/ui/toggleterm.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - programs.nixvim.plugins.toggleterm.enable = true; -} diff --git a/modules/home/nixvim/plugins/ui/treesitter.nix b/modules/home/nixvim/plugins/ui/treesitter.nix deleted file mode 100644 index b43df40..0000000 --- a/modules/home/nixvim/plugins/ui/treesitter.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - programs.nixvim.plugins."treesitter-context".enable = true; -} diff --git a/modules/home/nixvim/plugins/ui/ufo.nix b/modules/home/nixvim/plugins/ui/ufo.nix deleted file mode 100644 index 91319d4..0000000 --- a/modules/home/nixvim/plugins/ui/ufo.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim = { - opts = { - foldcolumn = "1"; - foldlevel = 99; - foldlevelstart = 99; - foldenable = true; - }; - - extraPlugins = [ - pkgs.vimPlugins.nvim-ufo - pkgs.vimPlugins.promise-async - ]; - - extraConfigLua = '' - require("ufo").setup({ - provider_selector = function() - return { "treesitter", "indent" } - end, - }) - ''; - }; -} diff --git a/modules/home/nixvim/plugins/ui/web-devicons.nix b/modules/home/nixvim/plugins/ui/web-devicons.nix deleted file mode 100644 index 4f251bf..0000000 --- a/modules/home/nixvim/plugins/ui/web-devicons.nix +++ /dev/null @@ -1,4 +0,0 @@ -{...}: { - # icon set preview - programs.nixvim.plugins.web-devicons.enable = true; -} diff --git a/modules/home/nixvim/plugins/ui/which-key.nix b/modules/home/nixvim/plugins/ui/which-key.nix deleted file mode 100644 index 9499982..0000000 --- a/modules/home/nixvim/plugins/ui/which-key.nix +++ /dev/null @@ -1,4 +0,0 @@ -{...}: { - # key map help - programs.nixvim.plugins.which-key.enable = true; -} diff --git a/modules/home/nixvim/plugins/ui/zen-mode.nix b/modules/home/nixvim/plugins/ui/zen-mode.nix deleted file mode 100644 index 562eb5b..0000000 --- a/modules/home/nixvim/plugins/ui/zen-mode.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ pkgs, ... }: { - programs.nixvim = { - extraPlugins = [ pkgs.vimPlugins.zen-mode-nvim ]; - extraConfigLua = '' - require("zen-mode").setup() - ''; - }; -} diff --git a/modules/home/noctalia.nix b/modules/home/noctalia.nix deleted file mode 100644 index 0d40ade..0000000 --- a/modules/home/noctalia.nix +++ /dev/null @@ -1,168 +0,0 @@ -{ - pkgs, - inputs, - ... -}: { - # import the home manager module - imports = [ - inputs.noctalia.homeModules.default - ]; - - # configure options - programs.noctalia-shell = { - enable = true; - settings = { - # configure noctalia here; defaults will - # be deep merged with these attributes. - bar = { - density = "default"; - position = "top"; - showCapsule = true; - backgroundOpacity = 0.8; - floating = true; - widgets = { - left = [ - { - id = "WiFi"; - } - { - id = "CustomButton"; - icon = "access-point"; - leftClickExec = "nm-connection-editor"; - } - { - id = "Bluetooth"; - } - { - id = "SystemMonitor"; - } - { - id = "Taskbar"; - } - { - id = "ActiveWindow"; - } - ]; - center = [ - { - hideUnoccupied = false; - id = "Workspace"; - labelMode = "none"; - } - ]; - right = [ - { - id = "MediaMini"; - } - { - id = "NotificationHistory"; - } - { - displayMode = "alwaysShow"; - id = "Battery"; - warningThreshold = 30; - } - { - displayMode = "alwaysShow"; - id = "Volume"; - } - { - displayMode = "alwaysShow"; - id = "Brightness"; - } - { - formatHorizontal = "HH:mm"; - formatVertical = "HH mm"; - id = "Clock"; - useMonospacedFont = true; - usePrimaryColor = true; - } - { - id = "ControlCenter"; - useDistroLogo = true; - } - ]; - }; - }; - colorSchemes.predefinedScheme = "dracula"; - general = { - avatarImage = "~/.face"; - radiusRatio = 0.2; - }; - location = { - monthBeforeDay = true; - weatherEnabled = false; - name = "Tokyo"; - }; - wallpaper = { - enabled = true; - directory = "~/.wallpapers/"; - setWallpaperOnAllMonitors = true; - linkLightAndDarkWallpapers = true; - fillMode = "crop"; - randomEnabled = true; - randomIntervalSec = 60; - transitionDuration = 1500; - }; - dock = { - enabled = true; - displayMode = "auto_hide"; - backgroundOpacity = 0.8; - floatingRatio = 1; - size = 1; - onlySameOutput = true; - monitors = ["eDP-1"]; - pinnedApps = ["com.mitchellh.ghostty" "org.gnome.Nautilus" "google-chrome" "code"]; - colorizeIcons = false; - }; - controlCenter = { - position = "close_to_bar_button"; - shortcuts = { - left = [ - { - id = "WiFi"; - } - { - id = "Bluetooth"; - } - { - id = "ScreenRecorder"; - } - { - id = "WallpaperSelector"; - } - ]; - right = [ - { - id = "Notifications"; - } - { - id = "NightLight"; - } - ]; - }; - cards = [ - { - enabled = true; - id = "profile-card"; - } - { - enabled = true; - id = "shortcuts-card"; - } - { - enabled = true; - id = "audio-card"; - } - { - enabled = true; - id = "media-sysmon-card"; - } - ]; - }; - }; - # this may also be a string or a path to a JSON file, - # but in this case must include *all* settings. - }; -} - diff --git a/modules/home/ssh.nix b/modules/home/ssh.nix deleted file mode 100644 index e45ff6b..0000000 --- a/modules/home/ssh.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ - config, - lib, - pkgs, - host, - ... -}: -{ - - home.packages = [ pkgs.openssh ]; - - programs.ssh = { - enable = true; - - matchBlocks = { - "monitor.moons14.com" = { - host = "monitor.moons14.com"; - identityFile = "~/.ssh/id_ed25519_sk_rk"; - identitiesOnly = true; - }; - - "dev-1.moons14.com" = { - host = "dev-1.moons14.com"; - identityFile = "~/.ssh/id_ed25519_sk_rk"; - identitiesOnly = true; - }; - - "service-1.moons14.com" = { - host = "service-1.moons14.com"; - identityFile = "~/.ssh/id_ed25519_sk_rk"; - identitiesOnly = true; - }; - }; - - enableDefaultConfig = false; - - matchBlocks."*" = { - identityFile = "~/.ssh/id_ed25519"; - extraOptions.AddKeysToAgent = "yes"; - }; - }; - - home.activation.generateSshKey = lib.hm.dag.entryAfter [ "writeBoundary" ] '' - key="$HOME/.ssh/id_ed25519" - if [ ! -f "$key" ]; then - umask 077 - mkdir -p "$HOME/.ssh" - ${pkgs.openssh}/bin/ssh-keygen -t ed25519 -N "" -f "$key" \ - -C "moons@$(${host} || echo host)" - echo "Generated SSH key at $key" - fi - ''; - - programs.git = { - enable = true; - - signing = { - key = "~/.ssh/id_ed25519.pub"; - signByDefault = true; - }; - - settings = { - gpg.format = "ssh"; - tag.gpgSign = true; - }; - }; -} diff --git a/modules/home/vicinae.nix b/modules/home/vicinae.nix deleted file mode 100644 index 0169104..0000000 --- a/modules/home/vicinae.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ - inputs, - pkgs, - ... -}: { - imports = [ - inputs.vicinae.homeManagerModules.default - ]; - - services.vicinae = { - enable = true; - systemd = { - enable = true; - autoStart = true; - environment = { - USE_LAYER_SHELL = 1; - }; - }; - - settings = { - font.size = 11; - close_on_focus_loss = true; - consider_preedit = true; - pop_to_root_on_close = true; - favicon_service = "twenty"; - search_files_in_root = true; - theme = { - light = { - name = "dracula"; - icon_theme = "default"; - }; - dark = { - name = "vicinae-light"; - icon_theme = "default"; - }; - }; - window = { - csd = true; - opacity = 0.95; - rounding = 10; - }; - }; - extensions = with inputs.vicinae-extensions.packages.${pkgs.stdenv.hostPlatform.system}; [ - bluetooth - nix - power-profile - # Extension names can be found in the link below, it's just the folder names - ]; - }; -} diff --git a/modules/home/vscode.nix b/modules/home/vscode.nix deleted file mode 100644 index d198d54..0000000 --- a/modules/home/vscode.nix +++ /dev/null @@ -1,283 +0,0 @@ -{ - pkgs, - lib, - ... -}: let - vsc = pkgs.vscode-extensions; - inherit (lib) recursiveUpdate; - - rustLibclangPath = pkgs.lib.makeLibraryPath [pkgs.llvmPackages_latest.libclang.lib]; - - rustBindgenExtraClangArgs = lib.concatStringsSep " " ( - (builtins.map (a: ''-I"${a}/include"'') [ - pkgs.glibc.dev - ]) - ++ [ - ''-I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"'' - ''-I"${pkgs.glib.dev}/include/glib-2.0"'' - ''-I${pkgs.glib.out}/lib/glib-2.0/include/'' - ] - ); - - layers = rec { - common = { - extensions = - (with vsc; [ - github.copilot - github.copilot-chat - dracula-theme.theme-dracula - ms-vscode-remote.vscode-remote-extensionpack - dbaeumer.vscode-eslint - ms-vscode-remote.remote-containers - ms-vscode-remote.remote-ssh - github.vscode-github-actions - github.vscode-pull-request-github - eamodio.gitlens - streetsidesoftware.code-spell-checker - ms-ceintl.vscode-language-pack-ja - ]) - ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ - { - name = "hadolint"; - publisher = "exiasr"; - version = "1.1.2"; - hash = "sha256-6GO1f8SP4CE8yYl87/tm60FdGHqHsJA4c2B6UKVdpgM="; - } - { - name = "chatgpt"; - publisher = "openai"; - version = "0.4.71"; - hash = "sha256-Q0le5rhVRgTDQXjIlhbzJOv/7+xC6JXwTp6fxZCP4ak="; - } - ]; - userSettings = { - "workbench.colorTheme" = "Dracula"; - "window.autoDetectColorScheme" = false; - "editor.formatOnSave" = true; - "editor.defaultFormatter" = "esbenp.prettier-vscode"; - "git.enableSmartCommit" = true; - "files.autoSave" = "onFocusChange"; - "git.confirmSync" = false; - "github.copilot.nextEditSuggestions.enabled" = true; - "editor.suggestOnTriggerCharacters" = true; - "editor.quickSuggestions" = { - other = true; - comments = false; - strings = true; - }; - "git.autofetch" = true; - "workbench.editor.enablePreview" = false; - }; - }; - - web = { - extensions = - (with vsc; [ - lokalise.i18n-ally - bradlc.vscode-tailwindcss - prisma.prisma - hashicorp.terraform - yoavbls.pretty-ts-errors - ]) - ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ - { - name = "pnpm-catalog-lens"; - publisher = "antfu"; - version = "1.0.0"; - hash = "sha256-mCMBVxZRIb3Jao1XSS7EQRQX3Y2vrkpAmy6ldSqZa9c="; - } - { - name = "explorer"; - publisher = "vitest"; - version = "1.32.1"; - hash = "sha256-MAfjS/oFfFuiE+Q2w6leSlao436QSw2fKjd7/BE/Q8Y="; - } - ]; - userSettings = {}; - }; - - web-biome = { - extensions = with vsc; [ - biomejs.biome - ]; - userSettings = { - "editor.defaultFormatter" = "biomejs.biome"; - "[typescript].editor.defaultFormatter" = "biomejs.biome"; - "[typescriptreact].editor.defaultFormatter" = "biomejs.biome"; - }; - }; - - web-oxc = { - extensions = pkgs.vscode-utils.extensionsFromVscodeMarketplace [ - { - name = "oxc-vscode"; - publisher = "oxc"; - version = "1.48.0"; - hash = "sha256-RZ7mLcLJyn7lR6w6Au6fZeguB3wtk8sIXb67lPnPnrc="; - } - ]; - userSettings = { - "editor.defaultFormatter" = "oxc.oxc-vscode"; - "[typescript].editor.defaultFormatter" = "oxc.oxc-vscode"; - "[typescriptreact].editor.defaultFormatter" = "oxc.oxc-vscode"; - }; - }; - - nix = { - extensions = with vsc; [ - bbenoist.nix - jnoortheen.nix-ide - ]; - userSettings = { - "nix.enableLanguageServer" = true; - "nix.serverPath" = "nil"; - "[nix]" = { - "editor.defaultFormatter" = "jnoortheen.nix-ide"; - }; - }; - }; - - jupyter = { - extensions = with vsc; [ - ms-toolsai.jupyter - ms-python.python - ]; - userSettings = {}; - }; - - java = { - extensions = ( - with vsc; [ - vscjava.vscode-java-pack - sonarsource.sonarlint-vscode - vscjava.vscode-java-debug - redhat.java - ] - ); - - userSettings = { - "java.jdt.ls.java.home" = "${pkgs.jdk25.home}"; - "java.configuration.runtimes" = [ - { - "name" = "JavaSE-25"; - "path" = "${pkgs.jdk25.home}"; - "default" = true; - } - ]; - - "editor.codeLens" = true; - "java.debug.settings.enableRunDebugCodeLens" = true; - - "java.jdt.ls.vmargs" = "-Xms256m -Xmx2G -XX:+UseG1GC -XX:+UseStringDeduplication"; - - "java.configuration.updateBuildConfiguration" = "interactive"; - - "java.maven.downloadSources" = true; - "java.eclipse.downloadSources" = true; - - "maven.executable.path" = "${pkgs.maven}/bin/mvn"; - - "[java]" = { - "editor.defaultFormatter" = "redhat.java"; - }; - }; - }; - - rust = { - extensions = with vsc; [ - rust-lang.rust-analyzer - vadimcn.vscode-lldb - serayuzgur.crates - tamasfe.even-better-toml - ]; - - userSettings = { - "[rust]" = { - "editor.defaultFormatter" = "rust-lang.rust-analyzer"; - "editor.formatOnSave" = true; - "editor.codeActionsOnSave" = { - "source.organizeImports" = true; - "source.fixAll" = true; - }; - }; - - "rust-analyzer.checkOnSave" = true; - "rust-analyzer.check.command" = "clippy"; - - "rust-analyzer.cargo.buildScripts.enable" = true; - "rust-analyzer.procMacro.enable" = true; - - "rust-analyzer.cargo.targetDir" = true; - - "rust-analyzer.cargo.extraEnv" = { - "LIBCLANG_PATH" = rustLibclangPath; - "BINDGEN_EXTRA_CLANG_ARGS" = rustBindgenExtraClangArgs; - }; - - "rust-analyzer.lens.enable" = true; - "rust-analyzer.lens.implementations.enable" = true; - "rust-analyzer.lens.references.adt.enable" = true; - "rust-analyzer.lens.references.enumVariant.enable" = true; - "rust-analyzer.lens.references.method.enable" = true; - "rust-analyzer.lens.references.trait.enable" = true; - - "files.watcherExclude" = { - "**/target/**" = true; - }; - "search.exclude" = { - "**/target/**" = true; - }; - }; - }; - }; - - combine = ( - ls: - builtins.foldl' - (acc: l: { - extensions = acc.extensions ++ (l.extensions or []); - userSettings = recursiveUpdate acc.userSettings (l.userSettings or {}); - }) - { - extensions = []; - userSettings = {}; - } - ls - ); - - # mkProfile [layers...] { extensions = [...]; userSettings = { ... }; } - mkProfile = layersList: extras: let - base = combine layersList; - in { - extensions = base.extensions ++ (extras.extensions or []); - userSettings = recursiveUpdate base.userSettings (extras.userSettings or {}); - }; -in { - nixpkgs.config.allowUnfree = true; - - programs.vscode = { - enable = true; - - profiles = { - default = mkProfile [layers.common] {}; - - nix = mkProfile [layers.common layers.nix] {}; - - web = mkProfile [layers.common layers.web layers.web-biome] {}; - - web-oxc = mkProfile [layers.common layers.web layers.web-oxc] {}; - - jupyter = mkProfile [layers.common layers.jupyter] {}; - - java = mkProfile [layers.common layers.java] {}; - - rust = mkProfile [layers.common layers.rust] {}; - }; - }; - - xdg.configFile."Code/User/locale.json".text = '' - { - "locale": "ja" - } - ''; -} diff --git a/modules/home/wallpaper.nix b/modules/home/wallpaper.nix deleted file mode 100644 index 6013794..0000000 --- a/modules/home/wallpaper.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - pkgs, - lib, - ... -}: let - walls = pkgs.fetchFromGitHub { - owner = "moons-14"; - repo = "wallpapers"; - rev = "cc3256f4aaf2c8e7d16fb000b1ee251af54085db"; - hash = "sha256-emQ/FqKqMq3YI5bLx8gBZg/ZE72OG9Ilh71ggq78WdQ="; - }; -in { - home.file.".wallpapers" = { - source = walls; - recursive = true; - }; - - home.file.".cache/noctalia/wallpapers.json" = { - text = builtins.toJSON { - defaultWallpaper = "~/.wallpapers/1.jpg"; - wallpapers = { - "DP-1" = "~/.wallpapers/1.jpg"; - }; - }; - }; -} diff --git a/modules/home/zellij.nix b/modules/home/zellij.nix deleted file mode 100644 index c38d526..0000000 --- a/modules/home/zellij.nix +++ /dev/null @@ -1,61 +0,0 @@ -{...}: { - programs.zellij = { - enable = true; - - enableZshIntegration = false; - - settings = { - pane_frames = true; - default_mode = "locked"; - default_shell = "/run/current-system/sw/bin/zsh"; - }; - - extraConfig = '' - keybinds { - locked { - bind "Ctrl g" { SwitchToMode "normal"; } - bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; } - bind "Alt j" "Alt Down" { MoveFocus "Down"; } - bind "Alt k" "Alt Up" { MoveFocus "Up"; } - bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; } - bind "Alt n" { NewPane; } - bind "Alt t" { NewTab; } - bind "Alt H" { Resize "Increase Left"; } - bind "Alt J" { Resize "Increase Down"; } - bind "Alt K" { Resize "Increase Up"; } - bind "Alt L" { Resize "Increase Right"; } - } - normal { - bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; } - bind "Alt j" "Alt Down" { MoveFocus "Down"; } - bind "Alt k" "Alt Up" { MoveFocus "Up"; } - bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; } - bind "Alt n" { NewPane; } - bind "Alt t" { NewTab; } - bind "Alt H" { Resize "Increase Left"; } - bind "Alt J" { Resize "Increase Down"; } - bind "Alt K" { Resize "Increase Up"; } - bind "Alt L" { Resize "Increase Right"; } - } - } - ''; - - layouts.dev = '' - layout { - pane split_direction="vertical" { - pane { - pane command="nvim" - pane stacked=true size="30%" { - pane expanded=true - pane - } - } - - pane size=1 borderless=true { - plugin location="zellij:compact-bar" - } - } - } - ''; - }; -} diff --git a/modules/home/zoom.nix b/modules/home/zoom.nix deleted file mode 100644 index 63d87c9..0000000 --- a/modules/home/zoom.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ pkgs, lib, ... }: -{ - nixpkgs.config.allowUnfreePredicate = pkg: - lib.getName pkg == "zoom-us"; - - home.packages = with pkgs; [ - zoom-us - ]; -} diff --git a/modules/home/zsh.nix b/modules/home/zsh.nix deleted file mode 100644 index 5c3e656..0000000 --- a/modules/home/zsh.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.zsh = { - enable = true; - enableCompletion = true; - - # Oh My Zsh - oh-my-zsh = { - enable = true; - theme = "robbyrussell"; - plugins = [ "git" ]; - }; - - autosuggestion.enable = true; - syntaxHighlighting.enable = true; - - initContent = '' - # ---- from gist: export / history size ---- - export HISTSIZE=999999999 - export HISTFILESIZE=999999999 - - # ---- from gist: setopt ---- - setopt extended_history - setopt hist_allow_clobber - setopt hist_fcntl_lock - setopt hist_find_no_dups - setopt hist_ignore_all_dups - setopt hist_ignore_dups - setopt hist_ignore_space - # setopt hist_no_functions - # setopt hist_no_store - setopt hist_reduce_blanks - setopt hist_save_no_dups - setopt hist_verify - setopt inc_append_history_time - - unsetopt SHARE_HISTORY - setopt APPEND_HISTORY - setopt INC_APPEND_HISTORY_TIME - - # ---- from gist: aliases ---- - alias docker-compose="docker compose" - alias clearsign='export GPG_TTY=$(tty) && openssl rand -hex 16 | gpg --clearsign' - ''; - }; -} diff --git a/overlays/default.nix b/overlays/default.nix deleted file mode 100644 index 368fac2..0000000 --- a/overlays/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ inputs, ... }: -{ -} \ No newline at end of file diff --git a/profiles/cli-minimal.nix b/profiles/cli-minimal.nix deleted file mode 100644 index 368bd5f..0000000 --- a/profiles/cli-minimal.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ ... }: -{ - imports = [ - ]; - - home-manager.users.moons.imports = [ - ]; -} \ No newline at end of file diff --git a/profiles/cli-server.nix b/profiles/cli-server.nix deleted file mode 100644 index 8be0bc9..0000000 --- a/profiles/cli-server.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ ... }: -{ - imports = [ - ./cli.nix - ]; - - home-manager.users.moons.imports = [ - - ]; -} \ No newline at end of file diff --git a/profiles/cli.nix b/profiles/cli.nix deleted file mode 100644 index 701ce85..0000000 --- a/profiles/cli.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ ... }: -{ - imports = [ - ./cli-minimal.nix - ]; - - home-manager.users.moons.imports = [ - - ]; -} \ No newline at end of file diff --git a/profiles/gui.nix b/profiles/gui.nix deleted file mode 100644 index 867f1b5..0000000 --- a/profiles/gui.nix +++ /dev/null @@ -1,27 +0,0 @@ -{...}: { - imports = [ - ./cli.nix - ./../modules/core/niri.nix - ./../modules/core/hyprland.nix - ./../modules/core/greetd.nix - ./../modules/core/noctalia.nix - ./../modules/core/gui.nix - ./../modules/core/kde.nix - ]; - - home-manager.users.moons.imports = [ - ./../modules/home/niri - ./../modules/home/vscode.nix - ./../modules/home/browser.nix - ./../modules/home/vicinae.nix - ./../modules/home/noctalia.nix - ./../modules/home/avatar.nix - ./../modules/home/ghostty - ./../modules/home/wallpaper.nix - ./../modules/home/lock.nix - ./../modules/home/discord.nix - ./../modules/home/nautilus.nix - ./../modules/home/gtk.nix - ./../modules/home/zoom.nix - ]; -} diff --git a/profiles/laptop.nix b/profiles/laptop.nix deleted file mode 100644 index 6fdbc9b..0000000 --- a/profiles/laptop.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ ... }: -{ - imports = [ - ./gui.nix - ./../modules/core/fingerprint.nix - ./../modules/core/power.nix - ./../modules/core/camera.nix - ]; - - home-manager.users.moons.imports = [ - - ]; -} \ No newline at end of file diff --git a/renovate.json b/renovate.json deleted file mode 100644 index 50a306a..0000000 --- a/renovate.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": ["config:recommended"], - - "nix": { - "enabled": true - }, - - "lockFileMaintenance": { - "enabled": true - }, - - "minimumReleaseAge": "7 days", - "minimumReleaseAgeBehaviour": "timestamp-required" -} diff --git a/shells/jupyter.nix b/shells/jupyter.nix deleted file mode 100644 index 36138af..0000000 --- a/shells/jupyter.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ pkgs }: -let - py = pkgs.python312; - pyEnv = py.withPackages ( - ps: with ps; [ - ipykernel - notebook - jupyterlab - numpy - pandas - matplotlib - scipy - scikit-learn - - pyathena - python-dotenv - plotly - seaborn - ] - ); -in -pkgs.mkShell { - name = "jupyter-notebook"; - - packages = with pkgs; [ - pyEnv - zsh - ]; - - PYTHONNOUSERSITE = "1"; - JUPYTER_CONFIG_DIR = "$PWD/.jupyter"; - IPYTHONDIR = "$PWD/.ipython"; - - shellHook = '' - set -e - - if command -v python >/dev/null; then - echo "📓 jupyter shell → python $(python -V | awk '{print $2}')" - fi - - if [ -z "''${ZSH_VERSION:-}" ] && [[ $- == *i* ]] && [ -t 1 ] && [ -z "''${NIX_SHELL_ZSH_ACTIVATED:-}" ]; then - export NIX_SHELL_ZSH_ACTIVATED=1 - exec ${pkgs.zsh}/bin/zsh -i - fi - ''; -} diff --git a/shells/next-web.nix b/shells/next-web.nix deleted file mode 100644 index 2b079a7..0000000 --- a/shells/next-web.nix +++ /dev/null @@ -1,66 +0,0 @@ -{ pkgs }: -let - node = pkgs.nodejs_24; -in -pkgs.mkShell { - name = "next-web"; - - packages = with pkgs; [ - node - nodePackages_latest.pnpm - nodePackages_latest.vercel - nodePackages_latest.prisma - zsh - openssl - pkg-config - jq - ngrok - ]; - - NODE_ENV = "development"; - - shellHook = '' - # corepack store under repo (avoid polluting home) - export COREPACK_HOME="$PWD/.corepack" - - # pnpm global bin dir (NixOS/zshでも確実に有効にする) - export PNPM_HOME="''${XDG_DATA_HOME:-$HOME/.local/share}/pnpm" - mkdir -p "$PNPM_HOME" - case ":$PATH:" in - *":$PNPM_HOME:"*) ;; - *) export PATH="$PNPM_HOME:$PATH" ;; - esac - - # Prisma engines from nixpkgs (avoid binaries.prisma.sh fetch on NixOS) - export PKG_CONFIG_PATH="${pkgs.openssl.dev}/lib/pkgconfig" - export PRISMA_FMT_BINARY="${pkgs.prisma-engines}/bin/prisma-fmt" - - # ---- show tool versions - if command -v node >/dev/null; then - echo "next-web shell -> node $(node -v)" - fi - if command -v pnpm >/dev/null; then - echo " pnpm $(pnpm --version)" - echo " PNPM_HOME=$PNPM_HOME" - fi - - # Activate packageManager from package.json if present. - if command -v corepack >/dev/null 2>&1; then - if [ -f package.json ] && command -v jq >/dev/null 2>&1 && jq -e '.packageManager' package.json >/dev/null; then - COREPACK_ENABLE_DOWNLOADS=1 corepack prepare --activate || true - fi - fi - - # ---- switch to zsh (interactive only). Don't break `nix develop -c ...` - if [ -z "''${ZSH_VERSION:-}" ] && [[ $- == *i* ]] && [ -t 1 ] && [ -z "''${NIX_SHELL_ZSH_ACTIVATED:-}" ]; then - export NIX_SHELL_ZSH_ACTIVATED=1 - exec ${pkgs.zsh}/bin/zsh -i - fi - ''; - - env = { - PRISMA_QUERY_ENGINE_LIBRARY = "${pkgs.prisma-engines}/lib/libquery_engine.node"; - PRISMA_QUERY_ENGINE_BINARY = "${pkgs.prisma-engines}/bin/query-engine"; - PRISMA_SCHEMA_ENGINE_BINARY = "${pkgs.prisma-engines}/bin/schema-engine"; - }; -} diff --git a/shells/rust/default.nix b/shells/rust/default.nix deleted file mode 100644 index 147c23b..0000000 --- a/shells/rust/default.nix +++ /dev/null @@ -1,49 +0,0 @@ -# ref: https://nixos.wiki/wiki/Rust - -{ pkgs ? import {} }: - let - overrides = (builtins.fromTOML (builtins.readFile ./rust-toolchain.toml)); - libPath = with pkgs; lib.makeLibraryPath [ - # load external libraries that you need in your rust project here - ]; -in - pkgs.mkShell rec { - nativeBuildInputs = [ pkgs.pkg-config ]; - buildInputs = with pkgs; [ - clang - # Replace llvmPackages with llvmPackages_X, where X is the latest LLVM version (at the time of writing, 16) - llvmPackages.bintools - rustup - ]; - - RUSTC_VERSION = overrides.toolchain.channel; - - # https://github.com/rust-lang/rust-bindgen#environment-variables - LIBCLANG_PATH = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ]; - - shellHook = '' - export PATH=$PATH:''${CARGO_HOME:-~/.cargo}/bin - export PATH=$PATH:''${RUSTUP_HOME:-~/.rustup}/toolchains/$RUSTC_VERSION-x86_64-unknown-linux-gnu/bin/ - ''; - - # Add precompiled library to rustc search path - RUSTFLAGS = (builtins.map (a: ''-L ${a}/lib'') [ - # add libraries here (e.g. pkgs.libvmi) - ]); - - LD_LIBRARY_PATH = libPath; - - # Add glibc, clang, glib, and other headers to bindgen search path - BINDGEN_EXTRA_CLANG_ARGS = - # Includes normal include path - (builtins.map (a: ''-I"${a}/include"'') [ - # add dev libraries here (e.g. pkgs.libvmi.dev) - pkgs.glibc.dev - ]) - # Includes with special directory paths - ++ [ - ''-I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"'' - ''-I"${pkgs.glib.dev}/include/glib-2.0"'' - ''-I${pkgs.glib.out}/lib/glib-2.0/include/'' - ]; - } \ No newline at end of file diff --git a/shells/rust/rust-toolchain.toml b/shells/rust/rust-toolchain.toml deleted file mode 100644 index 292fe49..0000000 --- a/shells/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "stable" From 39935210d249536a845259da23a4009ec32a71b9 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 02:23:20 +0900 Subject: [PATCH 02/39] nix flake --- .envrc | 2 + .gitignore | 14 + AGENTS.md | 19 + flake.lock | 1285 +++++++++++++++++++++++++++++++++++++++++++ flake.nix | 89 +++ flake/formatter.nix | 35 ++ flake/git-hooks.nix | 43 ++ shells/default.nix | 5 + shells/dotnix.nix | 20 + 9 files changed, 1512 insertions(+) create mode 100644 .envrc create mode 100644 AGENTS.md create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 flake/formatter.nix create mode 100644 flake/git-hooks.nix create mode 100644 shells/default.nix create mode 100644 shells/dotnix.nix diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..2a8255d --- /dev/null +++ b/.envrc @@ -0,0 +1,2 @@ +# shellcheck shell=bash +use flake .#dotnix diff --git a/.gitignore b/.gitignore index 8b13789..55c1d18 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,15 @@ +/* +!.gitignore +!README.md +!LICENSE +!AGENTS.md + +!.envrc + +!/flake.nix +!/flake.lock + +!shells/ + +!/flake/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..6b39828 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,19 @@ +# AGENTS.md + +NixOS + Home Manager flake。v2 リセット中 — flake-parts 導入済み、outputs はまだスケルトンのみ。 + +## Commands + +```sh +# flake の更新 +nix flake update + +# フォーマット +nix fmt +``` + +## Conventions + +- User: `moons`, locale: `ja_JP.UTF-8`, timezone: `Asia/Tokyo` +- Commits: conventional commits (`feat:`, `chore:`, `fix:`, etc.) +- リモート: `git@github.com:moons-14/dotfiles.git` diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..e3d50e1 --- /dev/null +++ b/flake.lock @@ -0,0 +1,1285 @@ +{ + "nodes": { + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, + "locked": { + "lastModified": 1755819240, + "narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "base16.nix", + "type": "github" + } + }, + "base16-fish": { + "flake": false, + "locked": { + "lastModified": 1765809053, + "narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=", + "owner": "tomyun", + "repo": "base16-fish", + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", + "type": "github" + }, + "original": { + "owner": "tomyun", + "repo": "base16-fish", + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", + "type": "github" + } + }, + "base16-helix": { + "flake": false, + "locked": { + "lastModified": 1776754714, + "narHash": "sha256-E3OAK27smtATTmX45uoTSRsVD+Y+ZiVVfgM/tjpbtYg=", + "owner": "tinted-theming", + "repo": "base16-helix", + "rev": "4d508123037e7851ad36ebf7d9c48b0e9e1eb581", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-helix", + "type": "github" + } + }, + "base16-vim": { + "flake": false, + "locked": { + "lastModified": 1732806396, + "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=", + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + } + }, + "crane": { + "locked": { + "lastModified": 1779130139, + "narHash": "sha256-BLrtr42azquO7MdGFU5a7KiMl3YpFlTeIXqy1fT5GlQ=", + "owner": "ipetkov", + "repo": "crane", + "rev": "edb38893982a3338972bb4a2ec7ce7c29ba10fd9", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "firefox-gnome-theme": { + "flake": false, + "locked": { + "lastModified": 1779670703, + "narHash": "sha256-UdfMivNMwCCqQsYDg5pSz8X2IOaOrIZLIIy+Bg3CO2o=", + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "rev": "942159e73e40bf785816f7f1f5feed9ef3d7c8f9", + "type": "github" + }, + "original": { + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1761588595, + "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_4": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_5": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1778716662, + "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778716662, + "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778716662, + "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "ghostty": { + "inputs": { + "flake-compat": "flake-compat", + "home-manager": "home-manager", + "nixpkgs": "nixpkgs", + "systems": "systems", + "zig": "zig", + "zon2nix": "zon2nix" + }, + "locked": { + "lastModified": 1779893562, + "narHash": "sha256-gxAXdy7JYtYJem6lCJZdgU3XlDU30ruswQF1nRLKWsA=", + "owner": "ghostty-org", + "repo": "ghostty", + "rev": "3103ae883880fe6cccdc17ea923e3ccd3587a83e", + "type": "github" + }, + "original": { + "owner": "ghostty-org", + "repo": "ghostty", + "type": "github" + } + }, + "git-hooks-nix": { + "inputs": { + "flake-compat": "flake-compat_2", + "gitignore": "gitignore", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1778507602, + "narHash": "sha256-kTwur1wV+01SdqskVMSo6JMEpg71ps3HpbFY2GsflKs=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "git-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_2": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "pre-commit", + "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" + } + }, + "gnome-shell": { + "flake": false, + "locked": { + "lastModified": 1767737596, + "narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=", + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "ef02db02bf0ff342734d525b5767814770d85b49", + "type": "github" + }, + "original": { + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "ef02db02bf0ff342734d525b5767814770d85b49", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "ghostty", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770586272, + "narHash": "sha256-Ucci8mu8QfxwzyfER2DQDbvW9t1BnTUJhBmY7ybralo=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "b1f916ba052341edc1f80d4b2399f1092a4873ca", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779726696, + "narHash": "sha256-/p37CB5n6Wpw250b0Lq0CYwNq2D8uGKzDoBulyLcQqA=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "1a95e2efb477959b70b4a14c51035975c0481df6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "lanzaboote": { + "inputs": { + "crane": "crane", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit": "pre-commit", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1779865172, + "narHash": "sha256-QZuox/4ww6vOmUu9lCpKlQbU3MER1kmgnJmXP1LO1K0=", + "owner": "nix-community", + "repo": "lanzaboote", + "rev": "f42b84f9fb03db98dee2073e932010f3a76eeb9a", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "lanzaboote", + "type": "github" + } + }, + "niri-flake": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": "nixpkgs_3", + "nixpkgs-stable": "nixpkgs-stable", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1779748545, + "narHash": "sha256-AbRQrrpcNTBUoIf7Kc1qsdhsRLtZ0DDw+udm+8NWlJk=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "3754a033e05c750ef46fe4f078d79b826c4f9287", + "type": "github" + }, + "original": { + "owner": "sodiboo", + "repo": "niri-flake", + "type": "github" + } + }, + "niri-stable": { + "flake": false, + "locked": { + "lastModified": 1756556321, + "narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "ref": "v25.08", + "repo": "niri", + "type": "github" + } + }, + "niri-unstable": { + "flake": false, + "locked": { + "lastModified": 1779374863, + "narHash": "sha256-qKWgJ2MUODpg+b8tOwWMdMKREvs8TdGBz63SHaQZCeA=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "4294948cf1c70c50e938383c2c865d7ca455ac7e", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1779826373, + "narHash": "sha256-3sRzgLX86qV5NlhWUAufLmHwkyP03tmL3VdZIM13dEo=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "ef4efb84766a166c906bd55759574676bf91267c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixos-wsl": { + "inputs": { + "flake-compat": "flake-compat_4", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1777732699, + "narHash": "sha256-2uX/XtOWZ/oy2rerRynVhqVA//ZXZ3Fo60PikLHEPQc=", + "owner": "nix-community", + "repo": "NixOS-WSL", + "rev": "5482f113fd31ebac131d1ebeb2ae90bf0d5e41f5", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NixOS-WSL", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1770537093, + "narHash": "sha256-XV30uo8tXuxdzuV8l3sojmlPRLd/8tpMsOp4lNzLGUo=", + "rev": "fef9403a3e4d31b0a23f0bacebbec52c248fbb51", + "type": "tarball", + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre942631.fef9403a3e4d/nixexprs.tar.xz" + }, + "original": { + "type": "tarball", + "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1777168982, + "narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1779467186, + "narHash": "sha256-nOesoDCiXcUftqbRBMz9tt4blI5PvljMWbm3kuCA+0s=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b77b3de8775677f84492abe84635f87b0e153f0f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-unstable": { + "locked": { + "lastModified": 1779786838, + "narHash": "sha256-0geHoGiR5f8qiXg+gO4rSF6Up6Var+kKqiOv9AO/uUc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f44f7788c891fbe5542177df78374f8cdab10e8f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1770073757, + "narHash": "sha256-Vy+G+F+3E/Tl+GMNgiHl9Pah2DgShmIUBJXmbiQPHbI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "47472570b1e607482890801aeaf29bfb749884f6", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1779560665, + "narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "64c08a7ca051951c8eae34e3e3cb1e202fe36786", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1776169885, + "narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1779622335, + "narHash": "sha256-ViA62qtL5za7V3d5I8OA9q9JcFhsVAiL5jVHwEclWqk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "705e9929918b43bd7b715dc0a878ac870449bb03", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-26.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1770107345, + "narHash": "sha256-tbS0Ebx2PiA1FRW8mt8oejR0qMXmziJmPaU1d4kYY9g=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4533d9293756b63904b7238acb84ac8fe4c8c2c4", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1772542754, + "narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8c809a146a140c5c8806f13399592dbcb1bb5dc4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixvim": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems_2" + }, + "locked": { + "lastModified": 1779816597, + "narHash": "sha256-Kgod3gZlhSp6WozZ2pFaclXbWpjs6kQLAtldoxb85Lc=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "297f9341476ba7f821a42d7a2805e206ef8c6ef8", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, + "noctalia": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "noctalia-qs": "noctalia-qs" + }, + "locked": { + "lastModified": 1779763713, + "narHash": "sha256-as2Vo4PitnWfXezfkQB2H3Rsr/DXJPp4Oe+dE+dZ0Xo=", + "owner": "noctalia-dev", + "repo": "noctalia-shell", + "rev": "272cd91408b5ff6e329e6397eed042fe422069e7", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia-shell", + "type": "github" + } + }, + "noctalia-qs": { + "inputs": { + "nixpkgs": [ + "noctalia", + "nixpkgs" + ], + "systems": "systems_3", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1779588472, + "narHash": "sha256-CVonDVo41DqdqS/kNeXFatwEuTltyXcppm9zkVOnrsM=", + "owner": "noctalia-dev", + "repo": "noctalia-qs", + "rev": "70fea8a39a908e395de63024a4dfdb829bff1ffe", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia-qs", + "type": "github" + } + }, + "nur": { + "inputs": { + "flake-parts": [ + "stylix", + "flake-parts" + ], + "nixpkgs": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779766384, + "narHash": "sha256-P7Ohnlq8b8b2fU+Sgkrej7LBTM60LBTkHleLuYzmLmU=", + "owner": "nix-community", + "repo": "NUR", + "rev": "57800b7ab648725ccd33551d01484ee14952ad3f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, + "pre-commit": { + "inputs": { + "flake-compat": "flake-compat_3", + "gitignore": "gitignore_2", + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778507602, + "narHash": "sha256-kTwur1wV+01SdqskVMSo6JMEpg71ps3HpbFY2GsflKs=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "quickshell": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779430452, + "narHash": "sha256-zTslhsxLqUlRTML506iougTGzyR38Fzhzn7t4KDEuuE=", + "owner": "outfoxxed", + "repo": "quickshell", + "rev": "4b4fca3224ab977dc515ac0bb78d00b3dfa71e00", + "type": "github" + }, + "original": { + "owner": "outfoxxed", + "repo": "quickshell", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-parts": "flake-parts", + "ghostty": "ghostty", + "git-hooks-nix": "git-hooks-nix", + "home-manager": "home-manager_2", + "lanzaboote": "lanzaboote", + "niri-flake": "niri-flake", + "nixos-hardware": "nixos-hardware", + "nixos-wsl": "nixos-wsl", + "nixpkgs": "nixpkgs_5", + "nixpkgs-unstable": "nixpkgs-unstable", + "nixvim": "nixvim", + "noctalia": "noctalia", + "quickshell": "quickshell", + "services-flake": "services-flake", + "stylix": "stylix", + "systems": "systems_5", + "treefmt-nix": "treefmt-nix_2", + "vicinae": "vicinae", + "vicinae-extensions": "vicinae-extensions" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779592685, + "narHash": "sha256-p9d56GezhHRf4QfANxwa1d+fvwShvjB5XUhdIl7WEd0=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "3a58b199e7c83a80b85c28044f808085ba7e941c", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "services-flake": { + "locked": { + "lastModified": 1779042632, + "narHash": "sha256-WgQZ1AsDMCTL+0x0yZEd1g3yMQbgEwAq0VUg73YU50M=", + "owner": "juspay", + "repo": "services-flake", + "rev": "b0012dbf955efc3f6e2decd61610da5cea17dce6", + "type": "github" + }, + "original": { + "owner": "juspay", + "repo": "services-flake", + "type": "github" + } + }, + "stylix": { + "inputs": { + "base16": "base16", + "base16-fish": "base16-fish", + "base16-helix": "base16-helix", + "base16-vim": "base16-vim", + "firefox-gnome-theme": "firefox-gnome-theme", + "flake-parts": "flake-parts_3", + "gnome-shell": "gnome-shell", + "nixpkgs": [ + "nixpkgs" + ], + "nur": "nur", + "systems": "systems_4", + "tinted-kitty": "tinted-kitty", + "tinted-schemes": "tinted-schemes", + "tinted-tmux": "tinted-tmux", + "tinted-zed": "tinted-zed" + }, + "locked": { + "lastModified": 1779835981, + "narHash": "sha256-3VQklog/kSD9dw6uj6ElSfq3qwEHQWHCThR/cGcJ5Dc=", + "owner": "nix-community", + "repo": "stylix", + "rev": "d7ba76c960a84333a7a1fc62ccf84a266086903a", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "stylix", + "type": "github" + } + }, + "systems": { + "flake": false, + "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_3": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "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_5": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "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" + } + }, + "tinted-kitty": { + "flake": false, + "locked": { + "lastModified": 1735730497, + "narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=", + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-kitty", + "type": "github" + } + }, + "tinted-schemes": { + "flake": false, + "locked": { + "lastModified": 1777806186, + "narHash": "sha256-PDF0/wObw4nIsSBeXVYLsloXOiphXCgIdsrNcVXguKs=", + "owner": "tinted-theming", + "repo": "schemes", + "rev": "0c94645546f4f3ddac77a1a5fce54eb95bf50795", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "schemes", + "type": "github" + } + }, + "tinted-tmux": { + "flake": false, + "locked": { + "lastModified": 1778379944, + "narHash": "sha256-wPDFzMGSlARlw0Sfsn48Q2+jPSfk6N0Ng6BC/d+7Q24=", + "owner": "tinted-theming", + "repo": "tinted-tmux", + "rev": "fe0203a198690e71a5ff11e08812a4673de3678d", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-tmux", + "type": "github" + } + }, + "tinted-zed": { + "flake": false, + "locked": { + "lastModified": 1778378178, + "narHash": "sha256-OXPXRIQgGwV77HjYRryOHguh4ALX96jkg+tseLkGgHA=", + "owner": "tinted-theming", + "repo": "base16-zed", + "rev": "9cd816033ff969415b190722cddf134e78a5665f", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-zed", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "noctalia", + "noctalia-qs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775636079, + "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_2": { + "inputs": { + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1775636079, + "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "vicinae": { + "inputs": { + "nixpkgs": "nixpkgs_7", + "systems": "systems_6" + }, + "locked": { + "lastModified": 1779832601, + "narHash": "sha256-/dtn1sOTEcb/rNInzkdnK8PNIIDfQi7fEJfQEq+Is4g=", + "owner": "vicinaehq", + "repo": "vicinae", + "rev": "dc1f7d47725c68debdb31be26781a96c14bac059", + "type": "github" + }, + "original": { + "owner": "vicinaehq", + "repo": "vicinae", + "type": "github" + } + }, + "vicinae-extensions": { + "inputs": { + "flake-compat": "flake-compat_5", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems_7", + "vicinae": "vicinae_2" + }, + "locked": { + "lastModified": 1779152347, + "narHash": "sha256-V9ByOBzaUCMessP9T8LwXQTYl+eIQr+NeGceRprbsT8=", + "owner": "vicinaehq", + "repo": "extensions", + "rev": "5ef25b54b9db906b391ef7e6b85177f6ecd7f3d6", + "type": "github" + }, + "original": { + "owner": "vicinaehq", + "repo": "extensions", + "type": "github" + } + }, + "vicinae_2": { + "inputs": { + "nixpkgs": [ + "vicinae-extensions", + "nixpkgs" + ], + "systems": [ + "vicinae-extensions", + "systems" + ] + }, + "locked": { + "lastModified": 1768856963, + "narHash": "sha256-u5bWDuwk6oieTnvm1YjNotcYK8iJSddH5+S68+X4TSc=", + "owner": "vicinaehq", + "repo": "vicinae", + "rev": "934bc0ad47be6dbd6498a0dac655c4613fd0ab27", + "type": "github" + }, + "original": { + "owner": "vicinaehq", + "repo": "vicinae", + "type": "github" + } + }, + "xwayland-satellite-stable": { + "flake": false, + "locked": { + "lastModified": 1755491097, + "narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "388d291e82ffbc73be18169d39470f340707edaa", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "ref": "v0.7", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "xwayland-satellite-unstable": { + "flake": false, + "locked": { + "lastModified": 1779745227, + "narHash": "sha256-yqY7RtEJGJiENzR0GwL6q69tSAy6xAAmAcLuIhLjPf8=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "5d1efbc9dc3ab1c10160b656e0247f3325daf0f2", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "zig": { + "inputs": { + "flake-compat": [ + "ghostty", + "flake-compat" + ], + "nixpkgs": [ + "ghostty", + "nixpkgs" + ], + "systems": [ + "ghostty", + "systems" + ] + }, + "locked": { + "lastModified": 1776789209, + "narHash": "sha256-G6B7Q4TXn7MZ1mB+f9rymjsYF5PLWoSvmbxijb/99bw=", + "owner": "mitchellh", + "repo": "zig-overlay", + "rev": "14fe971844e841297ddd2ce9783d6892b467af39", + "type": "github" + }, + "original": { + "owner": "mitchellh", + "repo": "zig-overlay", + "type": "github" + } + }, + "zig_2": { + "inputs": { + "nixpkgs": [ + "ghostty", + "zon2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777234348, + "narHash": "sha256-fKw44a4qbUuI5eTG8k0gPbqMV5TOrjYF35PBzsYgd2U=", + "ref": "refs/heads/main", + "rev": "2c781c0609ecda600ab98f98cca417bbd981bd53", + "revCount": 1677, + "type": "git", + "url": "https://codeberg.org/jcollie/zig-overlay.git" + }, + "original": { + "type": "git", + "url": "https://codeberg.org/jcollie/zig-overlay.git" + } + }, + "zon2nix": { + "inputs": { + "nixpkgs": [ + "ghostty", + "nixpkgs" + ], + "zig": "zig_2" + }, + "locked": { + "lastModified": 1777314365, + "narHash": "sha256-eLxQaD0wc96Neqkln8wHS0rNq/chPODifFkhwrwilEU=", + "owner": "jcollie", + "repo": "zon2nix", + "rev": "a5a1d412ad1ab6305511997bbc92b3a9dd6cb784", + "type": "github" + }, + "original": { + "owner": "jcollie", + "ref": "main", + "repo": "zon2nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..1176a70 --- /dev/null +++ b/flake.nix @@ -0,0 +1,89 @@ +{ + description = "moons NixOS configurations"; + + inputs = { + # NixOS + nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05"; + nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + # Hardware / Platform + nixos-hardware.url = "github:NixOS/nixos-hardware/master"; + nixos-wsl.url = "github:nix-community/NixOS-WSL"; + + # Desktop + niri-flake.url = "github:sodiboo/niri-flake"; + + stylix = { + url = "github:nix-community/stylix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + # Terminal + ghostty.url = "github:ghostty-org/ghostty"; + + # Shell / Launcher + vicinae.url = "github:vicinaehq/vicinae"; + + vicinae-extensions = { + url = "github:vicinaehq/extensions"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + quickshell = { + url = "github:outfoxxed/quickshell"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + noctalia = { + url = "github:noctalia-dev/noctalia-shell"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.quickshell.follows = "quickshell"; + }; + + # Editor + nixvim = { + url = "github:nix-community/nixvim"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + # Boot + lanzaboote = { + url = "github:nix-community/lanzaboote"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + # Flake framework + flake-parts.url = "github:hercules-ci/flake-parts"; + + # Code formatting and git hooks + treefmt-nix.url = "github:numtide/treefmt-nix"; + git-hooks-nix.url = "github:cachix/git-hooks.nix"; + + # Dev services + services-flake.url = "github:juspay/services-flake"; + + # Systems + systems.url = "github:nix-systems/default-linux"; + }; + + outputs = + inputs@{ + flake-parts, + systems, + ... + }: + flake-parts.lib.mkFlake { inherit inputs; } { + systems = import systems; + + imports = [ + ./flake/formatter.nix + ./flake/git-hooks.nix + ./shells + ]; + }; +} diff --git a/flake/formatter.nix b/flake/formatter.nix new file mode 100644 index 0000000..e86b7d4 --- /dev/null +++ b/flake/formatter.nix @@ -0,0 +1,35 @@ +{ inputs, ... }: +{ + imports = [ + inputs.treefmt-nix.flakeModule + ]; + + perSystem = _: { + treefmt = { + projectRootFile = "flake.nix"; + + programs = { + nixfmt.enable = true; + deadnix.enable = true; + statix.enable = true; + + shfmt.enable = true; + shellcheck.enable = true; + + prettier.enable = true; + yamlfmt.enable = true; + taplo.enable = true; + oxfmt.enable = true; + }; + + settings = { + excludes = [ + ".git/**" + "*.lock" + ".direnv/**" + "*.age" + ]; + }; + }; + }; +} diff --git a/flake/git-hooks.nix b/flake/git-hooks.nix new file mode 100644 index 0000000..31ffd2c --- /dev/null +++ b/flake/git-hooks.nix @@ -0,0 +1,43 @@ +{ inputs, ... }: +{ + imports = [ + inputs.git-hooks-nix.flakeModule + ]; + + perSystem = + { + pkgs, + config, + ... + }: + { + pre-commit.settings = { + hooks = { + treefmt = { + enable = true; + + package = config.treefmt.build.wrapper; + }; + + gitleaks = { + enable = true; + name = "gitleaks"; + description = "Detect hardcoded secrets"; + + entry = "${pkgs.gitleaks}/bin/gitleaks dir --no-banner --redact --verbose ."; + + pass_filenames = false; + + stages = [ + "pre-commit" + "pre-push" + ]; + }; + + deadnix.enable = true; + statix.enable = true; + shellcheck.enable = true; + }; + }; + }; +} diff --git a/shells/default.nix b/shells/default.nix new file mode 100644 index 0000000..f2bbc99 --- /dev/null +++ b/shells/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./dotnix.nix + ]; +} diff --git a/shells/dotnix.nix b/shells/dotnix.nix new file mode 100644 index 0000000..1afb4b2 --- /dev/null +++ b/shells/dotnix.nix @@ -0,0 +1,20 @@ +_: { + perSystem = + { + pkgs, + config, + ... + }: + { + devShells.dotnix = pkgs.mkShell { + packages = [ + config.treefmt.build.wrapper + pkgs.gitleaks + pkgs.git + pkgs.pre-commit + ]; + + shellHook = config.pre-commit.settings.shellHook; + }; + }; +} From e499b952b724b4f12c35d0e3072f43c5e5fc27fb Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 10:37:04 +0900 Subject: [PATCH 03/39] chore: add nixConfig with cachix substituters and trusted public keys --- flake.nix | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/flake.nix b/flake.nix index 1176a70..ec31423 100644 --- a/flake.nix +++ b/flake.nix @@ -71,6 +71,20 @@ systems.url = "github:nix-systems/default-linux"; }; + nixConfig = { + extra-substituters = [ + "https://cache.nixos.org" + "https://nix-community.cachix.org" + "https://moons-dotfiles.cachix.org" + ]; + + extra-trusted-public-keys = [ + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + "moons-dotfiles.cachix.org-1:WHoroKiNScG2/dpxHHL1I0qVmvuQhJbEAP+DS2j9Rr0=" + ]; + }; + outputs = inputs@{ flake-parts, From 57c4ac099e63b2735999fbabc8b641b95de01247 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 12:34:05 +0900 Subject: [PATCH 04/39] feat: add hosts and overlays module structure --- .gitignore | 2 ++ flake.nix | 4 +++- hosts/default.nix | 39 +++++++++++++++++++++++++++++++++++++++ overlays/default.nix | 1 + 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 hosts/default.nix create mode 100644 overlays/default.nix diff --git a/.gitignore b/.gitignore index 55c1d18..a9f0508 100644 --- a/.gitignore +++ b/.gitignore @@ -11,5 +11,7 @@ !/flake.lock !shells/ +!hosts/ +!overlays/ !/flake/ diff --git a/flake.nix b/flake.nix index ec31423..9d2d8a4 100644 --- a/flake.nix +++ b/flake.nix @@ -95,9 +95,11 @@ systems = import systems; imports = [ + ./overlays + ./hosts + ./shells ./flake/formatter.nix ./flake/git-hooks.nix - ./shells ]; }; } diff --git a/hosts/default.nix b/hosts/default.nix new file mode 100644 index 0000000..f2bcbc0 --- /dev/null +++ b/hosts/default.nix @@ -0,0 +1,39 @@ +{ + inputs, + config, + lib, + ... +}: +let + inherit (inputs.nixpkgs.lib) nixosSystem; + + mkSystem = + { + host, + system, + extraModules ? [ ], + ... + }: + assert lib.assertMsg (lib.elem system config.systems) + "mkSystem: system '${system}' not in valid systems: ${lib.generators.toPretty { } config.systems}"; + nixosSystem { + inherit system; + modules = [ + { + networking.hostName = lib.mkDefault host; + } + ] + ++ extraModules; + specialArgs = { inherit inputs; }; + }; +in +{ + flake.nixosConfigurations = { + nix-example = mkSystem { + host = "nix-example"; + system = "x86_64-linux"; + profile = "laptop"; + extraModules = [ ]; + }; + }; +} diff --git a/overlays/default.nix b/overlays/default.nix new file mode 100644 index 0000000..958608a --- /dev/null +++ b/overlays/default.nix @@ -0,0 +1 @@ +_: { } From 039282ba9412668436f766e0e1f001e173dcf3b2 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 12:54:12 +0900 Subject: [PATCH 05/39] feat: add nix-example host and base profile --- .gitignore | 1 + hosts/default.nix | 9 ++-- hosts/nix-example/default.nix | 6 +++ hosts/nix-example/hardware-configuration.nix | 43 ++++++++++++++++++++ profiles/base.nix | 1 + 5 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 hosts/nix-example/default.nix create mode 100644 hosts/nix-example/hardware-configuration.nix create mode 100644 profiles/base.nix diff --git a/.gitignore b/.gitignore index a9f0508..06b6a15 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,6 @@ !shells/ !hosts/ !overlays/ +!profiles/ !/flake/ diff --git a/hosts/default.nix b/hosts/default.nix index f2bcbc0..83fe160 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -11,17 +11,16 @@ let { host, system, + profile ? null, extraModules ? [ ], - ... }: assert lib.assertMsg (lib.elem system config.systems) "mkSystem: system '${system}' not in valid systems: ${lib.generators.toPretty { } config.systems}"; nixosSystem { inherit system; modules = [ - { - networking.hostName = lib.mkDefault host; - } + ../profiles/${profile}.nix + ../hosts/${host}/default.nix ] ++ extraModules; specialArgs = { inherit inputs; }; @@ -32,7 +31,7 @@ in nix-example = mkSystem { host = "nix-example"; system = "x86_64-linux"; - profile = "laptop"; + profile = "base"; extraModules = [ ]; }; }; diff --git a/hosts/nix-example/default.nix b/hosts/nix-example/default.nix new file mode 100644 index 0000000..2db9801 --- /dev/null +++ b/hosts/nix-example/default.nix @@ -0,0 +1,6 @@ +{ ... }: +{ + imports = [ + ./hardware-configuration.nix + ]; +} diff --git a/hosts/nix-example/hardware-configuration.nix b/hosts/nix-example/hardware-configuration.nix new file mode 100644 index 0000000..9eab558 --- /dev/null +++ b/hosts/nix-example/hardware-configuration.nix @@ -0,0 +1,43 @@ +# 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. +{ + lib, + modulesPath, + ... +}: +{ + imports = [ + (modulesPath + "/profiles/qemu-guest.nix") + ]; + + boot.initrd.availableKernelModules = [ + "ata_piix" + "uhci_hcd" + "virtio_pci" + "virtio_scsi" + "sd_mod" + "sr_mod" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/8f0eaec6-5dc9-4821-aa8d-fb6809b5a5bf"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/201C-961B"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + + swapDevices = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; +} diff --git a/profiles/base.nix b/profiles/base.nix new file mode 100644 index 0000000..958608a --- /dev/null +++ b/profiles/base.nix @@ -0,0 +1 @@ +_: { } From 796bc7dcb6443dba4b399151691e7d54503883f8 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 13:11:52 +0900 Subject: [PATCH 06/39] feat(hosts): add userName to specialArgs, wire hardware-configuration --- .gitignore | 2 ++ hosts/default.nix | 7 +++++-- profiles/base.nix | 9 ++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 06b6a15..0c92e47 100644 --- a/.gitignore +++ b/.gitignore @@ -14,5 +14,7 @@ !hosts/ !overlays/ !profiles/ +!modules/ +!applications/ !/flake/ diff --git a/hosts/default.nix b/hosts/default.nix index 83fe160..d705b23 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -7,6 +7,8 @@ let inherit (inputs.nixpkgs.lib) nixosSystem; + userName = "moons"; + mkSystem = { host, @@ -19,11 +21,12 @@ let nixosSystem { inherit system; modules = [ + ./${host}/hardware-configuration.nix ../profiles/${profile}.nix - ../hosts/${host}/default.nix + ./${host}/default.nix ] ++ extraModules; - specialArgs = { inherit inputs; }; + specialArgs = { inherit inputs userName; }; }; in { diff --git a/profiles/base.nix b/profiles/base.nix index 958608a..9ef46a6 100644 --- a/profiles/base.nix +++ b/profiles/base.nix @@ -1 +1,8 @@ -_: { } +{ + userName, + ... +}: +{ + imports = [ ]; + home-manager.users.${userName}.imports = [ ]; +} From d881300a5bd4e0ac063b6d6798f7b3b9c5b1643a Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 13:25:39 +0900 Subject: [PATCH 07/39] feat(modules): add nix caches module --- .gitignore | 1 - hosts/default.nix | 1 - modules/drivers/intel-drivers.nix | 27 +++++++++++++++++++++++++++ modules/nix/boot.nix | 11 +++++++++++ modules/nix/caches.nix | 13 +++++++++++++ profiles/base.nix | 10 +++++----- 6 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 modules/drivers/intel-drivers.nix create mode 100644 modules/nix/boot.nix create mode 100644 modules/nix/caches.nix diff --git a/.gitignore b/.gitignore index 0c92e47..2905827 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,5 @@ !overlays/ !profiles/ !modules/ -!applications/ !/flake/ diff --git a/hosts/default.nix b/hosts/default.nix index d705b23..1c93ddf 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -21,7 +21,6 @@ let nixosSystem { inherit system; modules = [ - ./${host}/hardware-configuration.nix ../profiles/${profile}.nix ./${host}/default.nix ] diff --git a/modules/drivers/intel-drivers.nix b/modules/drivers/intel-drivers.nix new file mode 100644 index 0000000..fb24fd6 --- /dev/null +++ b/modules/drivers/intel-drivers.nix @@ -0,0 +1,27 @@ +{ + lib, + pkgs, + config, + ... +}: +with lib; +let + cfg = config.drivers.intel; +in +{ + options.drivers.intel = { + enable = mkEnableOption "Enable Intel Graphics Drivers"; + }; + + config = mkIf cfg.enable { + # OpenGL + hardware.graphics = { + extraPackages = with pkgs; [ + intel-media-driver + vaapiIntel + vaapiVdpau + libvdpau-va-gl + ]; + }; + }; +} diff --git a/modules/nix/boot.nix b/modules/nix/boot.nix new file mode 100644 index 0000000..d3a20bd --- /dev/null +++ b/modules/nix/boot.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: +{ + boot.loader = { + systemd-boot.enable = true; + systemd-boot.configurationLimit = 8; + efi.canTouchEfiVariables = true; + }; + + boot.supportedFilesystems = [ "nfs" ]; + boot.kernelPackages = pkgs.linuxPackages_latest; +} diff --git a/modules/nix/caches.nix b/modules/nix/caches.nix new file mode 100644 index 0000000..dda5ae9 --- /dev/null +++ b/modules/nix/caches.nix @@ -0,0 +1,13 @@ +_: { + nix.settings = { + extra-substituters = [ + "https://noctalia.cachix.org" + "https://vicinae.cachix.org" + ]; + + extra-trusted-public-keys = [ + "noctalia.cachix.org-1:pCOR47nnMEo5thcxNDtzWpOxNFQsBRglJzxWPp3dkU4=" + "vicinae.cachix.org-1:1kDrfienkGHPYbkpNj1mWTr7Fm1+zcenzgTizIcI3oc=" + ]; + }; +} diff --git a/profiles/base.nix b/profiles/base.nix index 9ef46a6..796393e 100644 --- a/profiles/base.nix +++ b/profiles/base.nix @@ -1,8 +1,8 @@ +{ userName, ... }: { - userName, - ... -}: -{ - imports = [ ]; + imports = [ + ../modules/nix/boot.nix + ../modules/nix/caches.nix + ]; home-manager.users.${userName}.imports = [ ]; } From 770b1bfb4afb90adc10666267037fa12990ce8d7 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 15:39:18 +0900 Subject: [PATCH 08/39] add base files --- .gitignore | 1 + docs/fingerprint.md | 68 ++++++++++++++++++++++++++++++ flake.nix | 14 ------ modules/nix/boot.nix | 11 ----- modules/nix/boot/default.nix | 4 ++ modules/nix/boot/latest-kernel.nix | 4 ++ modules/nix/boot/nfs.nix | 3 ++ modules/nix/boot/uefi.nix | 7 +++ modules/nix/caches.nix | 6 +++ modules/nix/camera.nix | 21 +++++++++ modules/nix/fingerprint.nix | 14 ++++++ modules/nix/fonts.nix | 29 +++++++++++++ modules/nix/gc.nix | 10 +++++ profiles/base.nix | 3 +- profiles/cli-minimal.nix | 7 +++ profiles/cli-vm.nix | 7 +++ profiles/desktop.nix | 7 +++ profiles/gui.nix | 7 +++ profiles/laptop.nix | 7 +++ 19 files changed, 204 insertions(+), 26 deletions(-) create mode 100644 docs/fingerprint.md delete mode 100644 modules/nix/boot.nix create mode 100644 modules/nix/boot/default.nix create mode 100644 modules/nix/boot/latest-kernel.nix create mode 100644 modules/nix/boot/nfs.nix create mode 100644 modules/nix/boot/uefi.nix create mode 100644 modules/nix/camera.nix create mode 100644 modules/nix/fingerprint.nix create mode 100644 modules/nix/fonts.nix create mode 100644 modules/nix/gc.nix create mode 100644 profiles/cli-minimal.nix create mode 100644 profiles/cli-vm.nix create mode 100644 profiles/desktop.nix create mode 100644 profiles/gui.nix create mode 100644 profiles/laptop.nix diff --git a/.gitignore b/.gitignore index 2905827..249099f 100644 --- a/.gitignore +++ b/.gitignore @@ -15,5 +15,6 @@ !overlays/ !profiles/ !modules/ +!docs/ !/flake/ diff --git a/docs/fingerprint.md b/docs/fingerprint.md new file mode 100644 index 0000000..2875af3 --- /dev/null +++ b/docs/fingerprint.md @@ -0,0 +1,68 @@ +# Fingerprint Commands + +This note covers the basic `fprintd` commands used by the fingerprint module. + +## Enroll a new fingerprint + +Register a fingerprint for the current user: + +```sh +fprintd-enroll $USER +``` + +To enroll a specific finger, pass the finger name: + +```sh +fprintd-enroll -f right-index-finger $USER +``` + +Common finger names include: + +- `left-thumb` +- `left-index-finger` +- `right-thumb` +- `right-index-finger` + +Follow the prompts and swipe or touch the sensor until enrollment completes. + +## List enrolled fingerprints + +Show fingerprints registered for the current user: + +```sh +fprintd-list $USER +``` + +You can also list fingerprints for another user: + +```sh +fprintd-list +``` + +## Delete fingerprints + +Delete one enrolled fingerprint for the current user: + +```sh +fprintd-delete +``` + +Delete all enrolled fingerprints for the current user: + +```sh +fprintd-delete $USER +``` + +Delete fingerprints for another user: + +```sh +fprintd-delete +``` + +## Verify authentication + +Test fingerprint authentication for the current user: + +```sh +fprintd-verify +``` diff --git a/flake.nix b/flake.nix index 9d2d8a4..229377e 100644 --- a/flake.nix +++ b/flake.nix @@ -71,20 +71,6 @@ systems.url = "github:nix-systems/default-linux"; }; - nixConfig = { - extra-substituters = [ - "https://cache.nixos.org" - "https://nix-community.cachix.org" - "https://moons-dotfiles.cachix.org" - ]; - - extra-trusted-public-keys = [ - "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" - "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" - "moons-dotfiles.cachix.org-1:WHoroKiNScG2/dpxHHL1I0qVmvuQhJbEAP+DS2j9Rr0=" - ]; - }; - outputs = inputs@{ flake-parts, diff --git a/modules/nix/boot.nix b/modules/nix/boot.nix deleted file mode 100644 index d3a20bd..0000000 --- a/modules/nix/boot.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ pkgs, ... }: -{ - boot.loader = { - systemd-boot.enable = true; - systemd-boot.configurationLimit = 8; - efi.canTouchEfiVariables = true; - }; - - boot.supportedFilesystems = [ "nfs" ]; - boot.kernelPackages = pkgs.linuxPackages_latest; -} diff --git a/modules/nix/boot/default.nix b/modules/nix/boot/default.nix new file mode 100644 index 0000000..381fb0e --- /dev/null +++ b/modules/nix/boot/default.nix @@ -0,0 +1,4 @@ +{ lib, ... }: +{ + boot.loader.systemd-boot.configurationLimit = lib.mkDefault 8; +} diff --git a/modules/nix/boot/latest-kernel.nix b/modules/nix/boot/latest-kernel.nix new file mode 100644 index 0000000..50d146f --- /dev/null +++ b/modules/nix/boot/latest-kernel.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + boot.kernelPackages = pkgs.linuxPackages_latest; +} diff --git a/modules/nix/boot/nfs.nix b/modules/nix/boot/nfs.nix new file mode 100644 index 0000000..7c359a2 --- /dev/null +++ b/modules/nix/boot/nfs.nix @@ -0,0 +1,3 @@ +_: { + boot.supportedFilesystems = [ "nfs" ]; +} diff --git a/modules/nix/boot/uefi.nix b/modules/nix/boot/uefi.nix new file mode 100644 index 0000000..9fca7d0 --- /dev/null +++ b/modules/nix/boot/uefi.nix @@ -0,0 +1,7 @@ +{ lib, ... }: +{ + boot.loader = { + systemd-boot.enable = lib.mkDefault true; + efi.canTouchEfiVariables = lib.mkDefault true; + }; +} diff --git a/modules/nix/caches.nix b/modules/nix/caches.nix index dda5ae9..8802174 100644 --- a/modules/nix/caches.nix +++ b/modules/nix/caches.nix @@ -1,11 +1,17 @@ _: { nix.settings = { extra-substituters = [ + "https://cache.nixos.org" + "https://nix-community.cachix.org" + "https://moons-dotfiles.cachix.org" "https://noctalia.cachix.org" "https://vicinae.cachix.org" ]; extra-trusted-public-keys = [ + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + "moons-dotfiles.cachix.org-1:WHoroKiNScG2/dpxHHL1I0qVmvuQhJbEAP+DS2j9Rr0=" "noctalia.cachix.org-1:pCOR47nnMEo5thcxNDtzWpOxNFQsBRglJzxWPp3dkU4=" "vicinae.cachix.org-1:1kDrfienkGHPYbkpNj1mWTr7Fm1+zcenzgTizIcI3oc=" ]; diff --git a/modules/nix/camera.nix b/modules/nix/camera.nix new file mode 100644 index 0000000..9ad501f --- /dev/null +++ b/modules/nix/camera.nix @@ -0,0 +1,21 @@ +{ pkgs, ... }: +{ + boot.kernelModules = [ "uvcvideo" ]; + + environment.systemPackages = with pkgs; [ + v4l-utils + ffmpeg-full + ]; + + services.pipewire = { + enable = true; + alsa.enable = true; + pulse.enable = true; + }; + security.rtkit.enable = true; + + xdg.portal = { + enable = true; + extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + }; +} diff --git a/modules/nix/fingerprint.nix b/modules/nix/fingerprint.nix new file mode 100644 index 0000000..f4cab3b --- /dev/null +++ b/modules/nix/fingerprint.nix @@ -0,0 +1,14 @@ +# Documentation : /docs/fingerprint.md +_: { + services.fprintd.enable = true; + + security.pam.services = { + login.fprintAuth = true; + + # sudo + sudo.fprintAuth = true; + + # greetd (tuigreet / ReGreet) + greetd.fprintAuth = true; + }; +} diff --git a/modules/nix/fonts.nix b/modules/nix/fonts.nix new file mode 100644 index 0000000..505d601 --- /dev/null +++ b/modules/nix/fonts.nix @@ -0,0 +1,29 @@ +{ pkgs, ... }: +{ + fonts = { + packages = with pkgs; [ + noto-fonts + noto-fonts-cjk-sans + noto-fonts-color-emoji + terminus_font + cantarell-fonts + font-awesome + nerd-fonts.blex-mono + ]; + + fontDir.enable = true; + fontconfig = { + defaultFonts = { + serif = [ + "Noto Serif CJK JP" + "Noto Color Emoji" + ]; + sansSerif = [ + "Noto Sans CJK JP" + "Noto Clor Emoji" + ]; + emoji = [ "Noto Color Emoji" ]; + }; + }; + }; +} diff --git a/modules/nix/gc.nix b/modules/nix/gc.nix new file mode 100644 index 0000000..31312b7 --- /dev/null +++ b/modules/nix/gc.nix @@ -0,0 +1,10 @@ +_: { + nix.gc = { + automatic = true; + dates = "daily"; + options = "--delete-older-than 7d"; + }; + + nix.settings.auto-optimise-store = true; + nix.optimise.automatic = true; +} diff --git a/profiles/base.nix b/profiles/base.nix index 796393e..d846e9a 100644 --- a/profiles/base.nix +++ b/profiles/base.nix @@ -1,8 +1,9 @@ { userName, ... }: { imports = [ - ../modules/nix/boot.nix + ../modules/nix/boot ../modules/nix/caches.nix + ../modules/nix/gc.nix ]; home-manager.users.${userName}.imports = [ ]; } diff --git a/profiles/cli-minimal.nix b/profiles/cli-minimal.nix new file mode 100644 index 0000000..64717e8 --- /dev/null +++ b/profiles/cli-minimal.nix @@ -0,0 +1,7 @@ +{ userName, ... }: +{ + imports = [ + ./base.nix + ]; + home-manager.users.${userName}.imports = [ ]; +} diff --git a/profiles/cli-vm.nix b/profiles/cli-vm.nix new file mode 100644 index 0000000..9f62175 --- /dev/null +++ b/profiles/cli-vm.nix @@ -0,0 +1,7 @@ +{ userName, ... }: +{ + imports = [ + ./cli-minimal.nix + ]; + home-manager.users.${userName}.imports = [ ]; +} diff --git a/profiles/desktop.nix b/profiles/desktop.nix new file mode 100644 index 0000000..a2adab2 --- /dev/null +++ b/profiles/desktop.nix @@ -0,0 +1,7 @@ +{ userName, ... }: +{ + imports = [ + ./gui.nix + ]; + home-manager.users.${userName}.imports = [ ]; +} diff --git a/profiles/gui.nix b/profiles/gui.nix new file mode 100644 index 0000000..9f62175 --- /dev/null +++ b/profiles/gui.nix @@ -0,0 +1,7 @@ +{ userName, ... }: +{ + imports = [ + ./cli-minimal.nix + ]; + home-manager.users.${userName}.imports = [ ]; +} diff --git a/profiles/laptop.nix b/profiles/laptop.nix new file mode 100644 index 0000000..a2adab2 --- /dev/null +++ b/profiles/laptop.nix @@ -0,0 +1,7 @@ +{ userName, ... }: +{ + imports = [ + ./gui.nix + ]; + home-manager.users.${userName}.imports = [ ]; +} From af22f92f4390801d963fa5cd7be03ee93138b2da Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 16:39:29 +0900 Subject: [PATCH 09/39] feat --- modules/nix/boot/default.nix | 11 +++++++++-- modules/nix/boot/latest-kernel.nix | 4 ---- modules/nix/greetd.nix | 12 ++++++++++++ modules/nix/hardware/bluetooth.nix | 6 ++++++ modules/nix/hardware/default.nix | 7 +++++++ modules/nix/hardware/gui.nix | 5 +++++ profiles/base.nix | 1 + profiles/gui.nix | 4 ++++ profiles/laptop.nix | 2 ++ 9 files changed, 46 insertions(+), 6 deletions(-) delete mode 100644 modules/nix/boot/latest-kernel.nix create mode 100644 modules/nix/greetd.nix create mode 100644 modules/nix/hardware/bluetooth.nix create mode 100644 modules/nix/hardware/default.nix create mode 100644 modules/nix/hardware/gui.nix diff --git a/modules/nix/boot/default.nix b/modules/nix/boot/default.nix index 381fb0e..81bb87b 100644 --- a/modules/nix/boot/default.nix +++ b/modules/nix/boot/default.nix @@ -1,4 +1,11 @@ -{ lib, ... }: { - boot.loader.systemd-boot.configurationLimit = lib.mkDefault 8; + pkgs, + lib, + ... +}: +{ + boot = { + loader.systemd-boot.configurationLimit = lib.mkDefault 8; + kernelPackages = pkgs.linuxPackages_latest; + }; } diff --git a/modules/nix/boot/latest-kernel.nix b/modules/nix/boot/latest-kernel.nix deleted file mode 100644 index 50d146f..0000000 --- a/modules/nix/boot/latest-kernel.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ pkgs, ... }: -{ - boot.kernelPackages = pkgs.linuxPackages_latest; -} diff --git a/modules/nix/greetd.nix b/modules/nix/greetd.nix new file mode 100644 index 0000000..22f1bee --- /dev/null +++ b/modules/nix/greetd.nix @@ -0,0 +1,12 @@ +{ pkgs, ... }: +{ + services.greetd = { + enable = true; + settings = { + default_session = { + user = "greeter"; + command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --cmd niri-session"; + }; + }; + }; +} diff --git a/modules/nix/hardware/bluetooth.nix b/modules/nix/hardware/bluetooth.nix new file mode 100644 index 0000000..e3b8d15 --- /dev/null +++ b/modules/nix/hardware/bluetooth.nix @@ -0,0 +1,6 @@ +_: { + hardware = { + bluetooth.enable = true; + bluetooth.powerOnBoot = true; + }; +} diff --git a/modules/nix/hardware/default.nix b/modules/nix/hardware/default.nix new file mode 100644 index 0000000..6ccc795 --- /dev/null +++ b/modules/nix/hardware/default.nix @@ -0,0 +1,7 @@ +{ lib, ... }: +{ + hardware = { + enableRedistributableFirmware = lib.mkDefault true; + keyboard.qmk.enable = true; + }; +} diff --git a/modules/nix/hardware/gui.nix b/modules/nix/hardware/gui.nix new file mode 100644 index 0000000..1f17346 --- /dev/null +++ b/modules/nix/hardware/gui.nix @@ -0,0 +1,5 @@ +_: { + hardware = { + graphics.enable = true; + }; +} diff --git a/profiles/base.nix b/profiles/base.nix index d846e9a..19a03c7 100644 --- a/profiles/base.nix +++ b/profiles/base.nix @@ -4,6 +4,7 @@ ../modules/nix/boot ../modules/nix/caches.nix ../modules/nix/gc.nix + ../modules/nix/hardware ]; home-manager.users.${userName}.imports = [ ]; } diff --git a/profiles/gui.nix b/profiles/gui.nix index 9f62175..d9dad16 100644 --- a/profiles/gui.nix +++ b/profiles/gui.nix @@ -2,6 +2,10 @@ { imports = [ ./cli-minimal.nix + ../modules/nix/hardware/gui.nix + ../modules/nix/camera.nix + ../modules/nix/fonts.nix + ../modules/nix/greetd.nix ]; home-manager.users.${userName}.imports = [ ]; } diff --git a/profiles/laptop.nix b/profiles/laptop.nix index a2adab2..dcf88a0 100644 --- a/profiles/laptop.nix +++ b/profiles/laptop.nix @@ -2,6 +2,8 @@ { imports = [ ./gui.nix + ../modules/nix/bluetooth.nix + ../modules/nix/fingerprint.nix ]; home-manager.users.${userName}.imports = [ ]; } From 5455d856871d96dd2554e2df8e5a1995621fc2ea Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 16:50:34 +0900 Subject: [PATCH 10/39] feat --- modules/nix/i18n.nix | 32 ++++++++++++++++++++++++++++++++ modules/nix/kde.nix | 5 +++++ profiles/gui.nix | 2 ++ 3 files changed, 39 insertions(+) create mode 100644 modules/nix/i18n.nix create mode 100644 modules/nix/kde.nix diff --git a/modules/nix/i18n.nix b/modules/nix/i18n.nix new file mode 100644 index 0000000..1d04fc5 --- /dev/null +++ b/modules/nix/i18n.nix @@ -0,0 +1,32 @@ +{ pkgs, ... }: +{ + i18n.inputMethod = { + enable = true; + type = "fcitx5"; + fcitx5 = { + addons = with pkgs; [ + fcitx5-mozc + fcitx5-gtk + qt6Packages.fcitx5-configtool + ]; + settings.inputMethod = { + GroupOrder = { + "0" = "Default"; + }; + "Groups/0" = { + Name = "Default"; + "Default Layout" = "keyboard-jp"; + DefaultIM = "mozc"; + }; + "Groups/0/Items/0" = { + Name = "keyboard-jp"; + Layout = ""; + }; + "Groups/0/Items/1" = { + Name = "mozc"; + Layout = ""; + }; + }; + }; + }; +} diff --git a/modules/nix/kde.nix b/modules/nix/kde.nix new file mode 100644 index 0000000..7e989e2 --- /dev/null +++ b/modules/nix/kde.nix @@ -0,0 +1,5 @@ +_: { + programs.kdeconnect = { + enable = true; + }; +} diff --git a/profiles/gui.nix b/profiles/gui.nix index d9dad16..e60dcf3 100644 --- a/profiles/gui.nix +++ b/profiles/gui.nix @@ -6,6 +6,8 @@ ../modules/nix/camera.nix ../modules/nix/fonts.nix ../modules/nix/greetd.nix + ../modules/nix/i18n.nix + ../modules/nix/kde.nix ]; home-manager.users.${userName}.imports = [ ]; } From d0fa1de101ab1213957b41c5e9f10fbe5d3440bc Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 17:35:19 +0900 Subject: [PATCH 11/39] i18n --- modules/nix/i18n.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/nix/i18n.nix b/modules/nix/i18n.nix index 1d04fc5..ccb21e4 100644 --- a/modules/nix/i18n.nix +++ b/modules/nix/i18n.nix @@ -4,9 +4,11 @@ enable = true; type = "fcitx5"; fcitx5 = { + waylandFrontend = true; addons = with pkgs; [ - fcitx5-mozc + fcitx5-mozc-ut fcitx5-gtk + kdePackages.fcitx5-qt qt6Packages.fcitx5-configtool ]; settings.inputMethod = { @@ -15,7 +17,7 @@ }; "Groups/0" = { Name = "Default"; - "Default Layout" = "keyboard-jp"; + "Default Layout" = "jp"; DefaultIM = "mozc"; }; "Groups/0/Items/0" = { From 284ccb22ee7fa51d6f608cf70a12dd4b5cd1a40d Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 18:01:45 +0900 Subject: [PATCH 12/39] network --- modules/nix/network/default.nix | 23 +++++++++++++++++++++++ modules/nix/network/root_ca.crt | 13 +++++++++++++ modules/nix/network/wifi.nix | 24 ++++++++++++++++++++++++ modules/nix/user.nix | 21 +++++++++++++++++++++ profiles/base.nix | 5 ++++- profiles/laptop.nix | 1 + 6 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 modules/nix/network/default.nix create mode 100644 modules/nix/network/root_ca.crt create mode 100644 modules/nix/network/wifi.nix create mode 100644 modules/nix/user.nix diff --git a/modules/nix/network/default.nix b/modules/nix/network/default.nix new file mode 100644 index 0000000..4783c4c --- /dev/null +++ b/modules/nix/network/default.nix @@ -0,0 +1,23 @@ +{ + host, + lib, + ... +}: +{ + networking = { + hostName = host; + + nameservers = lib.mkDefault [ + "1.1.1.1" + "1.0.0.1" + "10.50.80.53" + "10.50.80.54" + ]; + }; + + services.resolved.enable = lib.mkDefault false; + + security.pki.certificateFiles = [ + ./root_ca.crt + ]; +} diff --git a/modules/nix/network/root_ca.crt b/modules/nix/network/root_ca.crt new file mode 100644 index 0000000..5985efb --- /dev/null +++ b/modules/nix/network/root_ca.crt @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIBszCCAVqgAwIBAgIRAPCAxajuCEmnXKploQS+KAkwCgYIKoZIzj0EAwIwODEW +MBQGA1UEChMNTW9vbnMgSG9tZSBDQTEeMBwGA1UEAxMVTW9vbnMgSG9tZSBDQSBS +b290IENBMB4XDTI1MTIwNjE4MDgwN1oXDTM1MTIwNDE4MDgwN1owODEWMBQGA1UE +ChMNTW9vbnMgSG9tZSBDQTEeMBwGA1UEAxMVTW9vbnMgSG9tZSBDQSBSb290IENB +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDw2M0NQMju2zN5ZXwsYaTieWggId +XmRSXjOHW4/pBEI11xk1GkMFbeVmppr1cbcNmbB+fmxoFa+oKguhFDSsdaNFMEMw +DgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYEFGuC +UGL5CxdamFfBVC8xH306Wo6xMAoGCCqGSM49BAMCA0cAMEQCIBqWCNWBuwhWDYoi +fpqOqz2HSChOsKCIAgfTJlUUgSlSAiALekUJ+4M+L4/vP4GpkrSovuQ7JOMXV44+ +30Pcx4AoJg== +-----END CERTIFICATE----- + diff --git a/modules/nix/network/wifi.nix b/modules/nix/network/wifi.nix new file mode 100644 index 0000000..dd6281c --- /dev/null +++ b/modules/nix/network/wifi.nix @@ -0,0 +1,24 @@ +_: { + networking = { + networkmanager = { + enable = true; + + dns = "none"; + wifi.powersave = false; + wifi.backend = "wpa_supplicant"; + settings = { + "device"."wifi.scan-rand-mac-address" = "no"; + "connection"."wifi.cloned-mac-address" = "permanent"; + }; + }; + wireless.iwd.enable = false; + }; + + boot.extraModprobeConfig = '' + options cfg80211 ieee80211_regdom=JP + options iwlwifi power_save=0 + options iwlwifi uapsd_disable=1 + ''; + + programs.nm-applet.enable = true; +} diff --git a/modules/nix/user.nix b/modules/nix/user.nix new file mode 100644 index 0000000..ee24a2c --- /dev/null +++ b/modules/nix/user.nix @@ -0,0 +1,21 @@ +{ + userName, + inputs, + ... +}: +{ + imports = [ inputs.home-manager.nixosModules.home-manager ]; + + home-manager = { + useUserPackages = true; + useGlobalPkgs = true; + backupFileExtension = "backup"; + users.moons = { + home = { + username = userName; + homeDirectory = "/home/${userName}"; + stateVersion = "26.05"; + }; + }; + }; +} diff --git a/profiles/base.nix b/profiles/base.nix index 19a03c7..c22cfec 100644 --- a/profiles/base.nix +++ b/profiles/base.nix @@ -5,6 +5,9 @@ ../modules/nix/caches.nix ../modules/nix/gc.nix ../modules/nix/hardware + ../modules/nix/user.nix + ../modules/nix/network + ]; + home-manager.users.${userName}.imports = [ ]; - home-manager.users.${userName}.imports = [ ]; } diff --git a/profiles/laptop.nix b/profiles/laptop.nix index dcf88a0..466a1ef 100644 --- a/profiles/laptop.nix +++ b/profiles/laptop.nix @@ -4,6 +4,7 @@ ./gui.nix ../modules/nix/bluetooth.nix ../modules/nix/fingerprint.nix + ../modules/nix/network/wifi.nix ]; home-manager.users.${userName}.imports = [ ]; } From f5ecef894da30d5abab3580b7fc2a73316d2bc29 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 28 May 2026 18:37:32 +0900 Subject: [PATCH 13/39] feat --- hosts/default.nix | 13 ++++++++++++- modules/nix/boot/nfs.nix | 1 + modules/nix/noctalia.nix | 10 ++++++++++ modules/nix/power.nix | 14 ++++++++++++++ modules/nix/secure-boot.nix | 21 +++++++++++++++++++++ profiles/base.nix | 26 +++++++++++++++++++++++++- profiles/cli-minimal.nix | 30 +++++++++++++++++++++++++++++- profiles/gui.nix | 27 ++++++++++++++++++++++++++- profiles/laptop.nix | 13 ++++++++++++- 9 files changed, 150 insertions(+), 5 deletions(-) create mode 100644 modules/nix/noctalia.nix create mode 100644 modules/nix/power.nix create mode 100644 modules/nix/secure-boot.nix diff --git a/hosts/default.nix b/hosts/default.nix index 1c93ddf..3000923 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -1,5 +1,6 @@ { inputs, + pkgs, config, lib, ... @@ -9,6 +10,13 @@ let userName = "moons"; + unstable = import inputs.nixpkgs-unstable { + inherit (pkgs) system; + config = { + allowUnfree = true; + }; + }; + mkSystem = { host, @@ -21,11 +29,14 @@ let nixosSystem { inherit system; modules = [ + { + nixpkgs.config.allowUnfree = true; + } ../profiles/${profile}.nix ./${host}/default.nix ] ++ extraModules; - specialArgs = { inherit inputs userName; }; + specialArgs = { inherit inputs userName unstable; }; }; in { diff --git a/modules/nix/boot/nfs.nix b/modules/nix/boot/nfs.nix index 7c359a2..26b609b 100644 --- a/modules/nix/boot/nfs.nix +++ b/modules/nix/boot/nfs.nix @@ -1,3 +1,4 @@ _: { boot.supportedFilesystems = [ "nfs" ]; + fuse.userAllowOther = true; } diff --git a/modules/nix/noctalia.nix b/modules/nix/noctalia.nix new file mode 100644 index 0000000..e2d3efb --- /dev/null +++ b/modules/nix/noctalia.nix @@ -0,0 +1,10 @@ +{ + pkgs, + inputs, + ... +}: +{ + environment.systemPackages = with pkgs; [ + inputs.noctalia.packages.${system}.default + ]; +} diff --git a/modules/nix/power.nix b/modules/nix/power.nix new file mode 100644 index 0000000..c64097d --- /dev/null +++ b/modules/nix/power.nix @@ -0,0 +1,14 @@ +_: { + boot.kernelParams = [ + "mem_sleep_default=deep" + ]; + + powerManagement = { + enable = true; + powertop.enable = true; + }; + + services.power-profiles-daemon.enable = true; + services.tlp.enable = false; + services.upower.enable = true; +} diff --git a/modules/nix/secure-boot.nix b/modules/nix/secure-boot.nix new file mode 100644 index 0000000..97f7656 --- /dev/null +++ b/modules/nix/secure-boot.nix @@ -0,0 +1,21 @@ +{ + inputs, + lib, + ... +}: +{ + imports = [ + inputs.lanzaboote.nixosModules.lanzaboote + ]; + + boot.loader = { + systemd-boot.enable = lib.mkForce false; + efi.canTouchEfiVariables = true; + efi.efiSysMountPoint = "/boot"; + }; + + boot.lanzaboote = { + enable = true; + pkiBundle = "/var/lib/sbctl"; + }; +} diff --git a/profiles/base.nix b/profiles/base.nix index c22cfec..6590473 100644 --- a/profiles/base.nix +++ b/profiles/base.nix @@ -1,4 +1,8 @@ -{ userName, ... }: +{ + pkgs, + userName, + ... +}: { imports = [ ../modules/nix/boot @@ -8,6 +12,26 @@ ../modules/nix/user.nix ../modules/nix/network ]; + + programs = { + zsh.enable = true; + gnupg.agent = { + enable = true; + enableSSHSupport = false; + }; + }; + + environment.systemPackages = with pkgs; [ + htop + btop # Simple Terminal Based System Monitor + unrar # Tool For Handling .rar Files + unzip # Tool For Handling .zip Files + wget # Tool For Fetching Files With Links + curl # Tool For Fetching Files With Links + git # Version Control System + unstable.msedit # Microsoft Editor + ]; + home-manager.users.${userName}.imports = [ ]; } diff --git a/profiles/cli-minimal.nix b/profiles/cli-minimal.nix index 64717e8..d91ace9 100644 --- a/profiles/cli-minimal.nix +++ b/profiles/cli-minimal.nix @@ -1,7 +1,35 @@ -{ userName, ... }: +{ + pkgs, + userName, + ... +}: { imports = [ ./base.nix ]; + programs = { + java = { + enable = true; + package = pkgs.jdk25; + }; + }; + + environment.systemPackages = with pkgs; [ + nil # Nix Language Server + docker # Containerization Platform + tio # A Simple TTY Terminal I/O Application + sqlite # Vscode Raycast Extension Dependency + oxker # Docker TUI Tool + jdk25 # Java Development Kit 25 + maven # Java Build Tool + gradle # Java Build Tool + python312 # Python 3.12 + uv # Universal Virtual Environment Manager For Python + bun # A Fast JavaScript Runtime Like Node.js And Deno + unstable.claude-code # Anthropic's AI Assistant + unstable.codex # OpenAI's Code Generation Model + unstable.opencode # Coding AI Assistant + ]; + home-manager.users.${userName}.imports = [ ]; } diff --git a/profiles/gui.nix b/profiles/gui.nix index e60dcf3..f2f666d 100644 --- a/profiles/gui.nix +++ b/profiles/gui.nix @@ -1,4 +1,8 @@ -{ userName, ... }: +{ + pkgs, + userName, + ... +}: { imports = [ ./cli-minimal.nix @@ -8,6 +12,27 @@ ../modules/nix/greetd.nix ../modules/nix/i18n.nix ../modules/nix/kde.nix + ../modules/nix/noctalia.nix ]; + + programs = { + niri.enable = true; + xwayland.enable = true; + dconf.enable = true; + seahorse.enable = true; + }; + + environment.systemPackages = with pkgs; [ + tuigreet # The Login Manager (Sometimes Referred To As Display Manager) + uwsm # Universal Wayland Session Manager (optional must be enabled) + alacritty # A GPU Accelerated Terminal Emulator + fuzzel # A Simple And Lightweight Application Launcher + unstable.ghostty # A Fast And Minimal Terminal Emulator For Wayland + xwayland-satellite # A Helper For Running X11 Applications In Wayland + slurp # A Tool For Selecting A Region Of The Screen + grim # A Tool For Taking Screenshots In Wayland with slurp + wf-recorder # A Screen Recorder For Wayland + ]; + home-manager.users.${userName}.imports = [ ]; } diff --git a/profiles/laptop.nix b/profiles/laptop.nix index 466a1ef..f23890a 100644 --- a/profiles/laptop.nix +++ b/profiles/laptop.nix @@ -1,10 +1,21 @@ -{ userName, ... }: +{ + pkgs, + userName, + ... +}: { imports = [ ./gui.nix ../modules/nix/bluetooth.nix ../modules/nix/fingerprint.nix ../modules/nix/network/wifi.nix + ../modules/nix/power.nix ]; + + environment.systemPackages = with pkgs; [ + tailscale # Zero-Config VPN + sbctl # Secure Boot Key Management Tool + ]; + home-manager.users.${userName}.imports = [ ]; } From 5f1cfc5275a5bab5c32e8b98d041f19b62a72916 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Sat, 30 May 2026 19:03:33 +0900 Subject: [PATCH 14/39] fix --- .gitignore | 1 + AGENTS.md | 91 ++++++ flake.lock | 215 +++++++++++-- flake.nix | 3 + hosts/default.nix | 4 +- images/avatar.jpg | Bin 0 -> 42497 bytes modules/applications/btop/default.nix | 23 ++ modules/applications/btop/dracula.theme | 89 ++++++ modules/applications/btop/home.nix | 25 ++ modules/applications/btop/system.nix | 20 ++ modules/applications/chrome.nix | 46 +++ modules/applications/claude/default.nix | 23 ++ modules/applications/claude/home.nix | 27 ++ modules/applications/claude/system.nix | 21 ++ modules/applications/default.nix | 32 ++ modules/applications/direnv.nix | 16 + modules/applications/discord.nix | 23 ++ modules/applications/docker.nix | 34 ++ modules/applications/fcitx5/config | 69 ++++ modules/applications/fcitx5/default.nix | 23 ++ modules/applications/fcitx5/home.nix | 24 ++ modules/applications/fcitx5/system.nix | 48 +++ modules/applications/ghostty/config | 31 ++ modules/applications/ghostty/default.nix | 23 ++ modules/applications/ghostty/dracula.theme | 45 +++ modules/applications/ghostty/home.nix | 29 ++ modules/applications/ghostty/system.nix | 20 ++ modules/applications/git/default.nix | 33 ++ modules/applications/git/home.nix | 59 ++++ modules/applications/git/system.nix | 20 ++ modules/applications/gnupg.nix | 16 + modules/applications/greetd.nix | 26 ++ modules/applications/gtk/default.nix | 25 ++ modules/applications/gtk/home.nix | 36 +++ modules/applications/gtk/system.nix | 14 + modules/applications/java.nix | 21 ++ modules/applications/kde.nix | 19 ++ modules/applications/nautilus.nix | 22 ++ modules/applications/niri/default.nix | 23 ++ modules/applications/niri/defaultKeyBind.nix | 166 ++++++++++ modules/applications/niri/home.nix | 164 ++++++++++ modules/applications/niri/system.nix | 17 + modules/applications/noctalia/default.nix | 23 ++ modules/applications/noctalia/home.nix | 178 +++++++++++ modules/applications/noctalia/system.nix | 21 ++ modules/applications/openssh.nix | 23 ++ modules/applications/ssh/default.nix | 43 +++ modules/applications/ssh/home.nix | 37 +++ modules/applications/ssh/system.nix | 20 ++ modules/applications/swayidle.nix | 64 ++++ modules/applications/tailscale.nix | 38 +++ modules/applications/vicinae.nix | 62 ++++ modules/applications/vim/default.nix | 23 ++ modules/applications/vim/home/autocmds.nix | 8 + modules/applications/vim/home/colorscheme.nix | 6 + modules/applications/vim/home/default.nix | 57 ++++ modules/applications/vim/home/keymaps.nix | 179 +++++++++++ modules/applications/vim/home/language.nix | 13 + modules/applications/vim/home/lsp.nix | 65 ++++ modules/applications/vim/home/options.nix | 50 +++ .../applications/vim/home/plugins/default.nix | 7 + .../vim/home/plugins/editor/autopairs.nix | 3 + .../vim/home/plugins/editor/blink-cmp.nix | 56 ++++ .../vim/home/plugins/editor/comment.nix | 3 + .../vim/home/plugins/editor/conform.nix | 24 ++ .../vim/home/plugins/editor/copilot.nix | 11 + .../vim/home/plugins/editor/default.nix | 23 ++ .../vim/home/plugins/editor/flash.nix | 9 + .../vim/home/plugins/editor/git-conflict.nix | 9 + .../vim/home/plugins/editor/git.nix | 11 + .../vim/home/plugins/editor/gitsigns.nix | 25 ++ .../vim/home/plugins/editor/glance.nix | 9 + .../vim/home/plugins/editor/lsp-signature.nix | 11 + .../vim/home/plugins/editor/snacks.nix | 32 ++ .../vim/home/plugins/editor/spectre.nix | 10 + .../vim/home/plugins/editor/surround.nix | 3 + .../vim/home/plugins/editor/todo-comments.nix | 9 + .../vim/home/plugins/editor/treesitter.nix | 17 + .../vim/home/plugins/editor/trouble.nix | 3 + .../vim/home/plugins/editor/wakatime.nix | 4 + .../vim/home/plugins/ui/barbar.nix | 26 ++ .../vim/home/plugins/ui/blankline.nix | 20 ++ .../vim/home/plugins/ui/colorizer.nix | 26 ++ .../vim/home/plugins/ui/default.nix | 20 ++ .../vim/home/plugins/ui/dropbar.nix | 3 + .../vim/home/plugins/ui/lightbulb.nix | 6 + .../vim/home/plugins/ui/lualine.nix | 25 ++ .../vim/home/plugins/ui/markview.nix | 9 + .../vim/home/plugins/ui/neo-tree.nix | 37 +++ .../vim/home/plugins/ui/scrollbar.nix | 9 + .../vim/home/plugins/ui/toggleterm.nix | 3 + .../vim/home/plugins/ui/treesitter.nix | 3 + .../applications/vim/home/plugins/ui/ufo.nix | 24 ++ .../vim/home/plugins/ui/web-devicons.nix | 4 + .../vim/home/plugins/ui/which-key.nix | 4 + .../vim/home/plugins/ui/zen-mode.nix | 9 + modules/applications/vim/system.nix | 22 ++ modules/applications/vscode/default.nix | 23 ++ modules/applications/vscode/home.nix | 296 ++++++++++++++++++ modules/applications/vscode/system.nix | 20 ++ modules/applications/wayland.nix | 53 ++++ modules/applications/zellij/default.nix | 23 ++ modules/applications/zellij/home.nix | 81 +++++ modules/applications/zellij/system.nix | 20 ++ modules/applications/zoom.nix | 26 ++ modules/applications/zsh/default.nix | 25 ++ modules/applications/zsh/home.nix | 58 ++++ modules/applications/zsh/system.nix | 13 + modules/default.nix | 0 modules/drivers/default.nix | 5 + modules/drivers/intel-drivers.nix | 18 +- modules/integrations/default.nix | 5 + modules/integrations/home-manager.nix | 25 ++ modules/nix/boot/nfs.nix | 4 - modules/nix/boot/uefi.nix | 7 - modules/nix/camera.nix | 21 -- modules/nix/fingerprint.nix | 14 - modules/nix/fonts.nix | 29 -- modules/nix/greetd.nix | 12 - modules/nix/hardware/bluetooth.nix | 6 - modules/nix/hardware/gui.nix | 5 - modules/nix/i18n.nix | 34 -- modules/nix/kde.nix | 5 - modules/nix/network/wifi.nix | 24 -- modules/nix/noctalia.nix | 10 - modules/nix/power.nix | 14 - modules/nix/secure-boot.nix | 21 -- modules/nix/user.nix | 21 -- modules/{nix => system}/boot/default.nix | 0 modules/system/boot/nfs.nix | 18 ++ modules/system/boot/uefi.nix | 20 ++ modules/system/camera.nix | 35 +++ modules/system/default.nix | 17 + modules/system/fingerprint.nix | 23 ++ modules/system/fonts.nix | 43 +++ modules/{nix => system}/gc.nix | 0 modules/system/hardware/bluetooth.nix | 26 ++ modules/{nix => system}/hardware/default.nix | 0 modules/system/hardware/gui.nix | 19 ++ modules/system/locale.nix | 18 ++ modules/{nix => system}/network/default.nix | 0 modules/{nix => system}/network/root_ca.crt | 0 modules/system/network/wifi.nix | 38 +++ modules/{nix/caches.nix => system/nix.nix} | 5 + modules/system/power.nix | 28 ++ modules/system/secure-boot.nix | 31 ++ modules/system/user/default.nix | 13 + modules/system/user/moons.nix | 25 ++ modules/system/version.nix | 22 ++ profiles/base.nix | 15 +- profiles/cli-minimal.nix | 4 +- profiles/cli-vm.nix | 4 +- profiles/desktop.nix | 4 +- profiles/gui.nix | 25 +- profiles/laptop.nix | 12 +- 155 files changed, 4168 insertions(+), 300 deletions(-) create mode 100644 images/avatar.jpg create mode 100644 modules/applications/btop/default.nix create mode 100644 modules/applications/btop/dracula.theme create mode 100644 modules/applications/btop/home.nix create mode 100644 modules/applications/btop/system.nix create mode 100644 modules/applications/chrome.nix create mode 100644 modules/applications/claude/default.nix create mode 100644 modules/applications/claude/home.nix create mode 100644 modules/applications/claude/system.nix create mode 100644 modules/applications/default.nix create mode 100644 modules/applications/direnv.nix create mode 100644 modules/applications/discord.nix create mode 100644 modules/applications/docker.nix create mode 100644 modules/applications/fcitx5/config create mode 100644 modules/applications/fcitx5/default.nix create mode 100644 modules/applications/fcitx5/home.nix create mode 100644 modules/applications/fcitx5/system.nix create mode 100644 modules/applications/ghostty/config create mode 100644 modules/applications/ghostty/default.nix create mode 100644 modules/applications/ghostty/dracula.theme create mode 100644 modules/applications/ghostty/home.nix create mode 100644 modules/applications/ghostty/system.nix create mode 100644 modules/applications/git/default.nix create mode 100644 modules/applications/git/home.nix create mode 100644 modules/applications/git/system.nix create mode 100644 modules/applications/gnupg.nix create mode 100644 modules/applications/greetd.nix create mode 100644 modules/applications/gtk/default.nix create mode 100644 modules/applications/gtk/home.nix create mode 100644 modules/applications/gtk/system.nix create mode 100644 modules/applications/java.nix create mode 100644 modules/applications/kde.nix create mode 100644 modules/applications/nautilus.nix create mode 100644 modules/applications/niri/default.nix create mode 100644 modules/applications/niri/defaultKeyBind.nix create mode 100644 modules/applications/niri/home.nix create mode 100644 modules/applications/niri/system.nix create mode 100644 modules/applications/noctalia/default.nix create mode 100644 modules/applications/noctalia/home.nix create mode 100644 modules/applications/noctalia/system.nix create mode 100644 modules/applications/openssh.nix create mode 100644 modules/applications/ssh/default.nix create mode 100644 modules/applications/ssh/home.nix create mode 100644 modules/applications/ssh/system.nix create mode 100644 modules/applications/swayidle.nix create mode 100644 modules/applications/tailscale.nix create mode 100644 modules/applications/vicinae.nix create mode 100644 modules/applications/vim/default.nix create mode 100644 modules/applications/vim/home/autocmds.nix create mode 100644 modules/applications/vim/home/colorscheme.nix create mode 100644 modules/applications/vim/home/default.nix create mode 100644 modules/applications/vim/home/keymaps.nix create mode 100644 modules/applications/vim/home/language.nix create mode 100644 modules/applications/vim/home/lsp.nix create mode 100644 modules/applications/vim/home/options.nix create mode 100644 modules/applications/vim/home/plugins/default.nix create mode 100644 modules/applications/vim/home/plugins/editor/autopairs.nix create mode 100644 modules/applications/vim/home/plugins/editor/blink-cmp.nix create mode 100644 modules/applications/vim/home/plugins/editor/comment.nix create mode 100644 modules/applications/vim/home/plugins/editor/conform.nix create mode 100644 modules/applications/vim/home/plugins/editor/copilot.nix create mode 100644 modules/applications/vim/home/plugins/editor/default.nix create mode 100644 modules/applications/vim/home/plugins/editor/flash.nix create mode 100644 modules/applications/vim/home/plugins/editor/git-conflict.nix create mode 100644 modules/applications/vim/home/plugins/editor/git.nix create mode 100644 modules/applications/vim/home/plugins/editor/gitsigns.nix create mode 100644 modules/applications/vim/home/plugins/editor/glance.nix create mode 100644 modules/applications/vim/home/plugins/editor/lsp-signature.nix create mode 100644 modules/applications/vim/home/plugins/editor/snacks.nix create mode 100644 modules/applications/vim/home/plugins/editor/spectre.nix create mode 100644 modules/applications/vim/home/plugins/editor/surround.nix create mode 100644 modules/applications/vim/home/plugins/editor/todo-comments.nix create mode 100644 modules/applications/vim/home/plugins/editor/treesitter.nix create mode 100644 modules/applications/vim/home/plugins/editor/trouble.nix create mode 100644 modules/applications/vim/home/plugins/editor/wakatime.nix create mode 100644 modules/applications/vim/home/plugins/ui/barbar.nix create mode 100644 modules/applications/vim/home/plugins/ui/blankline.nix create mode 100644 modules/applications/vim/home/plugins/ui/colorizer.nix create mode 100644 modules/applications/vim/home/plugins/ui/default.nix create mode 100644 modules/applications/vim/home/plugins/ui/dropbar.nix create mode 100644 modules/applications/vim/home/plugins/ui/lightbulb.nix create mode 100644 modules/applications/vim/home/plugins/ui/lualine.nix create mode 100644 modules/applications/vim/home/plugins/ui/markview.nix create mode 100644 modules/applications/vim/home/plugins/ui/neo-tree.nix create mode 100644 modules/applications/vim/home/plugins/ui/scrollbar.nix create mode 100644 modules/applications/vim/home/plugins/ui/toggleterm.nix create mode 100644 modules/applications/vim/home/plugins/ui/treesitter.nix create mode 100644 modules/applications/vim/home/plugins/ui/ufo.nix create mode 100644 modules/applications/vim/home/plugins/ui/web-devicons.nix create mode 100644 modules/applications/vim/home/plugins/ui/which-key.nix create mode 100644 modules/applications/vim/home/plugins/ui/zen-mode.nix create mode 100644 modules/applications/vim/system.nix create mode 100644 modules/applications/vscode/default.nix create mode 100644 modules/applications/vscode/home.nix create mode 100644 modules/applications/vscode/system.nix create mode 100644 modules/applications/wayland.nix create mode 100644 modules/applications/zellij/default.nix create mode 100644 modules/applications/zellij/home.nix create mode 100644 modules/applications/zellij/system.nix create mode 100644 modules/applications/zoom.nix create mode 100644 modules/applications/zsh/default.nix create mode 100644 modules/applications/zsh/home.nix create mode 100644 modules/applications/zsh/system.nix create mode 100644 modules/default.nix create mode 100644 modules/drivers/default.nix create mode 100644 modules/integrations/default.nix create mode 100644 modules/integrations/home-manager.nix delete mode 100644 modules/nix/boot/nfs.nix delete mode 100644 modules/nix/boot/uefi.nix delete mode 100644 modules/nix/camera.nix delete mode 100644 modules/nix/fingerprint.nix delete mode 100644 modules/nix/fonts.nix delete mode 100644 modules/nix/greetd.nix delete mode 100644 modules/nix/hardware/bluetooth.nix delete mode 100644 modules/nix/hardware/gui.nix delete mode 100644 modules/nix/i18n.nix delete mode 100644 modules/nix/kde.nix delete mode 100644 modules/nix/network/wifi.nix delete mode 100644 modules/nix/noctalia.nix delete mode 100644 modules/nix/power.nix delete mode 100644 modules/nix/secure-boot.nix delete mode 100644 modules/nix/user.nix rename modules/{nix => system}/boot/default.nix (100%) create mode 100644 modules/system/boot/nfs.nix create mode 100644 modules/system/boot/uefi.nix create mode 100644 modules/system/camera.nix create mode 100644 modules/system/default.nix create mode 100644 modules/system/fingerprint.nix create mode 100644 modules/system/fonts.nix rename modules/{nix => system}/gc.nix (100%) create mode 100644 modules/system/hardware/bluetooth.nix rename modules/{nix => system}/hardware/default.nix (100%) create mode 100644 modules/system/hardware/gui.nix create mode 100644 modules/system/locale.nix rename modules/{nix => system}/network/default.nix (100%) rename modules/{nix => system}/network/root_ca.crt (100%) create mode 100644 modules/system/network/wifi.nix rename modules/{nix/caches.nix => system/nix.nix} (90%) create mode 100644 modules/system/power.nix create mode 100644 modules/system/secure-boot.nix create mode 100644 modules/system/user/default.nix create mode 100644 modules/system/user/moons.nix create mode 100644 modules/system/version.nix diff --git a/.gitignore b/.gitignore index 249099f..66ecee4 100644 --- a/.gitignore +++ b/.gitignore @@ -16,5 +16,6 @@ !profiles/ !modules/ !docs/ +!images/ !/flake/ diff --git a/AGENTS.md b/AGENTS.md index 6b39828..9611f51 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -17,3 +17,94 @@ nix fmt - User: `moons`, locale: `ja_JP.UTF-8`, timezone: `Asia/Tokyo` - Commits: conventional commits (`feat:`, `chore:`, `fix:`, etc.) - リモート: `git@github.com:moons-14/dotfiles.git` +- `modules/system/` や `modules/applications/` に新しいファイルを追加した際は、必ず同ディレクトリの `default.nix` の `imports` に追加する +- `environment.systemPackages` にパッケージを追加する際は、パッケージ名の横に簡単な説明をコメントで追加する + +## Module Structure + +### `modules/system/` + +システムレベル(NixOS)の設定。OS 全体に影響する設定を配置する。 + +- 例: boot, hardware, network, user, locale, fonts, power, secure-boot, caches, gc, version + +### `modules/applications/` + +アプリケーション固有の設定。ユーザーが個別に有効/無効を切り替えたいアプリケーションを配置する。 + +- 例: niri, noctalia, greetd, fcitx5, kde, wayland + +### Module Pattern + +`modules/system/` と `modules/applications/` のモジュールは、デフォルトで `config.my.*` namespace で有効/無効を切り替えられる仕組みにする。 + +#### Simple Module (NixOS のみ) + +home-manager の設定を含まないモジュール: + +```nix +{ + lib, + config, + ... +}: +let + cfg = config.my..; +in +{ + options.my.. = { + enable = lib.mkEnableOption ""; + }; + + config = lib.mkIf cfg.enable { + # configuration here + }; +} +``` + +- `my.system.*` — system モジュール用 +- `my.applications.*` — applications モジュール用 + +#### Complex Module (NixOS + Home Manager) + +home-manager の設定も含むモジュールは3つのフラグを設定する: + +``` +modules/applications// +├── default.nix # my.applications..enable (マスター) +├── system.nix # my.applications..system.enable +├── home.nix # my.applications..homeManager.enable +└── (other files) # 設定ファイル等 +``` + +`default.nix`: + +```nix +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.; +in +{ + options.my.applications. = { + enable = lib.mkEnableOption ""; + system.enable = lib.mkEnableOption " system configuration"; + homeManager.enable = lib.mkEnableOption " home-manager configuration"; + }; + + imports = [ + ./system.nix + ./home.nix + ]; + + config = lib.mkIf cfg.enable { + my.applications..system.enable = lib.mkDefault true; + my.applications..homeManager.enable = lib.mkDefault true; + }; +} +``` + +マスターの `enable` を有効にすると、`lib.mkDefault` で system と homeManager の両方が有効化される。個別に無効化も可能。 diff --git a/flake.lock b/flake.lock index e3d50e1..1160ba5 100644 --- a/flake.lock +++ b/flake.lock @@ -68,6 +68,64 @@ "type": "github" } }, + "blueprint": { + "inputs": { + "nixpkgs": [ + "llm-agents", + "nixpkgs" + ], + "systems": [ + "llm-agents", + "systems" + ] + }, + "locked": { + "lastModified": 1776249299, + "narHash": "sha256-Dt9t1TGRmJFc0xVYhttNBD6QsAgHOHCArqGa0AyjrJY=", + "owner": "numtide", + "repo": "blueprint", + "rev": "56131e8628f173d24a27f6d27c0215eff57e40dd", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "blueprint", + "type": "github" + } + }, + "bun2nix": { + "inputs": { + "flake-parts": [ + "llm-agents", + "flake-parts" + ], + "nixpkgs": [ + "llm-agents", + "nixpkgs" + ], + "systems": [ + "llm-agents", + "systems" + ], + "treefmt-nix": [ + "llm-agents", + "treefmt-nix" + ] + }, + "locked": { + "lastModified": 1778446047, + "narHash": "sha256-oQvcadh2BCkrog+SGrG6YffKJrveYpjj3TdQJWaKhaM=", + "owner": "nix-community", + "repo": "bun2nix", + "rev": "f2bc12af1a6369648aac41041ceeaa0b866599c6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "bun2nix", + "type": "github" + } + }, "crane": { "locked": { "lastModified": 1779130139, @@ -200,7 +258,7 @@ "flake-parts_2": { "inputs": { "nixpkgs-lib": [ - "nixvim", + "llm-agents", "nixpkgs" ] }, @@ -219,6 +277,27 @@ } }, "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778716662, + "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { "inputs": { "nixpkgs-lib": [ "stylix", @@ -422,11 +501,34 @@ "type": "github" } }, + "llm-agents": { + "inputs": { + "blueprint": "blueprint", + "bun2nix": "bun2nix", + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_3", + "systems": "systems_2", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1780119579, + "narHash": "sha256-EnWR9fQzTfmIkyWD8ynYdAM573x3wzkOzZuMagrEosQ=", + "owner": "numtide", + "repo": "llm-agents.nix", + "rev": "b8adcd1a8e45e6d84f511c1a3b12998634481204", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "llm-agents.nix", + "type": "github" + } + }, "niri-flake": { "inputs": { "niri-stable": "niri-stable", "niri-unstable": "niri-unstable", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_4", "nixpkgs-stable": "nixpkgs-stable", "xwayland-satellite-stable": "xwayland-satellite-stable", "xwayland-satellite-unstable": "xwayland-satellite-unstable" @@ -497,7 +599,7 @@ "nixos-wsl": { "inputs": { "flake-compat": "flake-compat_4", - "nixpkgs": "nixpkgs_4" + "nixpkgs": "nixpkgs_5" }, "locked": { "lastModified": 1777732699, @@ -590,6 +692,22 @@ } }, "nixpkgs_3": { + "locked": { + "lastModified": 1779955849, + "narHash": "sha256-31mhzm2HpzRr/rupWAFfWBmt9SUjzwr5+giv5Nmb/rA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a2c6938835fca96e4a10c8561d461efd2f91d04f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { "locked": { "lastModified": 1779560665, "narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=", @@ -605,7 +723,7 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_5": { "locked": { "lastModified": 1776169885, "narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", @@ -621,7 +739,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_6": { "locked": { "lastModified": 1779622335, "narHash": "sha256-ViA62qtL5za7V3d5I8OA9q9JcFhsVAiL5jVHwEclWqk=", @@ -637,7 +755,7 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_7": { "locked": { "lastModified": 1770107345, "narHash": "sha256-tbS0Ebx2PiA1FRW8mt8oejR0qMXmziJmPaU1d4kYY9g=", @@ -653,7 +771,7 @@ "type": "github" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { "lastModified": 1772542754, "narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=", @@ -671,11 +789,11 @@ }, "nixvim": { "inputs": { - "flake-parts": "flake-parts_2", + "flake-parts": "flake-parts_3", "nixpkgs": [ "nixpkgs" ], - "systems": "systems_2" + "systems": "systems_3" }, "locked": { "lastModified": 1779816597, @@ -718,8 +836,8 @@ "noctalia", "nixpkgs" ], - "systems": "systems_3", - "treefmt-nix": "treefmt-nix" + "systems": "systems_4", + "treefmt-nix": "treefmt-nix_2" }, "locked": { "lastModified": 1779588472, @@ -810,18 +928,19 @@ "git-hooks-nix": "git-hooks-nix", "home-manager": "home-manager_2", "lanzaboote": "lanzaboote", + "llm-agents": "llm-agents", "niri-flake": "niri-flake", "nixos-hardware": "nixos-hardware", "nixos-wsl": "nixos-wsl", - "nixpkgs": "nixpkgs_5", + "nixpkgs": "nixpkgs_6", "nixpkgs-unstable": "nixpkgs-unstable", "nixvim": "nixvim", "noctalia": "noctalia", "quickshell": "quickshell", "services-flake": "services-flake", "stylix": "stylix", - "systems": "systems_5", - "treefmt-nix": "treefmt-nix_2", + "systems": "systems_6", + "treefmt-nix": "treefmt-nix_3", "vicinae": "vicinae", "vicinae-extensions": "vicinae-extensions" } @@ -869,13 +988,13 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_3", + "flake-parts": "flake-parts_4", "gnome-shell": "gnome-shell", "nixpkgs": [ "nixpkgs" ], "nur": "nur", - "systems": "systems_4", + "systems": "systems_5", "tinted-kitty": "tinted-kitty", "tinted-schemes": "tinted-schemes", "tinted-tmux": "tinted-tmux", @@ -928,20 +1047,35 @@ }, "systems_3": { "locked": { - "lastModified": 1689347949, - "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "owner": "nix-systems", - "repo": "default-linux", - "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { "owner": "nix-systems", - "repo": "default-linux", + "repo": "default", "type": "github" } }, "systems_4": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_5": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -956,7 +1090,7 @@ "type": "github" } }, - "systems_5": { + "systems_6": { "locked": { "lastModified": 1689347949, "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", @@ -971,7 +1105,7 @@ "type": "github" } }, - "systems_6": { + "systems_7": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -986,7 +1120,7 @@ "type": "github" } }, - "systems_7": { + "systems_8": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -1068,8 +1202,7 @@ "treefmt-nix": { "inputs": { "nixpkgs": [ - "noctalia", - "noctalia-qs", + "llm-agents", "nixpkgs" ] }, @@ -1089,7 +1222,29 @@ }, "treefmt-nix_2": { "inputs": { - "nixpkgs": "nixpkgs_6" + "nixpkgs": [ + "noctalia", + "noctalia-qs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775636079, + "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_3": { + "inputs": { + "nixpkgs": "nixpkgs_7" }, "locked": { "lastModified": 1775636079, @@ -1107,8 +1262,8 @@ }, "vicinae": { "inputs": { - "nixpkgs": "nixpkgs_7", - "systems": "systems_6" + "nixpkgs": "nixpkgs_8", + "systems": "systems_7" }, "locked": { "lastModified": 1779832601, @@ -1130,7 +1285,7 @@ "nixpkgs": [ "nixpkgs" ], - "systems": "systems_7", + "systems": "systems_8", "vicinae": "vicinae_2" }, "locked": { diff --git a/flake.nix b/flake.nix index 229377e..3e4b271 100644 --- a/flake.nix +++ b/flake.nix @@ -67,6 +67,9 @@ # Dev services services-flake.url = "github:juspay/services-flake"; + # LLM agents + llm-agents.url = "github:numtide/llm-agents.nix"; + # Systems systems.url = "github:nix-systems/default-linux"; }; diff --git a/hosts/default.nix b/hosts/default.nix index 3000923..7d824a3 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -8,7 +8,7 @@ let inherit (inputs.nixpkgs.lib) nixosSystem; - userName = "moons"; + username = "moons"; unstable = import inputs.nixpkgs-unstable { inherit (pkgs) system; @@ -36,7 +36,7 @@ let ./${host}/default.nix ] ++ extraModules; - specialArgs = { inherit inputs userName unstable; }; + specialArgs = { inherit inputs username unstable; }; }; in { diff --git a/images/avatar.jpg b/images/avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98cde4eba9e2a9d294575e39075034e00329854c GIT binary patch literal 42497 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 literal 0 HcmV?d00001 diff --git a/modules/applications/btop/default.nix b/modules/applications/btop/default.nix new file mode 100644 index 0000000..6f87dd3 --- /dev/null +++ b/modules/applications/btop/default.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.btop; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.btop = { + enable = lib.mkEnableOption "btop system monitor"; + }; + + config = lib.mkIf cfg.enable { + my.applications.btop.system.enable = lib.mkDefault true; + my.applications.btop.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/btop/dracula.theme b/modules/applications/btop/dracula.theme new file mode 100644 index 0000000..a0355f3 --- /dev/null +++ b/modules/applications/btop/dracula.theme @@ -0,0 +1,89 @@ +#Bashtop theme with nord palette (https://www.nordtheme.com) +#by Justin Zobel + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#ffffff", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#282A36" + +# Main text color +theme[main_fg]="#BD93F9" + +# Title color for boxes +theme[title]="#f8f8f2" + +# Higlight color for keyboard shortcuts +theme[hi_fg]="#ff79c6" + +# Background color of selected item in processes box +theme[selected_bg]="#44475A" + +# Foreground color of selected item in processes box +theme[selected_fg]="#ECEFF4" + +# Color of inactive/disabled text +theme[inactive_fg]="#6272a4" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#BD93F9" + +# Cpu box outline color +theme[cpu_box]="#ff79c6" + +# Memory/disks box outline color +theme[mem_box]="#ff79c6" + +# Net up/down box outline color +theme[net_box]="#ff79c6" + +# Processes box outline color +theme[proc_box]="#ff79c6" + +# Box divider line and small boxes line color +theme[div_line]="#ff79c6" + +# Temperature graph colors +theme[temp_start]="#bd93f9" +theme[temp_mid]="#bd93f9" +theme[temp_end]="#bd93f9" + +# CPU graph colors +theme[cpu_start]="#bd93f9" +theme[cpu_mid]="#bd93f9" +theme[cpu_end]="#bd93f9" + +# Mem/Disk free meter +theme[free_start]="#bd93f9" +theme[free_mid]="#bd93f9" +theme[free_end]="#bd93f9" + +# Mem/Disk cached meter +theme[cached_start]="#bd93f9" +theme[cached_mid]="#bd93f9" +theme[cached_end]="#bd93f9" + +# Mem/Disk available meter +theme[available_start]="#bd93f9" +theme[available_mid]="#bd93f9" +theme[available_end]="#bd93f9" + +# Mem/Disk used meter +theme[used_start]="#bd93f9" +theme[used_mid]="#bd93f9" +theme[used_end]="#bd93f9" + +# Download graph colors +theme[download_start]="#bd93f9" +theme[download_mid]="#bd93f9" +theme[download_end]="#bd93f9" + +# Upload graph colors +theme[upload_start]="#bd93f9" +theme[upload_mid]="#bd93f9" +theme[upload_end]="#bd93f9" diff --git a/modules/applications/btop/home.nix b/modules/applications/btop/home.nix new file mode 100644 index 0000000..41ee0cc --- /dev/null +++ b/modules/applications/btop/home.nix @@ -0,0 +1,25 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.btop.homeManager; +in +{ + options.my.applications.btop.homeManager = { + enable = lib.mkEnableOption "btop home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf cfg.enable { + programs.btop = { + enable = true; + settings.color_theme = "dracula"; + themes.dracula = builtins.readFile ./dracula.theme; + }; + }; + } + ]; +} diff --git a/modules/applications/btop/system.nix b/modules/applications/btop/system.nix new file mode 100644 index 0000000..ae68aee --- /dev/null +++ b/modules/applications/btop/system.nix @@ -0,0 +1,20 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.btop.system; +in +{ + options.my.applications.btop.system = { + enable = lib.mkEnableOption "btop system configuration"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + btop # Resource monitor that shows usage and stats + ]; + }; +} diff --git a/modules/applications/chrome.nix b/modules/applications/chrome.nix new file mode 100644 index 0000000..29a22e1 --- /dev/null +++ b/modules/applications/chrome.nix @@ -0,0 +1,46 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.chrome; +in +{ + options.my.applications.chrome = { + enable = lib.mkEnableOption "Google Chrome browser"; + }; + + config = lib.mkIf cfg.enable { + nixpkgs.config.allowUnfree = true; + + home-manager.sharedModules = [ + { + home.packages = with pkgs; [ + google-chrome # Popular web browser from Google + ]; + + xdg.desktopEntries."google-chrome" = { + name = "Google Chrome"; + genericName = "Web Browser"; + exec = "${pkgs.google-chrome}/bin/google-chrome-stable --enable-features=TouchpadOverscrollHistoryNavigation %U"; + terminal = false; + icon = "google-chrome"; + categories = [ + "Network" + "WebBrowser" + ]; + startupNotify = true; + type = "Application"; + }; + + xdg.mimeApps.defaultApplications = { + "text/html" = "google-chrome.desktop"; + "x-scheme-handler/http" = "google-chrome.desktop"; + "x-scheme-handler/https" = "google-chrome.desktop"; + }; + } + ]; + }; +} diff --git a/modules/applications/claude/default.nix b/modules/applications/claude/default.nix new file mode 100644 index 0000000..aaec6a9 --- /dev/null +++ b/modules/applications/claude/default.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.claude; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.claude = { + enable = lib.mkEnableOption "Claude Code AI assistant"; + }; + + config = lib.mkIf cfg.enable { + my.applications.claude.system.enable = lib.mkDefault true; + my.applications.claude.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/claude/home.nix b/modules/applications/claude/home.nix new file mode 100644 index 0000000..0afcdca --- /dev/null +++ b/modules/applications/claude/home.nix @@ -0,0 +1,27 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.claude.homeManager; +in +{ + options.my.applications.claude.homeManager = { + enable = lib.mkEnableOption "Claude Code home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf cfg.enable { + home.file.".claude/settings.json".text = builtins.toJSON { + statusLine = { + type = "command"; + command = "bun x ccusage statusline --no-offline"; + padding = 0; + }; + }; + }; + } + ]; +} diff --git a/modules/applications/claude/system.nix b/modules/applications/claude/system.nix new file mode 100644 index 0000000..7eaee9d --- /dev/null +++ b/modules/applications/claude/system.nix @@ -0,0 +1,21 @@ +{ + pkgs, + inputs, + lib, + config, + ... +}: +let + cfg = config.my.applications.claude.system; +in +{ + options.my.applications.claude.system = { + enable = lib.mkEnableOption "Claude Code system configuration"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ + inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.claude-code # AI coding assistant + ]; + }; +} diff --git a/modules/applications/default.nix b/modules/applications/default.nix new file mode 100644 index 0000000..3e55634 --- /dev/null +++ b/modules/applications/default.nix @@ -0,0 +1,32 @@ +{ + imports = [ + ./btop + ./chrome.nix + ./claude + ./direnv.nix + ./discord.nix + ./docker.nix + ./fcitx5 + ./ghostty + ./git + ./gnupg.nix + ./greetd.nix + ./gtk + ./java.nix + ./kde.nix + ./nautilus.nix + ./niri + ./noctalia + ./openssh.nix + ./ssh + ./swayidle.nix + ./tailscale.nix + ./vicinae.nix + ./vim + ./vscode + ./wayland.nix + ./zellij + ./zoom.nix + ./zsh + ]; +} diff --git a/modules/applications/direnv.nix b/modules/applications/direnv.nix new file mode 100644 index 0000000..75d1009 --- /dev/null +++ b/modules/applications/direnv.nix @@ -0,0 +1,16 @@ +{ lib, config, ... }: +let + cfg = config.my.applications.direnv; +in +{ + options.my.applications.direnv = { + enable = lib.mkEnableOption "direnv environment variable manager"; + }; + + config = lib.mkIf cfg.enable { + programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; + }; +} diff --git a/modules/applications/discord.nix b/modules/applications/discord.nix new file mode 100644 index 0000000..28b121c --- /dev/null +++ b/modules/applications/discord.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.discord; +in +{ + options.my.applications.discord = { + enable = lib.mkEnableOption "Discord (Vesktop)"; + }; + + config = lib.mkIf cfg.enable { + home-manager.sharedModules = [ + { + programs.vesktop = { + enable = true; + }; + } + ]; + }; +} diff --git a/modules/applications/docker.nix b/modules/applications/docker.nix new file mode 100644 index 0000000..e6f4ba7 --- /dev/null +++ b/modules/applications/docker.nix @@ -0,0 +1,34 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.docker; +in +{ + options.my.applications.docker = { + enable = lib.mkEnableOption "Docker container runtime"; + }; + + config = lib.mkIf cfg.enable { + virtualisation.docker = { + enable = true; + autoPrune = { + enable = true; + dates = "weekly"; + }; + daemon.settings = { + ipv6 = true; + "fixed-cidr-v6" = "fd00:30::/64"; + ip6tables = true; + }; + }; + + environment.systemPackages = with pkgs; [ + docker # Container runtime + oxker # Docker TUI Tool + ]; + }; +} diff --git a/modules/applications/fcitx5/config b/modules/applications/fcitx5/config new file mode 100644 index 0000000..a11fae8 --- /dev/null +++ b/modules/applications/fcitx5/config @@ -0,0 +1,69 @@ +[Hotkey] +# トリガーキーを押すたびに切り替える +EnumerateWithTriggerKeys=False +# 一時的に第1入力メソッドに切り替える +AltTriggerKeys= +# 切り替え時は第1入力メソッドをスキップする +EnumerateSkipFirst=False +# Time limit in milliseconds for triggering modifier key shortcuts +ModifierOnlyKeyTimeout=250 + +[Hotkey/TriggerKeys] +1=Zenkaku_Hankaku + +[Hotkey/ActivateKeys] +0=Henkan + +[Hotkey/DeactivateKeys] +0=Muhenkan + +[Hotkey/PrevPage] +0=Up + +[Hotkey/NextPage] +0=Down + +[Hotkey/PrevCandidate] +0=Shift+Tab + +[Hotkey/NextCandidate] +0=Tab + +[Hotkey/TogglePreedit] +0=Control+Alt+P + +[Behavior] +# デフォルトで有効にする +ActiveByDefault=False +# フォーカス時に状態をリセット +resetStateWhenFocusIn=No +# 入力状態を共有する +ShareInputState=No +# アプリケーションにプリエディットを表示する +PreeditEnabledByDefault=True +# 入力メソッドを切り替える際に入力メソッドの情報を表示する +ShowInputMethodInformation=True +# フォーカスを変更する際に入力メソッドの情報を表示する +showInputMethodInformationWhenFocusIn=False +# 入力メソッドの情報をコンパクトに表示する +CompactInputMethodInformation=True +# 第1入力メソッドの情報を表示する +ShowFirstInputMethodInformation=True +# デフォルトのページサイズ +DefaultPageSize=5 +# XKB オプションより優先する +OverrideXkbOption=False +# カスタム XKB オプション +CustomXkbOption= +# Force Enabled Addons +EnabledAddons= +# Force Disabled Addons +DisabledAddons= +# Preload input method to be used by default +PreloadInputMethod=True +# パスワード欄に入力メソッドを許可する +AllowInputMethodForPassword=False +# パスワード入力時にプリエディットテキストを表示する +ShowPreeditForPassword=False +# ユーザーデータを保存する間隔(分) +AutoSavePeriod=30 diff --git a/modules/applications/fcitx5/default.nix b/modules/applications/fcitx5/default.nix new file mode 100644 index 0000000..7becf6f --- /dev/null +++ b/modules/applications/fcitx5/default.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.fcitx5; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.fcitx5 = { + enable = lib.mkEnableOption "fcitx5 input method"; + }; + + config = lib.mkIf cfg.enable { + my.applications.fcitx5.system.enable = lib.mkDefault true; + my.applications.fcitx5.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/fcitx5/home.nix b/modules/applications/fcitx5/home.nix new file mode 100644 index 0000000..94f5452 --- /dev/null +++ b/modules/applications/fcitx5/home.nix @@ -0,0 +1,24 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.fcitx5.homeManager; +in +{ + options.my.applications.fcitx5.homeManager = { + enable = lib.mkEnableOption "fcitx5 home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf cfg.enable { + home.file.".config/fcitx5/config" = { + recursive = true; + source = ./config; + }; + }; + } + ]; +} diff --git a/modules/applications/fcitx5/system.nix b/modules/applications/fcitx5/system.nix new file mode 100644 index 0000000..03ef957 --- /dev/null +++ b/modules/applications/fcitx5/system.nix @@ -0,0 +1,48 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.fcitx5.system; +in +{ + options.my.applications.fcitx5.system = { + enable = lib.mkEnableOption "fcitx5 system configuration"; + }; + + config = lib.mkIf cfg.enable { + i18n.inputMethod = { + enable = true; + type = "fcitx5"; + fcitx5 = { + waylandFrontend = true; + addons = with pkgs; [ + fcitx5-mozc-ut + fcitx5-gtk + kdePackages.fcitx5-qt + qt6Packages.fcitx5-configtool + ]; + settings.inputMethod = { + GroupOrder = { + "0" = "Default"; + }; + "Groups/0" = { + Name = "Default"; + "Default Layout" = "jp"; + DefaultIM = "mozc"; + }; + "Groups/0/Items/0" = { + Name = "keyboard-jp"; + Layout = ""; + }; + "Groups/0/Items/1" = { + Name = "mozc"; + Layout = ""; + }; + }; + }; + }; + }; +} diff --git a/modules/applications/ghostty/config b/modules/applications/ghostty/config new file mode 100644 index 0000000..0280dd4 --- /dev/null +++ b/modules/applications/ghostty/config @@ -0,0 +1,31 @@ +theme = dracula +background-blur-radius = 20 +background-opacity = 0.9 +font-family = BlexMono Nerd Font Mono +mouse-hide-while-typing = true +window-decoration = true + + +# keybind + +# Copy/Paste +keybind = ctrl+shift+c=copy_to_clipboard +keybind = ctrl+shift+v=paste_from_clipboard + +# create new tab +keybind = ctrl+shift+t=new_tab + +# move tabs +keybind = ctrl+alt+left_bracket=previous_tab +keybind = ctrl+alt+right_bracket=next_tab + +# close tab +keybind = ctrl+alt+q=close_window + +# font size +keybind = ctrl+shift+semicolon=increase_font_size:1 +keybind = ctrl+shift+minus=increase_font_size:1 + + +shell-integration-features = ssh-terminfo,ssh-env + diff --git a/modules/applications/ghostty/default.nix b/modules/applications/ghostty/default.nix new file mode 100644 index 0000000..950c021 --- /dev/null +++ b/modules/applications/ghostty/default.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.ghostty; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.ghostty = { + enable = lib.mkEnableOption "ghostty terminal emulator"; + }; + + config = lib.mkIf cfg.enable { + my.applications.ghostty.system.enable = lib.mkDefault true; + my.applications.ghostty.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/ghostty/dracula.theme b/modules/applications/ghostty/dracula.theme new file mode 100644 index 0000000..413226e --- /dev/null +++ b/modules/applications/ghostty/dracula.theme @@ -0,0 +1,45 @@ +# MIT License +# +# Copyright (c) 2023 Dracula Theme +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +palette = 0=#21222c +palette = 1=#ff5555 +palette = 2=#50fa7b +palette = 3=#f1fa8c +palette = 4=#bd93f9 +palette = 5=#ff79c6 +palette = 6=#8be9fd +palette = 7=#f8f8f2 +palette = 8=#6272a4 +palette = 9=#ff6e6e +palette = 10=#69ff94 +palette = 11=#ffffa5 +palette = 12=#d6acff +palette = 13=#ff92df +palette = 14=#a4ffff +palette = 15=#ffffff +background = #282a36 +foreground = #f8f8f2 +cursor-color = #f8f8f2 +cursor-text = #282a36 +selection-foreground = #f8f8f2 +selection-background = #44475a + diff --git a/modules/applications/ghostty/home.nix b/modules/applications/ghostty/home.nix new file mode 100644 index 0000000..dda43d8 --- /dev/null +++ b/modules/applications/ghostty/home.nix @@ -0,0 +1,29 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.ghostty.homeManager; +in +{ + options.my.applications.ghostty.homeManager = { + enable = lib.mkEnableOption "ghostty home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf cfg.enable { + home.file.".config/ghostty/config" = { + recursive = true; + source = ./config; + }; + + home.file.".config/ghostty/themes/dracula" = { + recursive = true; + source = ./dracula.theme; + }; + }; + } + ]; +} diff --git a/modules/applications/ghostty/system.nix b/modules/applications/ghostty/system.nix new file mode 100644 index 0000000..97ada0b --- /dev/null +++ b/modules/applications/ghostty/system.nix @@ -0,0 +1,20 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.ghostty.system; +in +{ + options.my.applications.ghostty.system = { + enable = lib.mkEnableOption "ghostty system configuration"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + unstable.ghostty # A fast and minimal terminal emulator for Wayland + ]; + }; +} diff --git a/modules/applications/git/default.nix b/modules/applications/git/default.nix new file mode 100644 index 0000000..89243c6 --- /dev/null +++ b/modules/applications/git/default.nix @@ -0,0 +1,33 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.git; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.git = { + enable = lib.mkEnableOption "git version control"; + userName = lib.mkOption { + type = lib.types.str; + default = "moons-14"; + description = "Git user name"; + }; + userEmail = lib.mkOption { + type = lib.types.str; + default = "moons@moons14.com"; + description = "Git user email"; + }; + }; + + config = lib.mkIf cfg.enable { + my.applications.git.system.enable = lib.mkDefault true; + my.applications.git.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/git/home.nix b/modules/applications/git/home.nix new file mode 100644 index 0000000..f16ce85 --- /dev/null +++ b/modules/applications/git/home.nix @@ -0,0 +1,59 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.git; + hmCfg = config.my.applications.git.homeManager; +in +{ + options.my.applications.git.homeManager = { + enable = lib.mkEnableOption "git home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf hmCfg.enable { + programs.git = { + enable = true; + ignores = [ + ".direnv/" + ".envrc" + "!.envrc.example" + ]; + + signing = { + key = "~/.ssh/id_ed25519.pub"; + signByDefault = true; + }; + + settings = { + user.name = cfg.userName; + user.email = cfg.userEmail; + push.default = "simple"; + credential.helper = "cache --timeout=7200"; + init.defaultBranch = "main"; + log.decorate = "full"; + log.date = "iso"; + merge.conflictStyle = "diff3"; + + gpg.format = "ssh"; + tag.gpgSign = true; + + alias = { + br = "branch --sort=-committerdate"; + co = "checkout"; + df = "diff"; + com = "commit -a"; + gs = "stash"; + gp = "pull"; + lg = "log --graph --pretty=format:'%Cred%h%Creset - %C(yellow)%d%Creset %s %C(green)(%cr)%C(bold blue) <%an>%Creset' --abbrev-commit"; + st = "status"; + }; + }; + }; + }; + } + ]; +} diff --git a/modules/applications/git/system.nix b/modules/applications/git/system.nix new file mode 100644 index 0000000..3d32726 --- /dev/null +++ b/modules/applications/git/system.nix @@ -0,0 +1,20 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.git.system; +in +{ + options.my.applications.git.system = { + enable = lib.mkEnableOption "git system configuration"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + git # Distributed version control system + ]; + }; +} diff --git a/modules/applications/gnupg.nix b/modules/applications/gnupg.nix new file mode 100644 index 0000000..d6cc900 --- /dev/null +++ b/modules/applications/gnupg.nix @@ -0,0 +1,16 @@ +{ lib, config, ... }: +let + cfg = config.my.applications.gnupg; +in +{ + options.my.applications.gnupg = { + enable = lib.mkEnableOption "GnuPG agent"; + }; + + config = lib.mkIf cfg.enable { + programs.gnupg.agent = { + enable = true; + enableSSHSupport = false; + }; + }; +} diff --git a/modules/applications/greetd.nix b/modules/applications/greetd.nix new file mode 100644 index 0000000..09f00e4 --- /dev/null +++ b/modules/applications/greetd.nix @@ -0,0 +1,26 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.greetd; +in +{ + options.my.applications.greetd = { + enable = lib.mkEnableOption "greetd login manager"; + }; + + config = lib.mkIf cfg.enable { + services.greetd = { + enable = true; + settings = { + default_session = { + user = "greeter"; + command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --cmd niri-session"; + }; + }; + }; + }; +} diff --git a/modules/applications/gtk/default.nix b/modules/applications/gtk/default.nix new file mode 100644 index 0000000..f4e8f45 --- /dev/null +++ b/modules/applications/gtk/default.nix @@ -0,0 +1,25 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.gtk; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.gtk = { + enable = lib.mkEnableOption "GTK theme configuration"; + system.enable = lib.mkEnableOption "GTK system configuration"; + homeManager.enable = lib.mkEnableOption "GTK home-manager configuration"; + }; + + config = lib.mkIf cfg.enable { + my.applications.gtk.system.enable = lib.mkDefault true; + my.applications.gtk.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/gtk/home.nix b/modules/applications/gtk/home.nix new file mode 100644 index 0000000..58cfdce --- /dev/null +++ b/modules/applications/gtk/home.nix @@ -0,0 +1,36 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.gtk.homeManager; +in +{ + options.my.applications.gtk.homeManager = { + enable = lib.mkEnableOption "GTK home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf cfg.enable { + gtk = { + enable = true; + theme = { + name = "Dracula"; + package = pkgs.dracula-theme; + }; + cursorTheme = { + package = pkgs.adwaita-icon-theme; + name = "Adwaita"; + }; + iconTheme = { + package = pkgs.papirus-icon-theme; + name = "Papirus-Dark"; + }; + }; + }; + } + ]; +} diff --git a/modules/applications/gtk/system.nix b/modules/applications/gtk/system.nix new file mode 100644 index 0000000..bf89701 --- /dev/null +++ b/modules/applications/gtk/system.nix @@ -0,0 +1,14 @@ +{ lib, config, ... }: +let + cfg = config.my.applications.gtk.system; +in +{ + options.my.applications.gtk.system = { + enable = lib.mkEnableOption "GTK system configuration"; + }; + + config = lib.mkIf cfg.enable { + programs.dconf.enable = true; + programs.seahorse.enable = true; + }; +} diff --git a/modules/applications/java.nix b/modules/applications/java.nix new file mode 100644 index 0000000..d59d018 --- /dev/null +++ b/modules/applications/java.nix @@ -0,0 +1,21 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.java; +in +{ + options.my.applications.java = { + enable = lib.mkEnableOption "Java runtime"; + }; + + config = lib.mkIf cfg.enable { + programs.java = { + enable = true; + package = pkgs.jdk25; + }; + }; +} diff --git a/modules/applications/kde.nix b/modules/applications/kde.nix new file mode 100644 index 0000000..b5f462e --- /dev/null +++ b/modules/applications/kde.nix @@ -0,0 +1,19 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.kde; +in +{ + options.my.applications.kde = { + enable = lib.mkEnableOption "KDE Connect"; + }; + + config = lib.mkIf cfg.enable { + programs.kdeconnect = { + enable = true; + }; + }; +} diff --git a/modules/applications/nautilus.nix b/modules/applications/nautilus.nix new file mode 100644 index 0000000..4293dd5 --- /dev/null +++ b/modules/applications/nautilus.nix @@ -0,0 +1,22 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.nautilus; +in +{ + options.my.applications.nautilus = { + enable = lib.mkEnableOption "Nautilus file manager"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + nautilus # GNOME file manager + gvfs # GNOME virtual file system + sushi # Nautilus file previewer + ]; + }; +} diff --git a/modules/applications/niri/default.nix b/modules/applications/niri/default.nix new file mode 100644 index 0000000..7858c87 --- /dev/null +++ b/modules/applications/niri/default.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.niri; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.niri = { + enable = lib.mkEnableOption "niri window manager"; + }; + + config = lib.mkIf cfg.enable { + my.applications.niri.system.enable = lib.mkDefault true; + my.applications.niri.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/niri/defaultKeyBind.nix b/modules/applications/niri/defaultKeyBind.nix new file mode 100644 index 0000000..e745297 --- /dev/null +++ b/modules/applications/niri/defaultKeyBind.nix @@ -0,0 +1,166 @@ +{ + "Mod+Shift+Slash".action.show-hotkey-overlay = { }; + + "XF86AudioRaiseVolume" = { + allow-when-locked = true; + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.1+" + ]; + }; + "XF86AudioLowerVolume" = { + allow-when-locked = true; + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.1-" + ]; + }; + "XF86AudioMute" = { + allow-when-locked = true; + action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SINK@" + "toggle" + ]; + }; + "XF86AudioMicMute" = { + allow-when-locked = true; + action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SOURCE@" + "toggle" + ]; + }; + + "Mod+Q".action.close-window = { }; + + "Mod+Left".action.focus-column-left = { }; + "Mod+Down".action.focus-window-down = { }; + "Mod+Up".action.focus-window-up = { }; + "Mod+Right".action.focus-column-right = { }; + "Mod+H".action.focus-column-left = { }; + "Mod+J".action.focus-window-down = { }; + "Mod+K".action.focus-window-up = { }; + "Mod+L".action.focus-column-right = { }; + + "Mod+Ctrl+Left".action.move-column-left = { }; + "Mod+Ctrl+Down".action.move-window-down = { }; + "Mod+Ctrl+Up".action.move-window-up = { }; + "Mod+Ctrl+Right".action.move-column-right = { }; + "Mod+Ctrl+H".action.move-column-left = { }; + "Mod+Ctrl+J".action.move-window-down = { }; + "Mod+Ctrl+K".action.move-window-up = { }; + "Mod+Ctrl+L".action.move-column-right = { }; + + "Mod+Home".action.focus-column-first = { }; + "Mod+End".action.focus-column-last = { }; + "Mod+Ctrl+Home".action.move-column-to-first = { }; + "Mod+Ctrl+End".action.move-column-to-last = { }; + + "Mod+Shift+Left".action.focus-monitor-left = { }; + "Mod+Shift+Down".action.focus-monitor-down = { }; + "Mod+Shift+Up".action.focus-monitor-up = { }; + "Mod+Shift+Right".action.focus-monitor-right = { }; + "Mod+Shift+H".action.focus-monitor-left = { }; + "Mod+Shift+J".action.focus-monitor-down = { }; + "Mod+Shift+K".action.focus-monitor-up = { }; + "Mod+Shift+L".action.focus-monitor-right = { }; + + "Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = { }; + "Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = { }; + "Mod+Shift+Ctrl+Up".action.move-column-to-monitor-up = { }; + "Mod+Shift+Ctrl+Right".action.move-column-to-monitor-right = { }; + "Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = { }; + "Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = { }; + "Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = { }; + "Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = { }; + + "Mod+Page_Down".action.focus-workspace-down = { }; + "Mod+Page_Up".action.focus-workspace-up = { }; + "Mod+U".action.focus-workspace-down = { }; + "Mod+I".action.focus-workspace-up = { }; + "Mod+Ctrl+Page_Down".action.move-column-to-workspace-down = { }; + "Mod+Ctrl+Page_Up".action.move-column-to-workspace-up = { }; + "Mod+Ctrl+U".action.move-column-to-workspace-down = { }; + "Mod+Ctrl+I".action.move-column-to-workspace-up = { }; + + "Mod+Shift+Page_Down".action.move-workspace-down = { }; + "Mod+Shift+Page_Up".action.move-workspace-up = { }; + "Mod+Shift+U".action.move-workspace-down = { }; + "Mod+Shift+I".action.move-workspace-up = { }; + + "Mod+WheelScrollDown" = { + cooldown-ms = 150; + action.focus-workspace-down = { }; + }; + "Mod+WheelScrollUp" = { + cooldown-ms = 150; + action.focus-workspace-up = { }; + }; + "Mod+Ctrl+WheelScrollDown" = { + cooldown-ms = 150; + action.move-column-to-workspace-down = { }; + }; + "Mod+Ctrl+WheelScrollUp" = { + cooldown-ms = 150; + action.move-column-to-workspace-up = { }; + }; + + "Mod+WheelScrollRight".action.focus-column-right = { }; + "Mod+WheelScrollLeft".action.focus-column-left = { }; + "Mod+Ctrl+WheelScrollRight".action.move-column-right = { }; + "Mod+Ctrl+WheelScrollLeft".action.move-column-left = { }; + + "Mod+Shift+WheelScrollDown".action.focus-column-right = { }; + "Mod+Shift+WheelScrollUp".action.focus-column-left = { }; + "Mod+Ctrl+Shift+WheelScrollDown".action.move-column-right = { }; + "Mod+Ctrl+Shift+WheelScrollUp".action.move-column-left = { }; + + "Mod+1".action.focus-workspace = 1; + "Mod+2".action.focus-workspace = 2; + "Mod+3".action.focus-workspace = 3; + "Mod+4".action.focus-workspace = 4; + "Mod+5".action.focus-workspace = 5; + "Mod+6".action.focus-workspace = 6; + "Mod+7".action.focus-workspace = 7; + "Mod+8".action.focus-workspace = 8; + "Mod+9".action.focus-workspace = 9; + "Mod+Ctrl+1".action.move-column-to-workspace = 1; + "Mod+Ctrl+2".action.move-column-to-workspace = 2; + "Mod+Ctrl+3".action.move-column-to-workspace = 3; + "Mod+Ctrl+4".action.move-column-to-workspace = 4; + "Mod+Ctrl+5".action.move-column-to-workspace = 5; + "Mod+Ctrl+6".action.move-column-to-workspace = 6; + "Mod+Ctrl+7".action.move-column-to-workspace = 7; + "Mod+Ctrl+8".action.move-column-to-workspace = 8; + "Mod+Ctrl+9".action.move-column-to-workspace = 9; + + "Mod+Comma".action.consume-window-into-column = { }; + "Mod+Period".action.expel-window-from-column = { }; + + "Mod+R".action.switch-preset-column-width = { }; + "Mod+Shift+R".action.reset-window-height = { }; + "Mod+F".action.maximize-column = { }; + "Mod+Shift+F".action.fullscreen-window = { }; + "Mod+C".action.center-column = { }; + + "Mod+Minus".action.set-column-width = "-10%"; + "Mod+Equal".action.set-column-width = "+10%"; + + "Mod+Shift+Minus".action.set-window-height = "-10%"; + "Mod+Shift+Equal".action.set-window-height = "+10%"; + + "Print".action.screenshot = { }; + "Ctrl+Print".action.screenshot-screen = { }; + "Alt+Print".action.screenshot-window = { }; + + "Mod+Shift+E".action.quit = { }; + + "Mod+Shift+P".action.power-off-monitors = { }; +} diff --git a/modules/applications/niri/home.nix b/modules/applications/niri/home.nix new file mode 100644 index 0000000..a893e63 --- /dev/null +++ b/modules/applications/niri/home.nix @@ -0,0 +1,164 @@ +{ + inputs, + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.niri.homeManager; + defaultKeyBind = import ./defaultKeyBind.nix; +in +{ + options.my.applications.niri.homeManager = { + enable = lib.mkEnableOption "niri home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + inputs.niri-flake.homeModules.niri + { + config = lib.mkIf cfg.enable { + programs.niri.package = pkgs.niri; + + programs.niri.settings = { + input.touchpad = { + natural-scroll = true; + scroll-factor = 4.0; + scroll-method = "two-finger"; + click-method = "clickfinger"; + drag = true; + drag-lock = true; + }; + + input.keyboard.xkb = { + layout = "jp"; + options = "ctrl:nocaps"; + }; + + spawn-at-startup = [ + { command = [ "noctalia-shell" ]; } + ]; + + outputs."eDP-1".scale = 1; + cursor.size = 16; + + layout = { + focus-ring = { + active.color = "#bd93f9"; + inactive.color = "#6272a4"; + }; + border = { + active.color = "#ffc87f"; + inactive.color = "#505050"; + urgent.color = "#9b0000"; + }; + shadow = { + color = "#0007"; + }; + }; + + binds = defaultKeyBind // { + "Mod+T" = { + action.spawn = "ghostty"; + hotkey-overlay.title = "Open a Terminal: ghostty"; + }; + "Mod+D" = { + action.spawn = [ + "vicinae" + "toggle" + ]; + hotkey-overlay.title = "Run an Application: vicinae"; + }; + "Mod+Space" = { + action.spawn = [ + "vicinae" + "toggle" + ]; + hotkey-overlay.title = "Run an Application: vicinae"; + }; + "Mod+E" = { + action.spawn = [ + "nautilus" + "--new-window" + ]; + hotkey-overlay.title = "Open File Manager: nautilus"; + }; + "Mod+L" = { + action.spawn = [ + "noctalia-shell" + "ipc" + "call" + "sessionMenu" + "lockAndSuspend" + ]; + hotkey-overlay.title = "Lock the Screen: noctalia"; + }; + "Mod+V" = { + action.spawn = [ + "vicinae" + "vicinae://extensions/vicinae/clipboard/history" + ]; + hotkey-overlay.title = "Clipboard History"; + }; + + "XF86AudioRaiseVolume" = { + action.spawn = [ + "noctalia-shell" + "ipc" + "call" + "volume" + "increase" + ]; + }; + "XF86AudioLowerVolume" = { + action.spawn = [ + "noctalia-shell" + "ipc" + "call" + "volume" + "decrease" + ]; + }; + "XF86AudioMute" = { + action.spawn = [ + "noctalia-shell" + "ipc" + "call" + "volume" + "muteOutput" + ]; + }; + "XF86AudioMicMute" = { + action.spawn = [ + "noctalia-shell" + "ipc" + "call" + "volume" + "muteInput" + ]; + }; + + "XF86MonBrightnessUp" = { + action.spawn = [ + "noctalia-shell" + "ipc" + "call" + "brightness" + "increase" + ]; + }; + "XF86MonBrightnessDown" = { + action.spawn = [ + "noctalia-shell" + "ipc" + "call" + "brightness" + "decrease" + ]; + }; + }; + }; + }; + } + ]; +} diff --git a/modules/applications/niri/system.nix b/modules/applications/niri/system.nix new file mode 100644 index 0000000..b9c52cb --- /dev/null +++ b/modules/applications/niri/system.nix @@ -0,0 +1,17 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.niri.system; +in +{ + options.my.applications.niri.system = { + enable = lib.mkEnableOption "niri system configuration"; + }; + + config = lib.mkIf cfg.enable { + programs.niri.enable = true; + }; +} diff --git a/modules/applications/noctalia/default.nix b/modules/applications/noctalia/default.nix new file mode 100644 index 0000000..c555310 --- /dev/null +++ b/modules/applications/noctalia/default.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.noctalia; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.noctalia = { + enable = lib.mkEnableOption "noctalia-shell"; + }; + + config = lib.mkIf cfg.enable { + my.applications.noctalia.system.enable = lib.mkDefault true; + my.applications.noctalia.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/noctalia/home.nix b/modules/applications/noctalia/home.nix new file mode 100644 index 0000000..3d69c7d --- /dev/null +++ b/modules/applications/noctalia/home.nix @@ -0,0 +1,178 @@ +{ + inputs, + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.noctalia.homeManager; + walls = pkgs.fetchFromGitHub { + owner = "moons-14"; + repo = "wallpapers"; + rev = "cc3256f4aaf2c8e7d16fb000b1ee251af54085db"; + hash = "sha256-emQ/FqKqMq3YI5bLx8gBZg/ZE72OG9Ilh71ggq78WdQ="; + }; +in +{ + options.my.applications.noctalia.homeManager = { + enable = lib.mkEnableOption "noctalia-shell home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + inputs.noctalia.homeModules.default + { + config = lib.mkIf cfg.enable { + home.file.".face" = { + recursive = true; + source = ../../../images/avatar.jpg; + }; + + home.file.".wallpapers" = { + source = walls; + recursive = true; + }; + + home.file.".cache/noctalia/wallpapers.json" = { + text = builtins.toJSON { + defaultWallpaper = "~/.wallpapers/1.jpg"; + wallpapers = { + "DP-1" = "~/.wallpapers/1.jpg"; + }; + }; + }; + + programs.noctalia-shell = { + enable = true; + settings = { + bar = { + density = "default"; + position = "top"; + showCapsule = true; + backgroundOpacity = 0.8; + floating = true; + widgets = { + left = [ + { id = "WiFi"; } + { + id = "CustomButton"; + icon = "access-point"; + leftClickExec = "nm-connection-editor"; + } + { id = "Bluetooth"; } + { id = "SystemMonitor"; } + { id = "Taskbar"; } + { id = "ActiveWindow"; } + ]; + center = [ + { + hideUnoccupied = false; + id = "Workspace"; + labelMode = "none"; + } + ]; + right = [ + { id = "MediaMini"; } + { id = "NotificationHistory"; } + { + displayMode = "alwaysShow"; + id = "Battery"; + warningThreshold = 30; + } + { + displayMode = "alwaysShow"; + id = "Volume"; + } + { + displayMode = "alwaysShow"; + id = "Brightness"; + } + { + formatHorizontal = "HH:mm"; + formatVertical = "HH mm"; + id = "Clock"; + useMonospacedFont = true; + usePrimaryColor = true; + } + { + id = "ControlCenter"; + useDistroLogo = true; + } + ]; + }; + }; + colorSchemes.predefinedScheme = "dracula"; + general = { + avatarImage = "~/.face"; + radiusRatio = 0.2; + }; + location = { + monthBeforeDay = true; + weatherEnabled = false; + name = "Tokyo"; + }; + wallpaper = { + enabled = true; + directory = "~/.wallpapers/"; + setWallpaperOnAllMonitors = true; + linkLightAndDarkWallpapers = true; + fillMode = "crop"; + randomEnabled = true; + randomIntervalSec = 60; + transitionDuration = 1500; + }; + dock = { + enabled = true; + displayMode = "auto_hide"; + backgroundOpacity = 0.8; + floatingRatio = 1; + size = 1; + onlySameOutput = true; + monitors = [ "eDP-1" ]; + pinnedApps = [ + "com.mitchellh.ghostty" + "org.gnome.Nautilus" + "google-chrome" + "code" + ]; + colorizeIcons = false; + }; + controlCenter = { + position = "close_to_bar_button"; + shortcuts = { + left = [ + { id = "WiFi"; } + { id = "Bluetooth"; } + { id = "ScreenRecorder"; } + { id = "WallpaperSelector"; } + ]; + right = [ + { id = "Notifications"; } + { id = "NightLight"; } + ]; + }; + cards = [ + { + enabled = true; + id = "profile-card"; + } + { + enabled = true; + id = "shortcuts-card"; + } + { + enabled = true; + id = "audio-card"; + } + { + enabled = true; + id = "media-sysmon-card"; + } + ]; + }; + }; + }; + }; + } + ]; +} diff --git a/modules/applications/noctalia/system.nix b/modules/applications/noctalia/system.nix new file mode 100644 index 0000000..6dec66e --- /dev/null +++ b/modules/applications/noctalia/system.nix @@ -0,0 +1,21 @@ +{ + pkgs, + inputs, + lib, + config, + ... +}: +let + cfg = config.my.applications.noctalia.system; +in +{ + options.my.applications.noctalia.system = { + enable = lib.mkEnableOption "noctalia-shell system package"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + inputs.noctalia.packages.${system}.default + ]; + }; +} diff --git a/modules/applications/openssh.nix b/modules/applications/openssh.nix new file mode 100644 index 0000000..f45a857 --- /dev/null +++ b/modules/applications/openssh.nix @@ -0,0 +1,23 @@ +{ lib, config, ... }: +let + cfg = config.my.applications.openssh; +in +{ + options.my.applications.openssh = { + enable = lib.mkEnableOption "OpenSSH server"; + }; + + config = lib.mkIf cfg.enable { + services.openssh = { + enable = true; + openFirewall = true; + + settings = { + PermitRootLogin = "no"; + PasswordAuthentication = false; + KbdInteractiveAuthentication = false; + PubkeyAuthentication = "yes"; + }; + }; + }; +} diff --git a/modules/applications/ssh/default.nix b/modules/applications/ssh/default.nix new file mode 100644 index 0000000..caafc4e --- /dev/null +++ b/modules/applications/ssh/default.nix @@ -0,0 +1,43 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.ssh; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.ssh = { + enable = lib.mkEnableOption "OpenSSH client"; + system.enable = lib.mkEnableOption "SSH system configuration"; + homeManager.enable = lib.mkEnableOption "SSH home-manager configuration"; + + defaultIdentityFile = lib.mkOption { + type = lib.types.str; + default = "~/.ssh/id_ed25519"; + description = "Default SSH identity file"; + }; + + addKeysToAgent = lib.mkOption { + type = lib.types.str; + default = "yes"; + description = "Add keys to SSH agent"; + }; + + matchBlocks = lib.mkOption { + type = lib.types.attrs; + default = { }; + description = "SSH match blocks"; + }; + }; + + config = lib.mkIf cfg.enable { + my.applications.ssh.system.enable = lib.mkDefault true; + my.applications.ssh.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/ssh/home.nix b/modules/applications/ssh/home.nix new file mode 100644 index 0000000..19f7233 --- /dev/null +++ b/modules/applications/ssh/home.nix @@ -0,0 +1,37 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.ssh; + hmCfg = config.my.applications.ssh.homeManager; +in +{ + options.my.applications.ssh.homeManager = { + enable = lib.mkEnableOption "SSH home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf hmCfg.enable { + home.packages = [ + pkgs.openssh + ]; + + programs.ssh = { + enable = true; + enableDefaultConfig = false; + + matchBlocks = cfg.matchBlocks // { + "*" = { + identityFile = cfg.defaultIdentityFile; + extraOptions.AddKeysToAgent = cfg.addKeysToAgent; + }; + }; + }; + }; + } + ]; +} diff --git a/modules/applications/ssh/system.nix b/modules/applications/ssh/system.nix new file mode 100644 index 0000000..b53e372 --- /dev/null +++ b/modules/applications/ssh/system.nix @@ -0,0 +1,20 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.ssh.system; +in +{ + options.my.applications.ssh.system = { + enable = lib.mkEnableOption "SSH system configuration"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + openssh # OpenSSH client and server + ]; + }; +} diff --git a/modules/applications/swayidle.nix b/modules/applications/swayidle.nix new file mode 100644 index 0000000..135507f --- /dev/null +++ b/modules/applications/swayidle.nix @@ -0,0 +1,64 @@ +{ + pkgs, + lib, + config, + inputs, + ... +}: +let + cfg = config.my.applications.swayidle; + noctaliaPkg = inputs.noctalia.packages.${pkgs.system}.default; + noctaliaExe = lib.getExe noctaliaPkg; + + lockCmd = "${pkgs.bash}/bin/bash -lc '${noctaliaExe} ipc call lockScreen lock'"; + lockAndSuspendCmd = "${pkgs.bash}/bin/bash -lc '${noctaliaExe} ipc call sessionMenu lockAndSuspend'"; + dpmsOn = "${pkgs.niri}/bin/niri msg action power-on-monitors"; +in +{ + options.my.applications.swayidle = { + enable = lib.mkEnableOption "swayidle idle manager"; + }; + + config = lib.mkIf cfg.enable { + home-manager.sharedModules = [ + { + services.swayidle = { + enable = true; + systemdTarget = "graphical-session.target"; + + timeouts = [ + { + timeout = 300; + command = lockAndSuspendCmd; + } + ]; + + events = [ + { + event = "lock"; + command = lockCmd; + } + { + event = "before-sleep"; + command = lockCmd; + } + { + event = "after-resume"; + command = dpmsOn; + } + ]; + }; + + systemd.user.services.swayidle = { + Service = { + PassEnvironment = [ + "WAYLAND_DISPLAY" + "XDG_RUNTIME_DIR" + "DBUS_SESSION_BUS_ADDRESS" + ]; + }; + }; + } + ]; + }; +} diff --git a/modules/applications/tailscale.nix b/modules/applications/tailscale.nix new file mode 100644 index 0000000..8c9fc30 --- /dev/null +++ b/modules/applications/tailscale.nix @@ -0,0 +1,38 @@ +{ lib, config, ... }: +let + cfg = config.my.applications.tailscale; +in +{ + options.my.applications.tailscale = { + enable = lib.mkEnableOption "Tailscale VPN"; + + acceptDns = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Accept DNS configuration from Tailscale"; + }; + + acceptRoutes = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Accept subnet routes from Tailscale"; + }; + + extraUpFlags = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + description = "Additional flags to pass to tailscale up"; + }; + }; + + config = lib.mkIf cfg.enable { + services.tailscale = { + enable = true; + extraUpFlags = [ + "--accept-dns=${if cfg.acceptDns then "true" else "false"}" + ] + ++ lib.optional cfg.acceptRoutes "--accept-routes" + ++ cfg.extraUpFlags; + }; + }; +} diff --git a/modules/applications/vicinae.nix b/modules/applications/vicinae.nix new file mode 100644 index 0000000..2edfa33 --- /dev/null +++ b/modules/applications/vicinae.nix @@ -0,0 +1,62 @@ +{ + inputs, + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.vicinae; +in +{ + options.my.applications.vicinae = { + enable = lib.mkEnableOption "Vicinae application launcher"; + }; + + config = lib.mkIf cfg.enable { + home-manager.sharedModules = [ + inputs.vicinae.homeManagerModules.default + { + services.vicinae = { + enable = true; + systemd = { + enable = true; + autoStart = true; + environment = { + USE_LAYER_SHELL = 1; + }; + }; + + settings = { + font.size = 11; + close_on_focus_loss = true; + consider_preedit = true; + pop_to_root_on_close = true; + favicon_service = "twenty"; + search_files_in_root = true; + theme = { + light = { + name = "dracula"; + icon_theme = "default"; + }; + dark = { + name = "vicinae-light"; + icon_theme = "default"; + }; + }; + window = { + csd = true; + opacity = 0.95; + rounding = 10; + }; + }; + extensions = with inputs.vicinae-extensions.packages.${pkgs.stdenv.hostPlatform.system}; [ + bluetooth + nix + power-profile + ]; + }; + } + ]; + }; +} diff --git a/modules/applications/vim/default.nix b/modules/applications/vim/default.nix new file mode 100644 index 0000000..ea5460e --- /dev/null +++ b/modules/applications/vim/default.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.vim; +in +{ + imports = [ + ./system.nix + ./home + ]; + + options.my.applications.vim = { + enable = lib.mkEnableOption "vim text editor"; + }; + + config = lib.mkIf cfg.enable { + my.applications.vim.system.enable = lib.mkDefault true; + my.applications.vim.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/vim/home/autocmds.nix b/modules/applications/vim/home/autocmds.nix new file mode 100644 index 0000000..5b98f8b --- /dev/null +++ b/modules/applications/vim/home/autocmds.nix @@ -0,0 +1,8 @@ +_: { + programs.nixvim.autoCmd = [ + { + event = "TextYankPost"; + callback.__raw = "function() vim.highlight.on_yank() end"; + } + ]; +} diff --git a/modules/applications/vim/home/colorscheme.nix b/modules/applications/vim/home/colorscheme.nix new file mode 100644 index 0000000..7a4049d --- /dev/null +++ b/modules/applications/vim/home/colorscheme.nix @@ -0,0 +1,6 @@ +_: { + programs.nixvim.colorschemes.catppuccin = { + enable = true; + settings.transparent_background = true; + }; +} diff --git a/modules/applications/vim/home/default.nix b/modules/applications/vim/home/default.nix new file mode 100644 index 0000000..59ab1f1 --- /dev/null +++ b/modules/applications/vim/home/default.nix @@ -0,0 +1,57 @@ +{ + pkgs, + inputs, + lib, + config, + ... +}: +let + cfg = config.my.applications.vim.homeManager; +in +{ + options.my.applications.vim.homeManager = { + enable = lib.mkEnableOption "vim home-manager configuration"; + }; + + config = lib.mkIf cfg.enable { + home-manager.sharedModules = [ + inputs.nixvim.homeModules.nixvim + ./options.nix + ./autocmds.nix + ./keymaps.nix + ./language.nix + ./colorscheme.nix + ./lsp.nix + ./plugins + { + programs.nixvim = { + enable = true; + vimAlias = true; + viAlias = true; + withNodeJs = true; + + extraPackages = with pkgs; [ + git + ripgrep + fd + nodejs + zellij + + # LSP / formatter / misc + vtsls + vscode-langservers-extracted + tailwindcss-language-server + prettierd + prettier + biome + stylua + shfmt + alejandra + lua-language-server + nixd + ]; + }; + } + ]; + }; +} diff --git a/modules/applications/vim/home/keymaps.nix b/modules/applications/vim/home/keymaps.nix new file mode 100644 index 0000000..f88c074 --- /dev/null +++ b/modules/applications/vim/home/keymaps.nix @@ -0,0 +1,179 @@ +_: +let + mk = key: action: desc: { + mode = "n"; + inherit key action; + options = { + silent = true; + inherit desc; + }; + }; + + mkRaw = key: raw: desc: { + mode = "n"; + inherit key; + action.__raw = raw; + options = { + silent = true; + inherit desc; + }; + }; + + mkExpr = key: raw: desc: { + mode = "n"; + inherit key; + action.__raw = raw; + options = { + silent = true; + expr = true; + inherit desc; + }; + }; +in +{ + programs.nixvim = { + opts = { + # ジャンプ履歴をスタック寄りに扱う + jumpoptions = "stack"; + + # 既に開いているバッファや直前のウィンドウを優先して再利用 + switchbuf = "useopen,uselast"; + }; + + keymaps = [ + # Search + (mk "" "nohlsearch" "検索ハイライトを解除") + + # Screen line movement + (mkExpr "j" "function() return vim.v.count == 0 and 'gj' or 'j' end" "下へ移動(画面行優先)") + (mkExpr "k" "function() return vim.v.count == 0 and 'gk' or 'k' end" "上へ移動(画面行優先)") + + # LSP: hover / direct jump + (mkRaw "K" "vim.lsp.buf.hover" "シンボル情報を表示") + (mkRaw "gd" "vim.lsp.buf.definition" "定義へジャンプ") + (mkRaw "grr" "vim.lsp.buf.references" "参照一覧を開く") + (mkRaw "gri" "vim.lsp.buf.implementation" "実装一覧を開く") + (mkRaw "grt" "vim.lsp.buf.type_definition" "型定義一覧を開く") + (mkRaw "grn" "vim.lsp.buf.rename" "シンボル名を一括変換") + (mkRaw "gra" "vim.lsp.buf.code_action" "コードアクション") + (mkRaw "gO" "vim.lsp.buf.document_symbol" "現在ファイルのシンボル一覧") + + # Glance: preview / peek + (mk "gD" "Glance definitions" "定義をプレビュー") + (mk "gR" "Glance references" "参照をプレビュー") + (mk "gM" "Glance implementations" "実装をプレビュー") + (mk "gY" "Glance type_definitions" "型定義をプレビュー") + (mk "g." "Glance resume" "直前のGlanceを再開") + + # Convenience aliases + (mkRaw "rn" "vim.lsp.buf.rename" "シンボル名を一括変換") + (mkRaw "cf" + "function() require('conform').format({ timeout_ms = 1000, lsp_format = 'fallback' }) end" + "コードをフォーマット" + ) + (mkRaw "ca" "vim.lsp.buf.code_action" "コードアクション") + + # Diagnostics + (mkRaw "]d" "vim.diagnostic.goto_next" "次の診断へ移動") + (mkRaw "[d" "vim.diagnostic.goto_prev" "前の診断へ移動") + (mkRaw "dl" "vim.diagnostic.open_float" "診断の詳細を表示") + + # File tree + (mk "e" "Neotree toggle left" "ファイルツリー") + + # Terminal + (mk "tt" "ToggleTerm direction=float" "ターミナル") + + # Trouble + (mk "xx" "Trouble diagnostics toggle" "診断一覧") + (mk "xq" "Trouble qflist toggle" "Quickfix一覧") + (mk "xl" "Trouble loclist toggle" "Location List一覧") + (mk "xs" "Trouble symbols toggle" "シンボル一覧") + (mk "xw" "Trouble lsp toggle" "LSP一覧") + + # Quickfix / Location list navigation + (mk "]q" "cnext" "次のQuickfixへ") + (mk "[q" "cprev" "前のQuickfixへ") + (mk "]l" "lnext" "次のLocation Listへ") + (mk "[l" "lprev" "前のLocation Listへ") + + # Window navigation + (mk "" "h" "左のウィンドウへ") + (mk "" "j" "下のウィンドウへ") + (mk "" "k" "上のウィンドウへ") + (mk "" "l" "右のウィンドウへ") + (mk "" "h" "左のウィンドウへ") + (mk "" "j" "下のウィンドウへ") + (mk "" "k" "上のウィンドウへ") + (mk "" "l" "右のウィンドウへ") + + # Alternate file / previous file + (mk "" "" "直前のファイルへ戻る") + (mk "w-" "" "直前のファイルをsplitで開く") + + # Buffer Bar + (mk "[b" "BufferPrevious" "前のバッファーに移動") + (mk "]b" "BufferNext" "次のバッファーに移動") + (mk "bc" "BufferClose" "バッファーを閉じる") + + # Git Conflict + (mk "gco" "GitConflictChooseOurs" "現在のブランチを選択") + (mk "gct" "GitConflictChooseTheirs" "相手のブランチを選択") + (mk "gcb" "GitConflictChooseBoth" "両方を選択") + (mk "gcx" "GitConflictListQf" "コンフリクト一覧") + (mk "]x" "GitConflictNextConflict" "次のコンフリクト") + (mk "[x" "GitConflictPrevConflict" "前のコンフリクト") + + # Git + (mk "gl" "LazyGit" "LazyGitを開く") + (mk "gd" "DiffviewOpen" "差分を開く") + (mk "gH" "DiffviewFileHistory" "リポジトリ履歴") + (mk "gh" "DiffviewFileHistory %" "現在ファイルの履歴") + (mk "gq" "DiffviewClose" "差分を閉じる") + + # Markview + (mk "mp" "Markview splitToggle" "Markdownプレビュー") + + # Zen Mode + (mk "zz" "ZenMode" "Zen Modeを開く/閉じる") + + # UFO (folding) + (mkRaw "zR" "require('ufo').openAllFolds" "全て展開") + (mkRaw "zM" "require('ufo').closeAllFolds" "全て折りたたむ") + + # Dropbar + (mkRaw "dp" "function() require('dropbar.api').pick() end" "dropbarでナビゲート") + + # Snacks + (mkRaw "sd" "function() Snacks.dim.toggle() end" "Dimモードをトグル") + + # Flash + (mkRaw "s" "function() require('flash').jump() end" "Flashジャンプ") + (mkRaw "S" "function() require('flash').treesitter() end" "Flashツリーシッタ選択") + + # Todo Comments + (mk "]t" "TodoNext" "次のTODO") + (mk "[t" "TodoPrev" "前のTODO") + (mkRaw "ft" "function() Snacks.picker.todo_comments() end" "TODO一覧") + + # Spectre + (mkRaw "sr" "function() require('spectre').toggle() end" "検索・置換") + + # Snacks Picker: generic + (mkRaw "ff" "function() Snacks.picker.files() end" "ファイルを探す") + (mkRaw "fg" "function() Snacks.picker.grep() end" "文字列を全文検索") + (mkRaw "fb" "function() Snacks.picker.buffers() end" "開いているバッファを探す") + (mkRaw "fh" "function() Snacks.picker.help() end" "ヘルプ項目を探す") + (mkRaw "fk" "function() Snacks.picker.keymaps() end" "キーマップを探す") + (mkRaw "fc" "function() Snacks.picker.commands() end" "コマンドを探す") + + # Snacks Picker: code navigation + (mkRaw "fs" "function() Snacks.picker.lsp_symbols() end" "現在ファイルのシンボルを探す") + (mkRaw "fS" "function() Snacks.picker.lsp_workspace_symbols() end" "ワークスペース全体のシンボルを探す") + (mkRaw "fr" "function() Snacks.picker.registers() end" "レジスタを探す") + (mkRaw "fj" "function() Snacks.picker.jumps() end" "ジャンプ履歴を探す") + (mkRaw "fq" "function() Snacks.picker.qflist() end" "Quickfixを探す") + (mkRaw "fl" "function() Snacks.picker.loclist() end" "Location Listを探す") + ]; + }; +} diff --git a/modules/applications/vim/home/language.nix b/modules/applications/vim/home/language.nix new file mode 100644 index 0000000..10faa21 --- /dev/null +++ b/modules/applications/vim/home/language.nix @@ -0,0 +1,13 @@ +_: { + programs.nixvim = { + env = { + LANG = "ja_JP.UTF-8"; + LC_MESSAGES = "ja_JP.UTF-8"; + }; + + extraConfigLua = '' + vim.cmd.language("ja_JP.utf8") + vim.opt.helplang = { "ja", "en" } + ''; + }; +} diff --git a/modules/applications/vim/home/lsp.nix b/modules/applications/vim/home/lsp.nix new file mode 100644 index 0000000..5761b87 --- /dev/null +++ b/modules/applications/vim/home/lsp.nix @@ -0,0 +1,65 @@ +_: { + programs.nixvim = { + plugins.lsp = { + enable = true; + + servers = { + # TypeScript / JavaScript + vtsls = { + enable = true; + packageFallback = true; + rootMarkers = [ + "pnpm-workspace.yaml" + "package.json" + "tsconfig.json" + "jsconfig.json" + ".git" + ]; + extraOptions.settings.typescript.locale = "ja"; + }; + + # Biome for lint / format + biome = { + enable = true; + packageFallback = true; + rootMarkers = [ + "biome.json" + "biome.jsonc" + "package.json" + "pnpm-workspace.yaml" + ".git" + ]; + }; + + # Frontend / config languages + tailwindcss.enable = true; + cssls.enable = true; + jsonls.enable = true; + yamlls.enable = true; + lua_ls.enable = true; + nixd.enable = true; + + # Other languages + rust_analyzer = { + enable = true; + installCargo = true; + installRustc = true; + }; + svelte.enable = true; + ty.enable = true; + ruff.enable = true; + astro.enable = true; + gopls.enable = true; + }; + }; + + # Diagnostic UI + diagnostic.settings = { + virtual_text = true; + float = { + border = "rounded"; + source = true; + }; + }; + }; +} diff --git a/modules/applications/vim/home/options.nix b/modules/applications/vim/home/options.nix new file mode 100644 index 0000000..2470b1c --- /dev/null +++ b/modules/applications/vim/home/options.nix @@ -0,0 +1,50 @@ +_: { + programs.nixvim = { + opts = { + # display + number = true; + relativenumber = true; + signcolumn = "yes"; + termguicolors = true; + + # action + mouse = "a"; + clipboard = "unnamedplus"; + updatetime = 200; + timeoutlen = 300; + undofile = true; + + # display + wrap = false; + scrolloff = 8; + + # search + ignorecase = true; + smartcase = true; + + # window split + splitright = true; + splitbelow = true; + + # indent + tabstop = 2; + shiftwidth = 2; + expandtab = true; + + # file encoding + encoding = "utf-8"; + fileencoding = "utf-8"; + fileencodings = "utf-8,sjis,euc-jp,iso-2022-jp"; + + # invisible characters + list = true; + listchars = "tab:»-,trail:-,extends:»,precedes:«,nbsp:%"; + }; + + globals = { + mapleader = " "; + maplocalleader = " "; + clipboard = "osc52"; + }; + }; +} diff --git a/modules/applications/vim/home/plugins/default.nix b/modules/applications/vim/home/plugins/default.nix new file mode 100644 index 0000000..d99031d --- /dev/null +++ b/modules/applications/vim/home/plugins/default.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + imports = [ + ./ui + ./editor + ]; +} diff --git a/modules/applications/vim/home/plugins/editor/autopairs.nix b/modules/applications/vim/home/plugins/editor/autopairs.nix new file mode 100644 index 0000000..3802ad6 --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/autopairs.nix @@ -0,0 +1,3 @@ +_: { + programs.nixvim.plugins.nvim-autopairs.enable = true; +} diff --git a/modules/applications/vim/home/plugins/editor/blink-cmp.nix b/modules/applications/vim/home/plugins/editor/blink-cmp.nix new file mode 100644 index 0000000..9d114cf --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/blink-cmp.nix @@ -0,0 +1,56 @@ +_: { + programs.nixvim.plugins.blink-cmp = { + enable = true; + setupLspCapabilities = true; + + settings = { + keymap = { + preset = "enter"; + + "" = [ "show" ]; + "" = [ "scroll_documentation_up" ]; + "" = [ "hide" ]; + "" = [ "scroll_documentation_down" ]; + + "" = [ + "accept" + { + __raw = '' + function() + local ok, copilot = pcall(require, "copilot.suggestion") + if ok and copilot.is_visible() then + copilot.accept() + return true + end + end + ''; + } + "fallback" + ]; + "" = [ + "select_prev" + "fallback" + ]; + "" = [ + "select_next" + "fallback" + ]; + "" = [ + "select_prev" + "fallback" + ]; + }; + + completion.list.selection = { + preselect = true; + auto_insert = false; + }; + + sources.default = [ + "lsp" + "path" + "buffer" + ]; + }; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/comment.nix b/modules/applications/vim/home/plugins/editor/comment.nix new file mode 100644 index 0000000..c6a216d --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/comment.nix @@ -0,0 +1,3 @@ +_: { + programs.nixvim.plugins.comment.enable = true; +} diff --git a/modules/applications/vim/home/plugins/editor/conform.nix b/modules/applications/vim/home/plugins/editor/conform.nix new file mode 100644 index 0000000..40013ed --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/conform.nix @@ -0,0 +1,24 @@ +_: { + programs.nixvim.plugins."conform-nvim" = { + enable = true; + settings = { + formatters_by_ft = { + javascript.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }''; + javascriptreact.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }''; + typescript.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }''; + typescriptreact.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }''; + json.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }''; + yaml.__raw = ''{ "prettierd", "prettier", stop_after_first = true }''; + markdown.__raw = ''{ "prettierd", "prettier", stop_after_first = true }''; + lua = [ "stylua" ]; + nix = [ "alejandra" ]; + sh = [ "shfmt" ]; + }; + format_on_save.__raw = '' + function(_) + return { timeout_ms = 1000, lsp_format = "fallback" } + end + ''; + }; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/copilot.nix b/modules/applications/vim/home/plugins/editor/copilot.nix new file mode 100644 index 0000000..4bbb86f --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/copilot.nix @@ -0,0 +1,11 @@ +_: { + programs.nixvim.plugins.copilot-lua = { + enable = true; + settings = { + suggestion = { + auto_trigger = true; + keymap.enabled = false; + }; + }; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/default.nix b/modules/applications/vim/home/plugins/editor/default.nix new file mode 100644 index 0000000..ed0668a --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/default.nix @@ -0,0 +1,23 @@ +{ ... }: +{ + imports = [ + ./snacks.nix + ./treesitter.nix + ./blink-cmp.nix + ./gitsigns.nix + ./comment.nix + ./autopairs.nix + ./lsp-signature.nix + ./copilot.nix + ./trouble.nix + ./conform.nix + ./surround.nix + ./git.nix + ./git-conflict.nix + ./glance.nix + ./flash.nix + ./todo-comments.nix + ./spectre.nix + ./wakatime.nix + ]; +} diff --git a/modules/applications/vim/home/plugins/editor/flash.nix b/modules/applications/vim/home/plugins/editor/flash.nix new file mode 100644 index 0000000..d899445 --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/flash.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + extraPlugins = [ pkgs.vimPlugins.flash-nvim ]; + extraConfigLua = '' + require("flash").setup() + ''; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/git-conflict.nix b/modules/applications/vim/home/plugins/editor/git-conflict.nix new file mode 100644 index 0000000..8c8663c --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/git-conflict.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + extraPlugins = [ pkgs.vimPlugins.git-conflict-nvim ]; + extraConfigLua = '' + require("git-conflict").setup() + ''; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/git.nix b/modules/applications/vim/home/plugins/editor/git.nix new file mode 100644 index 0000000..cd904cb --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/git.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + extraPackages = [ pkgs.lazygit ]; + + plugins = { + lazygit.enable = true; + diffview.enable = true; + }; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/gitsigns.nix b/modules/applications/vim/home/plugins/editor/gitsigns.nix new file mode 100644 index 0000000..6a7e881 --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/gitsigns.nix @@ -0,0 +1,25 @@ +_: { + # git change view + programs.nixvim.plugins.gitsigns = { + enable = true; + settings = { + signs = { + add = { + text = "+"; + }; + change = { + text = "~"; + }; + delete = { + text = "_"; + }; + topdelete = { + text = "‾"; + }; + changedelete = { + text = "~"; + }; + }; + }; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/glance.nix b/modules/applications/vim/home/plugins/editor/glance.nix new file mode 100644 index 0000000..bea6bd3 --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/glance.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + extraPlugins = [ pkgs.vimPlugins.glance-nvim ]; + extraConfigLua = '' + require("glance").setup() + ''; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/lsp-signature.nix b/modules/applications/vim/home/plugins/editor/lsp-signature.nix new file mode 100644 index 0000000..361bb67 --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/lsp-signature.nix @@ -0,0 +1,11 @@ +_: { + programs.nixvim.plugins.lsp-signature = { + enable = true; + settings = { + hint_enable = true; + hint_prefix = " "; + floating_window = true; + bind = true; + }; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/snacks.nix b/modules/applications/vim/home/plugins/editor/snacks.nix new file mode 100644 index 0000000..86ace40 --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/snacks.nix @@ -0,0 +1,32 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + extraPlugins = [ pkgs.vimPlugins.snacks-nvim ]; + + extraConfigLua = '' + require("snacks").setup({ + picker = { + enabled = true, + + actions = require("trouble.sources.snacks").actions, + + win = { + input = { + keys = { + [""] = { + "trouble_open", + mode = { "n", "i" }, + }, + }, + }, + }, + }, + + notifier = { enabled = true }, + words = { enabled = true }, + scroll = { enabled = true }, + dim = { enabled = true }, + }) + ''; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/spectre.nix b/modules/applications/vim/home/plugins/editor/spectre.nix new file mode 100644 index 0000000..60c2e4c --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/spectre.nix @@ -0,0 +1,10 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + extraPackages = [ pkgs.ripgrep ]; + extraPlugins = [ pkgs.vimPlugins.nvim-spectre ]; + extraConfigLua = '' + require("spectre").setup() + ''; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/surround.nix b/modules/applications/vim/home/plugins/editor/surround.nix new file mode 100644 index 0000000..83276b4 --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/surround.nix @@ -0,0 +1,3 @@ +_: { + programs.nixvim.plugins.nvim-surround.enable = true; +} diff --git a/modules/applications/vim/home/plugins/editor/todo-comments.nix b/modules/applications/vim/home/plugins/editor/todo-comments.nix new file mode 100644 index 0000000..fa3303a --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/todo-comments.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + extraPlugins = [ pkgs.vimPlugins.todo-comments-nvim ]; + extraConfigLua = '' + require("todo-comments").setup() + ''; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/treesitter.nix b/modules/applications/vim/home/plugins/editor/treesitter.nix new file mode 100644 index 0000000..32208b1 --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/treesitter.nix @@ -0,0 +1,17 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + plugins.treesitter = { + enable = true; + settings = { + highlight.enable = true; + indent.enable = true; + }; + }; + + extraPlugins = [ pkgs.vimPlugins.nvim-ts-autotag ]; + extraConfigLua = '' + require("nvim-ts-autotag").setup() + ''; + }; +} diff --git a/modules/applications/vim/home/plugins/editor/trouble.nix b/modules/applications/vim/home/plugins/editor/trouble.nix new file mode 100644 index 0000000..c7ce674 --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/trouble.nix @@ -0,0 +1,3 @@ +_: { + programs.nixvim.plugins.trouble.enable = true; +} diff --git a/modules/applications/vim/home/plugins/editor/wakatime.nix b/modules/applications/vim/home/plugins/editor/wakatime.nix new file mode 100644 index 0000000..04dc233 --- /dev/null +++ b/modules/applications/vim/home/plugins/editor/wakatime.nix @@ -0,0 +1,4 @@ +{ pkgs, ... }: +{ + programs.nixvim.extraPlugins = [ pkgs.vimPlugins.vim-wakatime ]; +} diff --git a/modules/applications/vim/home/plugins/ui/barbar.nix b/modules/applications/vim/home/plugins/ui/barbar.nix new file mode 100644 index 0000000..474a5a0 --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/barbar.nix @@ -0,0 +1,26 @@ +_: { + programs.nixvim.plugins.barbar = { + enable = true; + settings = { + animation = false; + auto_hide = 1; + tabpages = true; + clickable = true; + focus_on_close = "left"; + + icons = { + button = "󰅖"; + separator = { + left = "▎"; + right = ""; + }; + separator_at_end = false; + filetype.enabled = true; + }; + + sidebar_filetypes = { + neo-tree = true; + }; + }; + }; +} diff --git a/modules/applications/vim/home/plugins/ui/blankline.nix b/modules/applications/vim/home/plugins/ui/blankline.nix new file mode 100644 index 0000000..3439350 --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/blankline.nix @@ -0,0 +1,20 @@ +_: { + programs.nixvim.plugins.indent-blankline = { + enable = true; + settings = { + scope = { + enabled = true; + show_start = true; + show_end = true; + }; + exclude = { + filetypes = [ + "help" + "neo-tree" + "toggleterm" + "lazy" + ]; + }; + }; + }; +} diff --git a/modules/applications/vim/home/plugins/ui/colorizer.nix b/modules/applications/vim/home/plugins/ui/colorizer.nix new file mode 100644 index 0000000..54b6c4e --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/colorizer.nix @@ -0,0 +1,26 @@ +_: { + programs.nixvim.plugins.colorizer = { + enable = true; + + settings = { + filetypes = [ + "*" + "!markdown" + ]; + user_commands = true; + + options = { + parsers = { + css = true; + tailwind = { + enable = true; + lsp = true; + update_names = true; + }; + }; + + display.mode = "background"; + }; + }; + }; +} diff --git a/modules/applications/vim/home/plugins/ui/default.nix b/modules/applications/vim/home/plugins/ui/default.nix new file mode 100644 index 0000000..7709bc0 --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/default.nix @@ -0,0 +1,20 @@ +{ ... }: +{ + imports = [ + ./lualine.nix + ./neo-tree.nix + ./blankline.nix + ./which-key.nix + ./web-devicons.nix + ./toggleterm.nix + ./treesitter.nix + ./barbar.nix + ./lightbulb.nix + ./colorizer.nix + ./dropbar.nix + ./scrollbar.nix + ./ufo.nix + ./zen-mode.nix + ./markview.nix + ]; +} diff --git a/modules/applications/vim/home/plugins/ui/dropbar.nix b/modules/applications/vim/home/plugins/ui/dropbar.nix new file mode 100644 index 0000000..d6eea7d --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/dropbar.nix @@ -0,0 +1,3 @@ +_: { + programs.nixvim.plugins.dropbar.enable = true; +} diff --git a/modules/applications/vim/home/plugins/ui/lightbulb.nix b/modules/applications/vim/home/plugins/ui/lightbulb.nix new file mode 100644 index 0000000..fd887e3 --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/lightbulb.nix @@ -0,0 +1,6 @@ +_: { + programs.nixvim.plugins.nvim-lightbulb = { + enable = true; + settings.autocmd.enabled = true; + }; +} diff --git a/modules/applications/vim/home/plugins/ui/lualine.nix b/modules/applications/vim/home/plugins/ui/lualine.nix new file mode 100644 index 0000000..8c7a508 --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/lualine.nix @@ -0,0 +1,25 @@ +_: { + programs.nixvim.plugins.lualine = { + enable = true; + settings.sections.lualine_x = [ + { + __raw = '' + function() + local ok, conform = pcall(require, "conform") + if not ok then return "" end + local formatters = conform.list_formatters(0) + for _, f in ipairs(formatters) do + if f.available then + return "󰛖 " .. f.name + end + end + return "" + end + ''; + } + "encoding" + "fileformat" + "filetype" + ]; + }; +} diff --git a/modules/applications/vim/home/plugins/ui/markview.nix b/modules/applications/vim/home/plugins/ui/markview.nix new file mode 100644 index 0000000..a67adc1 --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/markview.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + extraPlugins = [ pkgs.vimPlugins.markview-nvim ]; + extraConfigLua = '' + require("markview").setup({ initial_state = false }) + ''; + }; +} diff --git a/modules/applications/vim/home/plugins/ui/neo-tree.nix b/modules/applications/vim/home/plugins/ui/neo-tree.nix new file mode 100644 index 0000000..f3fe5e8 --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/neo-tree.nix @@ -0,0 +1,37 @@ +_: { + programs.nixvim = { + plugins.neo-tree = { + enable = true; + settings = { + close_if_last_window = true; + + filesystem = { + follow_current_file = { + enabled = true; + leave_dirs_open = true; + }; + + filtered_items = { + visible = true; + hide_dotfiles = false; + hide_gitignored = true; + hide_ignored = false; + hide_hidden = false; + + hide_by_name = [ ]; + hide_by_pattern = [ ]; + + always_show = [ ]; + always_show_by_pattern = [ ]; + + never_show = [ + ".DS_Store" + "thumbs.db" + ]; + never_show_by_pattern = [ ]; + }; + }; + }; + }; + }; +} diff --git a/modules/applications/vim/home/plugins/ui/scrollbar.nix b/modules/applications/vim/home/plugins/ui/scrollbar.nix new file mode 100644 index 0000000..c7c53b5 --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/scrollbar.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + extraPlugins = [ pkgs.vimPlugins.nvim-scrollbar ]; + extraConfigLua = '' + require("scrollbar").setup() + ''; + }; +} diff --git a/modules/applications/vim/home/plugins/ui/toggleterm.nix b/modules/applications/vim/home/plugins/ui/toggleterm.nix new file mode 100644 index 0000000..123dde3 --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/toggleterm.nix @@ -0,0 +1,3 @@ +_: { + programs.nixvim.plugins.toggleterm.enable = true; +} diff --git a/modules/applications/vim/home/plugins/ui/treesitter.nix b/modules/applications/vim/home/plugins/ui/treesitter.nix new file mode 100644 index 0000000..9a3f85e --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/treesitter.nix @@ -0,0 +1,3 @@ +_: { + programs.nixvim.plugins."treesitter-context".enable = true; +} diff --git a/modules/applications/vim/home/plugins/ui/ufo.nix b/modules/applications/vim/home/plugins/ui/ufo.nix new file mode 100644 index 0000000..d59f54c --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/ufo.nix @@ -0,0 +1,24 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + opts = { + foldcolumn = "1"; + foldlevel = 99; + foldlevelstart = 99; + foldenable = true; + }; + + extraPlugins = [ + pkgs.vimPlugins.nvim-ufo + pkgs.vimPlugins.promise-async + ]; + + extraConfigLua = '' + require("ufo").setup({ + provider_selector = function() + return { "treesitter", "indent" } + end, + }) + ''; + }; +} diff --git a/modules/applications/vim/home/plugins/ui/web-devicons.nix b/modules/applications/vim/home/plugins/ui/web-devicons.nix new file mode 100644 index 0000000..12d195f --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/web-devicons.nix @@ -0,0 +1,4 @@ +_: { + # icon set preview + programs.nixvim.plugins.web-devicons.enable = true; +} diff --git a/modules/applications/vim/home/plugins/ui/which-key.nix b/modules/applications/vim/home/plugins/ui/which-key.nix new file mode 100644 index 0000000..7f0441d --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/which-key.nix @@ -0,0 +1,4 @@ +_: { + # key map help + programs.nixvim.plugins.which-key.enable = true; +} diff --git a/modules/applications/vim/home/plugins/ui/zen-mode.nix b/modules/applications/vim/home/plugins/ui/zen-mode.nix new file mode 100644 index 0000000..23c7a5f --- /dev/null +++ b/modules/applications/vim/home/plugins/ui/zen-mode.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + programs.nixvim = { + extraPlugins = [ pkgs.vimPlugins.zen-mode-nvim ]; + extraConfigLua = '' + require("zen-mode").setup() + ''; + }; +} diff --git a/modules/applications/vim/system.nix b/modules/applications/vim/system.nix new file mode 100644 index 0000000..8098b91 --- /dev/null +++ b/modules/applications/vim/system.nix @@ -0,0 +1,22 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.vim.system; +in +{ + options.my.applications.vim.system = { + enable = lib.mkEnableOption "vim system configuration"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + vim # Highly configurable text editor + ]; + + environment.variables.EDITOR = "nvim"; + }; +} diff --git a/modules/applications/vscode/default.nix b/modules/applications/vscode/default.nix new file mode 100644 index 0000000..6fe9147 --- /dev/null +++ b/modules/applications/vscode/default.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.vscode; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.vscode = { + enable = lib.mkEnableOption "Visual Studio Code editor"; + }; + + config = lib.mkIf cfg.enable { + my.applications.vscode.system.enable = lib.mkDefault true; + my.applications.vscode.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/vscode/home.nix b/modules/applications/vscode/home.nix new file mode 100644 index 0000000..d61a0b0 --- /dev/null +++ b/modules/applications/vscode/home.nix @@ -0,0 +1,296 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.vscode.homeManager; + vsc = pkgs.vscode-extensions; + inherit (lib) recursiveUpdate; + + rustLibclangPath = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ]; + + rustBindgenExtraClangArgs = lib.concatStringsSep " " ( + (builtins.map (a: ''-I"${a}/include"'') [ + pkgs.glibc.dev + ]) + ++ [ + ''-I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"'' + ''-I"${pkgs.glib.dev}/include/glib-2.0"'' + "-I${pkgs.glib.out}/lib/glib-2.0/include/" + ] + ); + + layers = rec { + common = { + extensions = + (with vsc; [ + github.copilot + github.copilot-chat + dracula-theme.theme-dracula + ms-vscode-remote.vscode-remote-extensionpack + dbaeumer.vscode-eslint + ms-vscode-remote.remote-containers + ms-vscode-remote.remote-ssh + github.vscode-github-actions + github.vscode-pull-request-github + eamodio.gitlens + streetsidesoftware.code-spell-checker + ms-ceintl.vscode-language-pack-ja + ]) + ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ + { + name = "hadolint"; + publisher = "exiasr"; + version = "1.1.2"; + hash = "sha256-6GO1f8SP4CE8yYl87/tm60FdGHqHsJA4c2B6ukVdpgM="; + } + { + name = "chatgpt"; + publisher = "openai"; + version = "0.4.71"; + hash = "sha256-Q0le5rhVRgTDQXjIlhbzJOv/7+xC6JXwTp6fxZCP4ak="; + } + ]; + userSettings = { + "workbench.colorTheme" = "Dracula"; + "window.autoDetectColorScheme" = false; + "editor.formatOnSave" = true; + "editor.defaultFormatter" = "esbenp.prettier-vscode"; + "git.enableSmartCommit" = true; + "files.autoSave" = "onFocusChange"; + "git.confirmSync" = false; + "github.copilot.nextEditSuggestions.enabled" = true; + "editor.suggestOnTriggerCharacters" = true; + "editor.quickSuggestions" = { + other = true; + comments = false; + strings = true; + }; + "git.autofetch" = true; + "workbench.editor.enablePreview" = false; + }; + }; + + web = { + extensions = + (with vsc; [ + lokalise.i18n-ally + bradlc.vscode-tailwindcss + prisma.prisma + hashicorp.terraform + yoavbls.pretty-ts-errors + ]) + ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ + { + name = "pnpm-catalog-lens"; + publisher = "antfu"; + version = "1.0.0"; + hash = "sha256-mCMBVxZRIb3Jao1XSS7EQRQX3Y2vrkpAmy6ldSqZa9c="; + } + { + name = "explorer"; + publisher = "vitest"; + version = "1.32.1"; + hash = "sha256-MAfjS/oFfFuiE+Q2w6leSlao436QSw2fKjd7/BE/Q8Y="; + } + ]; + userSettings = { }; + }; + + web-biome = { + extensions = with vsc; [ + biomejs.biome + ]; + userSettings = { + "editor.defaultFormatter" = "biomejs.biome"; + "[typescript].editor.defaultFormatter" = "biomejs.biome"; + "[typescriptreact].editor.defaultFormatter" = "biomejs.biome"; + }; + }; + + web-oxc = { + extensions = pkgs.vscode-utils.extensionsFromVscodeMarketplace [ + { + name = "oxc-vscode"; + publisher = "oxc"; + version = "1.48.0"; + hash = "sha256-RZ7mLcLJyn7lR6w6Au6fZeguB3wtk8sIXb67lPnPnrc="; + } + ]; + userSettings = { + "editor.defaultFormatter" = "oxc.oxc-vscode"; + "[typescript].editor.defaultFormatter" = "oxc.oxc-vscode"; + "[typescriptreact].editor.defaultFormatter" = "oxc.oxc-vscode"; + }; + }; + + nix = { + extensions = with vsc; [ + bbenoist.nix + jnoortheen.nix-ide + ]; + userSettings = { + "nix.enableLanguageServer" = true; + "nix.serverPath" = "nil"; + "[nix]" = { + "editor.defaultFormatter" = "jnoortheen.nix-ide"; + }; + }; + }; + + jupyter = { + extensions = with vsc; [ + ms-toolsai.jupyter + ms-python.python + ]; + userSettings = { }; + }; + + java = { + extensions = with vsc; [ + vscjava.vscode-java-pack + sonarsource.sonarlint-vscode + vscjava.vscode-java-debug + redhat.java + ]; + + userSettings = { + "java.jdt.ls.java.home" = "${pkgs.jdk25.home}"; + "java.configuration.runtimes" = [ + { + "name" = "JavaSE-25"; + "path" = "${pkgs.jdk25.home}"; + "default" = true; + } + ]; + + "editor.codeLens" = true; + "java.debug.settings.enableRunDebugCodeLens" = true; + + "java.jdt.ls.vmargs" = "-Xms256m -Xmx2G -XX:+UseG1GC -XX:+UseStringDeduplication"; + + "java.configuration.updateBuildConfiguration" = "interactive"; + + "java.maven.downloadSources" = true; + "java.eclipse.downloadSources" = true; + + "maven.executable.path" = "${pkgs.maven}/bin/mvn"; + + "[java]" = { + "editor.defaultFormatter" = "redhat.java"; + }; + }; + }; + + rust = { + extensions = with vsc; [ + rust-lang.rust-analyzer + vadimcn.vscode-lldb + serayuzgur.crates + tamasfe.even-better-toml + ]; + + userSettings = { + "[rust]" = { + "editor.defaultFormatter" = "rust-lang.rust-analyzer"; + "editor.formatOnSave" = true; + "editor.codeActionsOnSave" = { + "source.organizeImports" = true; + "source.fixAll" = true; + }; + }; + + "rust-analyzer.checkOnSave" = true; + "rust-analyzer.check.command" = "clippy"; + + "rust-analyzer.cargo.buildScripts.enable" = true; + "rust-analyzer.procMacro.enable" = true; + + "rust-analyzer.cargo.targetDir" = true; + + "rust-analyzer.cargo.extraEnv" = { + "LIBCLANG_PATH" = rustLibclangPath; + "BINDGEN_EXTRA_CLANG_ARGS" = rustBindgenExtraClangArgs; + }; + + "rust-analyzer.lens.enable" = true; + "rust-analyzer.lens.implementations.enable" = true; + "rust-analyzer.lens.references.adt.enable" = true; + "rust-analyzer.lens.references.enumVariant.enable" = true; + "rust-analyzer.lens.references.method.enable" = true; + "rust-analyzer.lens.references.trait.enable" = true; + + "files.watcherExclude" = { + "**/target/**" = true; + }; + "search.exclude" = { + "**/target/**" = true; + }; + }; + }; + }; + + combine = + ls: + builtins.foldl' + (acc: l: { + extensions = acc.extensions ++ (l.extensions or [ ]); + userSettings = recursiveUpdate acc.userSettings (l.userSettings or { }); + }) + { + extensions = [ ]; + userSettings = { }; + } + ls; + + mkProfile = + layersList: extras: + let + base = combine layersList; + in + { + extensions = base.extensions ++ (extras.extensions or [ ]); + userSettings = recursiveUpdate base.userSettings (extras.userSettings or { }); + }; +in +{ + options.my.applications.vscode.homeManager = { + enable = lib.mkEnableOption "VSCode home-manager configuration"; + }; + + config = lib.mkIf cfg.enable { + nixpkgs.config.allowUnfree = true; + + home-manager.sharedModules = [ + { + programs.vscode = { + enable = true; + + profiles = { + default = mkProfile [ layers.common ] { }; + + nix = mkProfile [ layers.common layers.nix ] { }; + + web = mkProfile [ layers.common layers.web layers.web-biome ] { }; + + web-oxc = mkProfile [ layers.common layers.web layers.web-oxc ] { }; + + jupyter = mkProfile [ layers.common layers.jupyter ] { }; + + java = mkProfile [ layers.common layers.java ] { }; + + rust = mkProfile [ layers.common layers.rust ] { }; + }; + }; + + xdg.configFile."Code/User/locale.json".text = '' + { + "locale": "ja" + } + ''; + } + ]; + }; +} diff --git a/modules/applications/vscode/system.nix b/modules/applications/vscode/system.nix new file mode 100644 index 0000000..99f05d7 --- /dev/null +++ b/modules/applications/vscode/system.nix @@ -0,0 +1,20 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.vscode.system; +in +{ + options.my.applications.vscode.system = { + enable = lib.mkEnableOption "VSCode system configuration"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + sqlite # SQLite database library (VSCode dependency) + ]; + }; +} diff --git a/modules/applications/wayland.nix b/modules/applications/wayland.nix new file mode 100644 index 0000000..19d88f3 --- /dev/null +++ b/modules/applications/wayland.nix @@ -0,0 +1,53 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.wayland; +in +{ + options.my.applications.wayland = { + enable = lib.mkEnableOption "Wayland session support"; + }; + + config = lib.mkIf cfg.enable { + programs.xwayland.enable = true; + + xdg.portal = { + enable = true; + wlr.enable = true; + extraPortals = [ + pkgs.xdg-desktop-portal-wlr + pkgs.xdg-desktop-portal-gtk + ]; + xdgOpenUsePortal = true; + config = { + common.default = [ + "wlr" + "gtk" + ]; + niri.default = [ + "wlr" + "gtk" + ]; + }; + }; + + environment.variables = { + NIXOS_OZONE_WL = "1"; + }; + + environment.sessionVariables = { + ELECTRON_OZONE_PLATFORM_HINT = "wayland"; + QT_QPA_PLATFORM = "wayland;xcb"; + NIXOS_OZONE_WL = "1"; + }; + + environment.systemPackages = with pkgs; [ + xwayland-satellite # X11 compatibility layer for Wayland + uwsm # Universal Wayland Session Manager + ]; + }; +} diff --git a/modules/applications/zellij/default.nix b/modules/applications/zellij/default.nix new file mode 100644 index 0000000..69a4d65 --- /dev/null +++ b/modules/applications/zellij/default.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.zellij; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.zellij = { + enable = lib.mkEnableOption "Zellij terminal multiplexer"; + }; + + config = lib.mkIf cfg.enable { + my.applications.zellij.system.enable = lib.mkDefault true; + my.applications.zellij.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/zellij/home.nix b/modules/applications/zellij/home.nix new file mode 100644 index 0000000..3a4dbe4 --- /dev/null +++ b/modules/applications/zellij/home.nix @@ -0,0 +1,81 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.zellij.homeManager; +in +{ + options.my.applications.zellij.homeManager = { + enable = lib.mkEnableOption "Zellij home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf cfg.enable { + programs.zellij = { + enable = true; + + enableZshIntegration = false; + + settings = { + pane_frames = true; + copy_on_select = false; + default_mode = "locked"; + default_shell = "/run/current-system/sw/bin/zsh"; + }; + + extraConfig = '' + keybinds { + locked { + bind "Ctrl g" { SwitchToMode "normal"; } + bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; } + bind "Alt j" "Alt Down" { MoveFocus "Down"; } + bind "Alt k" "Alt Up" { MoveFocus "Up"; } + bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; } + bind "Alt n" { NewPane; } + bind "Alt t" { NewTab; } + bind "Alt H" { Resize "Increase Left"; } + bind "Alt J" { Resize "Increase Down"; } + bind "Alt K" { Resize "Increase Up"; } + bind "Alt L" { Resize "Increase Right"; } + bind "Alt c" { Copy; } + } + normal { + bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; } + bind "Alt j" "Alt Down" { MoveFocus "Down"; } + bind "Alt k" "Alt Up" { MoveFocus "Up"; } + bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; } + bind "Alt n" { NewPane; } + bind "Alt t" { NewTab; } + bind "Alt H" { Resize "Increase Left"; } + bind "Alt J" { Resize "Increase Down"; } + bind "Alt K" { Resize "Increase Up"; } + bind "Alt L" { Resize "Increase Right"; } + } + } + ''; + + layouts.dev = '' + layout { + pane split_direction="vertical" { + pane { + pane command="nvim" + pane stacked=true size="30%" { + pane expanded=true + pane + } + } + + pane size=1 borderless=true { + plugin location="zellij:compact-bar" + } + } + } + ''; + }; + }; + } + ]; +} diff --git a/modules/applications/zellij/system.nix b/modules/applications/zellij/system.nix new file mode 100644 index 0000000..65a6cb3 --- /dev/null +++ b/modules/applications/zellij/system.nix @@ -0,0 +1,20 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.zellij.system; +in +{ + options.my.applications.zellij.system = { + enable = lib.mkEnableOption "Zellij system configuration"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + zellij # Terminal multiplexer with batteries included + ]; + }; +} diff --git a/modules/applications/zoom.nix b/modules/applications/zoom.nix new file mode 100644 index 0000000..ce74f17 --- /dev/null +++ b/modules/applications/zoom.nix @@ -0,0 +1,26 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.zoom; +in +{ + options.my.applications.zoom = { + enable = lib.mkEnableOption "Zoom video conferencing"; + }; + + config = lib.mkIf cfg.enable { + nixpkgs.config.allowUnfreePredicate = pkg: lib.getName pkg == "zoom-us"; + + home-manager.sharedModules = [ + { + home.packages = with pkgs; [ + zoom-us # Video conferencing application + ]; + } + ]; + }; +} diff --git a/modules/applications/zsh/default.nix b/modules/applications/zsh/default.nix new file mode 100644 index 0000000..1d7b07b --- /dev/null +++ b/modules/applications/zsh/default.nix @@ -0,0 +1,25 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.zsh; +in +{ + imports = [ + ./system.nix + ./home.nix + ]; + + options.my.applications.zsh = { + enable = lib.mkEnableOption "Zsh shell"; + system.enable = lib.mkEnableOption "Zsh system configuration"; + homeManager.enable = lib.mkEnableOption "Zsh home-manager configuration"; + }; + + config = lib.mkIf cfg.enable { + my.applications.zsh.system.enable = lib.mkDefault true; + my.applications.zsh.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/zsh/home.nix b/modules/applications/zsh/home.nix new file mode 100644 index 0000000..529edc1 --- /dev/null +++ b/modules/applications/zsh/home.nix @@ -0,0 +1,58 @@ +{ lib, config, ... }: +let + cfg = config.my.applications.zsh.homeManager; +in +{ + options.my.applications.zsh.homeManager = { + enable = lib.mkEnableOption "Zsh home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf cfg.enable { + programs.zsh = { + enable = true; + enableCompletion = true; + + oh-my-zsh = { + enable = true; + theme = "robbyrussell"; + plugins = [ "git" ]; + }; + + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + + initContent = '' + # ---- from gist: export / history size ---- + export HISTSIZE=999999999 + export HISTFILESIZE=999999999 + + # ---- from gist: setopt ---- + setopt extended_history + setopt hist_allow_clobber + setopt hist_fcntl_lock + setopt hist_find_no_dups + setopt hist_ignore_all_dups + setopt hist_ignore_dups + setopt hist_ignore_space + # setopt hist_no_functions + # setopt hist_no_store + setopt hist_reduce_blanks + setopt hist_save_no_dups + setopt hist_verify + setopt inc_append_history_time + + unsetopt SHARE_HISTORY + setopt APPEND_HISTORY + setopt INC_APPEND_HISTORY_TIME + + # ---- from gist: aliases ---- + alias docker-compose="docker compose" + alias clearsign='export GPG_TTY=$(tty) && openssl rand -hex 16 | gpg --clearsign' + ''; + }; + }; + } + ]; +} diff --git a/modules/applications/zsh/system.nix b/modules/applications/zsh/system.nix new file mode 100644 index 0000000..ef4a98d --- /dev/null +++ b/modules/applications/zsh/system.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.applications.zsh.system; +in +{ + options.my.applications.zsh.system = { + enable = lib.mkEnableOption "Zsh system configuration"; + }; + + config = lib.mkIf cfg.enable { + programs.zsh.enable = true; + }; +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..e69de29 diff --git a/modules/drivers/default.nix b/modules/drivers/default.nix new file mode 100644 index 0000000..812230f --- /dev/null +++ b/modules/drivers/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./intel-drivers.nix + ]; +} diff --git a/modules/drivers/intel-drivers.nix b/modules/drivers/intel-drivers.nix index fb24fd6..cc3ae16 100644 --- a/modules/drivers/intel-drivers.nix +++ b/modules/drivers/intel-drivers.nix @@ -4,23 +4,21 @@ config, ... }: -with lib; let - cfg = config.drivers.intel; + cfg = config.my.drivers.intel; in { - options.drivers.intel = { - enable = mkEnableOption "Enable Intel Graphics Drivers"; + options.my.drivers.intel = { + enable = lib.mkEnableOption "Intel Graphics Drivers"; }; - config = mkIf cfg.enable { - # OpenGL + config = lib.mkIf cfg.enable { hardware.graphics = { extraPackages = with pkgs; [ - intel-media-driver - vaapiIntel - vaapiVdpau - libvdpau-va-gl + intel-media-driver # Intel Media Driver for VA-API + vaapiIntel # VA-API Intel driver + vaapiVdpau # VA-API to VDPAU adapter + libvdpau-va-gl # VDPAU driver with OpenGL/VAAPI backend ]; }; }; diff --git a/modules/integrations/default.nix b/modules/integrations/default.nix new file mode 100644 index 0000000..1e9a5a4 --- /dev/null +++ b/modules/integrations/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./home-manager.nix + ]; +} diff --git a/modules/integrations/home-manager.nix b/modules/integrations/home-manager.nix new file mode 100644 index 0000000..8dde697 --- /dev/null +++ b/modules/integrations/home-manager.nix @@ -0,0 +1,25 @@ +{ + username, + inputs, + config, + ... +}: +{ + imports = [ + inputs.home-manager.nixosModules.home-manager + ]; + + home-manager = { + useUserPackages = true; + useGlobalPkgs = true; + backupFileExtension = "backup"; + + users.${username} = { + home = { + inherit username; + homeDirectory = "/home/${username}"; + stateVersion = config.my.stateVersions.homeManager; + }; + }; + }; +} diff --git a/modules/nix/boot/nfs.nix b/modules/nix/boot/nfs.nix deleted file mode 100644 index 26b609b..0000000 --- a/modules/nix/boot/nfs.nix +++ /dev/null @@ -1,4 +0,0 @@ -_: { - boot.supportedFilesystems = [ "nfs" ]; - fuse.userAllowOther = true; -} diff --git a/modules/nix/boot/uefi.nix b/modules/nix/boot/uefi.nix deleted file mode 100644 index 9fca7d0..0000000 --- a/modules/nix/boot/uefi.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ lib, ... }: -{ - boot.loader = { - systemd-boot.enable = lib.mkDefault true; - efi.canTouchEfiVariables = lib.mkDefault true; - }; -} diff --git a/modules/nix/camera.nix b/modules/nix/camera.nix deleted file mode 100644 index 9ad501f..0000000 --- a/modules/nix/camera.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ pkgs, ... }: -{ - boot.kernelModules = [ "uvcvideo" ]; - - environment.systemPackages = with pkgs; [ - v4l-utils - ffmpeg-full - ]; - - services.pipewire = { - enable = true; - alsa.enable = true; - pulse.enable = true; - }; - security.rtkit.enable = true; - - xdg.portal = { - enable = true; - extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; - }; -} diff --git a/modules/nix/fingerprint.nix b/modules/nix/fingerprint.nix deleted file mode 100644 index f4cab3b..0000000 --- a/modules/nix/fingerprint.nix +++ /dev/null @@ -1,14 +0,0 @@ -# Documentation : /docs/fingerprint.md -_: { - services.fprintd.enable = true; - - security.pam.services = { - login.fprintAuth = true; - - # sudo - sudo.fprintAuth = true; - - # greetd (tuigreet / ReGreet) - greetd.fprintAuth = true; - }; -} diff --git a/modules/nix/fonts.nix b/modules/nix/fonts.nix deleted file mode 100644 index 505d601..0000000 --- a/modules/nix/fonts.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ pkgs, ... }: -{ - fonts = { - packages = with pkgs; [ - noto-fonts - noto-fonts-cjk-sans - noto-fonts-color-emoji - terminus_font - cantarell-fonts - font-awesome - nerd-fonts.blex-mono - ]; - - fontDir.enable = true; - fontconfig = { - defaultFonts = { - serif = [ - "Noto Serif CJK JP" - "Noto Color Emoji" - ]; - sansSerif = [ - "Noto Sans CJK JP" - "Noto Clor Emoji" - ]; - emoji = [ "Noto Color Emoji" ]; - }; - }; - }; -} diff --git a/modules/nix/greetd.nix b/modules/nix/greetd.nix deleted file mode 100644 index 22f1bee..0000000 --- a/modules/nix/greetd.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ pkgs, ... }: -{ - services.greetd = { - enable = true; - settings = { - default_session = { - user = "greeter"; - command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --cmd niri-session"; - }; - }; - }; -} diff --git a/modules/nix/hardware/bluetooth.nix b/modules/nix/hardware/bluetooth.nix deleted file mode 100644 index e3b8d15..0000000 --- a/modules/nix/hardware/bluetooth.nix +++ /dev/null @@ -1,6 +0,0 @@ -_: { - hardware = { - bluetooth.enable = true; - bluetooth.powerOnBoot = true; - }; -} diff --git a/modules/nix/hardware/gui.nix b/modules/nix/hardware/gui.nix deleted file mode 100644 index 1f17346..0000000 --- a/modules/nix/hardware/gui.nix +++ /dev/null @@ -1,5 +0,0 @@ -_: { - hardware = { - graphics.enable = true; - }; -} diff --git a/modules/nix/i18n.nix b/modules/nix/i18n.nix deleted file mode 100644 index ccb21e4..0000000 --- a/modules/nix/i18n.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ pkgs, ... }: -{ - i18n.inputMethod = { - enable = true; - type = "fcitx5"; - fcitx5 = { - waylandFrontend = true; - addons = with pkgs; [ - fcitx5-mozc-ut - fcitx5-gtk - kdePackages.fcitx5-qt - qt6Packages.fcitx5-configtool - ]; - settings.inputMethod = { - GroupOrder = { - "0" = "Default"; - }; - "Groups/0" = { - Name = "Default"; - "Default Layout" = "jp"; - DefaultIM = "mozc"; - }; - "Groups/0/Items/0" = { - Name = "keyboard-jp"; - Layout = ""; - }; - "Groups/0/Items/1" = { - Name = "mozc"; - Layout = ""; - }; - }; - }; - }; -} diff --git a/modules/nix/kde.nix b/modules/nix/kde.nix deleted file mode 100644 index 7e989e2..0000000 --- a/modules/nix/kde.nix +++ /dev/null @@ -1,5 +0,0 @@ -_: { - programs.kdeconnect = { - enable = true; - }; -} diff --git a/modules/nix/network/wifi.nix b/modules/nix/network/wifi.nix deleted file mode 100644 index dd6281c..0000000 --- a/modules/nix/network/wifi.nix +++ /dev/null @@ -1,24 +0,0 @@ -_: { - networking = { - networkmanager = { - enable = true; - - dns = "none"; - wifi.powersave = false; - wifi.backend = "wpa_supplicant"; - settings = { - "device"."wifi.scan-rand-mac-address" = "no"; - "connection"."wifi.cloned-mac-address" = "permanent"; - }; - }; - wireless.iwd.enable = false; - }; - - boot.extraModprobeConfig = '' - options cfg80211 ieee80211_regdom=JP - options iwlwifi power_save=0 - options iwlwifi uapsd_disable=1 - ''; - - programs.nm-applet.enable = true; -} diff --git a/modules/nix/noctalia.nix b/modules/nix/noctalia.nix deleted file mode 100644 index e2d3efb..0000000 --- a/modules/nix/noctalia.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - pkgs, - inputs, - ... -}: -{ - environment.systemPackages = with pkgs; [ - inputs.noctalia.packages.${system}.default - ]; -} diff --git a/modules/nix/power.nix b/modules/nix/power.nix deleted file mode 100644 index c64097d..0000000 --- a/modules/nix/power.nix +++ /dev/null @@ -1,14 +0,0 @@ -_: { - boot.kernelParams = [ - "mem_sleep_default=deep" - ]; - - powerManagement = { - enable = true; - powertop.enable = true; - }; - - services.power-profiles-daemon.enable = true; - services.tlp.enable = false; - services.upower.enable = true; -} diff --git a/modules/nix/secure-boot.nix b/modules/nix/secure-boot.nix deleted file mode 100644 index 97f7656..0000000 --- a/modules/nix/secure-boot.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - inputs, - lib, - ... -}: -{ - imports = [ - inputs.lanzaboote.nixosModules.lanzaboote - ]; - - boot.loader = { - systemd-boot.enable = lib.mkForce false; - efi.canTouchEfiVariables = true; - efi.efiSysMountPoint = "/boot"; - }; - - boot.lanzaboote = { - enable = true; - pkiBundle = "/var/lib/sbctl"; - }; -} diff --git a/modules/nix/user.nix b/modules/nix/user.nix deleted file mode 100644 index ee24a2c..0000000 --- a/modules/nix/user.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - userName, - inputs, - ... -}: -{ - imports = [ inputs.home-manager.nixosModules.home-manager ]; - - home-manager = { - useUserPackages = true; - useGlobalPkgs = true; - backupFileExtension = "backup"; - users.moons = { - home = { - username = userName; - homeDirectory = "/home/${userName}"; - stateVersion = "26.05"; - }; - }; - }; -} diff --git a/modules/nix/boot/default.nix b/modules/system/boot/default.nix similarity index 100% rename from modules/nix/boot/default.nix rename to modules/system/boot/default.nix diff --git a/modules/system/boot/nfs.nix b/modules/system/boot/nfs.nix new file mode 100644 index 0000000..023ebd8 --- /dev/null +++ b/modules/system/boot/nfs.nix @@ -0,0 +1,18 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.system.boot.nfs; +in +{ + options.my.system.boot.nfs = { + enable = lib.mkEnableOption "NFS boot support"; + }; + + config = lib.mkIf cfg.enable { + boot.supportedFilesystems = [ "nfs" ]; + fuse.userAllowOther = true; + }; +} diff --git a/modules/system/boot/uefi.nix b/modules/system/boot/uefi.nix new file mode 100644 index 0000000..6ad8e92 --- /dev/null +++ b/modules/system/boot/uefi.nix @@ -0,0 +1,20 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.system.boot.uefi; +in +{ + options.my.system.boot.uefi = { + enable = lib.mkEnableOption "UEFI boot support"; + }; + + config = lib.mkIf cfg.enable { + boot.loader = { + systemd-boot.enable = lib.mkDefault true; + efi.canTouchEfiVariables = lib.mkDefault true; + }; + }; +} diff --git a/modules/system/camera.nix b/modules/system/camera.nix new file mode 100644 index 0000000..9419576 --- /dev/null +++ b/modules/system/camera.nix @@ -0,0 +1,35 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.system.camera; +in +{ + options.my.system.camera = { + enable = lib.mkEnableOption "camera support"; + }; + + config = lib.mkIf cfg.enable { + boot.kernelModules = [ "uvcvideo" ]; + + environment.systemPackages = with pkgs; [ + v4l-utils + ffmpeg-full + ]; + + services.pipewire = { + enable = true; + alsa.enable = true; + pulse.enable = true; + }; + security.rtkit.enable = true; + + xdg.portal = { + enable = true; + extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + }; + }; +} diff --git a/modules/system/default.nix b/modules/system/default.nix new file mode 100644 index 0000000..282b3f6 --- /dev/null +++ b/modules/system/default.nix @@ -0,0 +1,17 @@ +{ + imports = [ + ./boot + ./nix.nix + ./camera.nix + ./fingerprint.nix + ./fonts.nix + ./gc.nix + ./locale.nix + ./hardware + ./network + ./power.nix + ./secure-boot.nix + ./user + ./version.nix + ]; +} diff --git a/modules/system/fingerprint.nix b/modules/system/fingerprint.nix new file mode 100644 index 0000000..20450b3 --- /dev/null +++ b/modules/system/fingerprint.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.system.fingerprint; +in +{ + options.my.system.fingerprint = { + enable = lib.mkEnableOption "fingerprint authentication"; + }; + + config = lib.mkIf cfg.enable { + services.fprintd.enable = true; + + security.pam.services = { + login.fprintAuth = true; + sudo.fprintAuth = true; + greetd.fprintAuth = true; + }; + }; +} diff --git a/modules/system/fonts.nix b/modules/system/fonts.nix new file mode 100644 index 0000000..12654a5 --- /dev/null +++ b/modules/system/fonts.nix @@ -0,0 +1,43 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.system.fonts; +in +{ + options.my.system.fonts = { + enable = lib.mkEnableOption "system font configuration"; + }; + + config = lib.mkIf cfg.enable { + fonts = { + packages = with pkgs; [ + noto-fonts + noto-fonts-cjk-sans + noto-fonts-color-emoji + terminus_font + cantarell-fonts + font-awesome + nerd-fonts.blex-mono + ]; + + fontDir.enable = true; + fontconfig = { + defaultFonts = { + serif = [ + "Noto Serif CJK JP" + "Noto Color Emoji" + ]; + sansSerif = [ + "Noto Sans CJK JP" + "Noto Clor Emoji" + ]; + emoji = [ "Noto Color Emoji" ]; + }; + }; + }; + }; +} diff --git a/modules/nix/gc.nix b/modules/system/gc.nix similarity index 100% rename from modules/nix/gc.nix rename to modules/system/gc.nix diff --git a/modules/system/hardware/bluetooth.nix b/modules/system/hardware/bluetooth.nix new file mode 100644 index 0000000..f3685b7 --- /dev/null +++ b/modules/system/hardware/bluetooth.nix @@ -0,0 +1,26 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.system.hardware.bluetooth; +in +{ + options.my.system.hardware.bluetooth = { + enable = lib.mkEnableOption "Bluetooth support"; + }; + + config = lib.mkIf cfg.enable { + hardware = { + bluetooth.enable = true; + bluetooth.powerOnBoot = true; + }; + + services = { + bluetooth.enable = true; + bluetooth.startWhenNeeded = true; + blueman.enable = true; + }; + }; +} diff --git a/modules/nix/hardware/default.nix b/modules/system/hardware/default.nix similarity index 100% rename from modules/nix/hardware/default.nix rename to modules/system/hardware/default.nix diff --git a/modules/system/hardware/gui.nix b/modules/system/hardware/gui.nix new file mode 100644 index 0000000..19ed7ef --- /dev/null +++ b/modules/system/hardware/gui.nix @@ -0,0 +1,19 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.system.hardware.gui; +in +{ + options.my.system.hardware.gui = { + enable = lib.mkEnableOption "GPU/graphics hardware acceleration"; + }; + + config = lib.mkIf cfg.enable { + hardware = { + graphics.enable = true; + }; + }; +} diff --git a/modules/system/locale.nix b/modules/system/locale.nix new file mode 100644 index 0000000..85aa356 --- /dev/null +++ b/modules/system/locale.nix @@ -0,0 +1,18 @@ +_: { + time.timeZone = "Asia/Tokyo"; + + i18n.defaultLocale = "ja_JP.UTF-8"; + i18n.extraLocaleSettings = { + LC_ADDRESS = "ja_JP.UTF-8"; + LC_IDENTIFICATION = "ja_JP.UTF-8"; + LC_MEASUREMENT = "ja_JP.UTF-8"; + LC_MONETARY = "ja_JP.UTF-8"; + LC_NAME = "ja_JP.UTF-8"; + LC_NUMERIC = "ja_JP.UTF-8"; + LC_PAPER = "ja_JP.UTF-8"; + LC_TELEPHONE = "ja_JP.UTF-8"; + LC_TIME = "ja_JP.UTF-8"; + }; + + console.keyMap = "jp106"; +} diff --git a/modules/nix/network/default.nix b/modules/system/network/default.nix similarity index 100% rename from modules/nix/network/default.nix rename to modules/system/network/default.nix diff --git a/modules/nix/network/root_ca.crt b/modules/system/network/root_ca.crt similarity index 100% rename from modules/nix/network/root_ca.crt rename to modules/system/network/root_ca.crt diff --git a/modules/system/network/wifi.nix b/modules/system/network/wifi.nix new file mode 100644 index 0000000..8b55002 --- /dev/null +++ b/modules/system/network/wifi.nix @@ -0,0 +1,38 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.system.network.wifi; +in +{ + options.my.system.network.wifi = { + enable = lib.mkEnableOption "WiFi (NetworkManager) support"; + }; + + config = lib.mkIf cfg.enable { + networking = { + networkmanager = { + enable = true; + + dns = "none"; + wifi.powersave = false; + wifi.backend = "wpa_supplicant"; + settings = { + "device"."wifi.scan-rand-mac-address" = "no"; + "connection"."wifi.cloned-mac-address" = "permanent"; + }; + }; + wireless.iwd.enable = false; + }; + + boot.extraModprobeConfig = '' + options cfg80211 ieee80211_regdom=JP + options iwlwifi power_save=0 + options iwlwifi uapsd_disable=1 + ''; + + programs.nm-applet.enable = true; + }; +} diff --git a/modules/nix/caches.nix b/modules/system/nix.nix similarity index 90% rename from modules/nix/caches.nix rename to modules/system/nix.nix index 8802174..0c5af08 100644 --- a/modules/nix/caches.nix +++ b/modules/system/nix.nix @@ -15,5 +15,10 @@ _: { "noctalia.cachix.org-1:pCOR47nnMEo5thcxNDtzWpOxNFQsBRglJzxWPp3dkU4=" "vicinae.cachix.org-1:1kDrfienkGHPYbkpNj1mWTr7Fm1+zcenzgTizIcI3oc=" ]; + + experimental-features = [ + "nix-command" + "flakes" + ]; }; } diff --git a/modules/system/power.nix b/modules/system/power.nix new file mode 100644 index 0000000..c99e6b1 --- /dev/null +++ b/modules/system/power.nix @@ -0,0 +1,28 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.system.power; +in +{ + options.my.system.power = { + enable = lib.mkEnableOption "power management"; + }; + + config = lib.mkIf cfg.enable { + boot.kernelParams = [ + "mem_sleep_default=deep" + ]; + + powerManagement = { + enable = true; + powertop.enable = true; + }; + + services.power-profiles-daemon.enable = true; + services.tlp.enable = false; + services.upower.enable = true; + }; +} diff --git a/modules/system/secure-boot.nix b/modules/system/secure-boot.nix new file mode 100644 index 0000000..0d393f2 --- /dev/null +++ b/modules/system/secure-boot.nix @@ -0,0 +1,31 @@ +{ + inputs, + lib, + config, + ... +}: +let + cfg = config.my.system.secure-boot; +in +{ + imports = [ + inputs.lanzaboote.nixosModules.lanzaboote + ]; + + options.my.system.secure-boot = { + enable = lib.mkEnableOption "secure boot (lanzaboote)"; + }; + + config = lib.mkIf cfg.enable { + boot.loader = { + systemd-boot.enable = lib.mkForce false; + efi.canTouchEfiVariables = true; + efi.efiSysMountPoint = "/boot"; + }; + + boot.lanzaboote = { + enable = true; + pkiBundle = "/var/lib/sbctl"; + }; + }; +} diff --git a/modules/system/user/default.nix b/modules/system/user/default.nix new file mode 100644 index 0000000..3882832 --- /dev/null +++ b/modules/system/user/default.nix @@ -0,0 +1,13 @@ +{ + imports = [ + ./moons.nix + ]; + + users.mutableUsers = true; + + nix.settings.allowed-users = [ "moons" ]; + nix.settings.trusted-users = [ + "root" + "moons" + ]; +} diff --git a/modules/system/user/moons.nix b/modules/system/user/moons.nix new file mode 100644 index 0000000..c4c2f76 --- /dev/null +++ b/modules/system/user/moons.nix @@ -0,0 +1,25 @@ +{ pkgs, ... }: +{ + users.users.moons = { + isNormalUser = true; + description = "moons-14"; + extraGroups = [ + "adbusers" + "docker" + "libvirtd" + "lp" + "networkmanager" + "scanner" + "wheel" + "vboxusers" + "dialout" + ]; + shell = pkgs.zsh; + ignoreShellProgramCheck = true; + + openssh.authorizedKeys.keys = [ + "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIKhxDkucmeCor6CKoXAua7DgDSzuXrZOtpdkyzQxz5+aAAAABHNzaDo= moons@moons14.com" + "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIN6hZJyng/5LgFKPjR6uZAd/00UkO0vN0uQOoIvfSELdAAAABHNzaDo= moons@moons14.com" + ]; + }; +} diff --git a/modules/system/version.nix b/modules/system/version.nix new file mode 100644 index 0000000..cc8f061 --- /dev/null +++ b/modules/system/version.nix @@ -0,0 +1,22 @@ +{ + config, + lib, + ... +}: +{ + options.my.stateVersions = { + nixos = lib.mkOption { + type = lib.types.str; + default = "25.11"; + }; + + homeManager = lib.mkOption { + type = lib.types.str; + default = "25.11"; + }; + }; + + config = { + system.stateVersion = lib.mkDefault config.my.stateVersions.nixos; + }; +} diff --git a/profiles/base.nix b/profiles/base.nix index 6590473..de6a54b 100644 --- a/profiles/base.nix +++ b/profiles/base.nix @@ -1,16 +1,15 @@ { pkgs, - userName, + username, ... }: { imports = [ - ../modules/nix/boot - ../modules/nix/caches.nix - ../modules/nix/gc.nix - ../modules/nix/hardware - ../modules/nix/user.nix - ../modules/nix/network + ../modules/system/boot + ../modules/system/caches.nix + ../modules/system/gc.nix + ../modules/system/hardware + ../modules/system/network ]; programs = { @@ -32,6 +31,6 @@ unstable.msedit # Microsoft Editor ]; - home-manager.users.${userName}.imports = [ + home-manager.users.${username}.imports = [ ]; } diff --git a/profiles/cli-minimal.nix b/profiles/cli-minimal.nix index d91ace9..958f762 100644 --- a/profiles/cli-minimal.nix +++ b/profiles/cli-minimal.nix @@ -1,6 +1,6 @@ { pkgs, - userName, + username, ... }: { @@ -31,5 +31,5 @@ unstable.opencode # Coding AI Assistant ]; - home-manager.users.${userName}.imports = [ ]; + home-manager.users.${username}.imports = [ ]; } diff --git a/profiles/cli-vm.nix b/profiles/cli-vm.nix index 9f62175..db2bd7e 100644 --- a/profiles/cli-vm.nix +++ b/profiles/cli-vm.nix @@ -1,7 +1,7 @@ -{ userName, ... }: +{ username, ... }: { imports = [ ./cli-minimal.nix ]; - home-manager.users.${userName}.imports = [ ]; + home-manager.users.${username}.imports = [ ]; } diff --git a/profiles/desktop.nix b/profiles/desktop.nix index a2adab2..d105aab 100644 --- a/profiles/desktop.nix +++ b/profiles/desktop.nix @@ -1,7 +1,7 @@ -{ userName, ... }: +{ username, ... }: { imports = [ ./gui.nix ]; - home-manager.users.${userName}.imports = [ ]; + home-manager.users.${username}.imports = [ ]; } diff --git a/profiles/gui.nix b/profiles/gui.nix index f2f666d..b0f2026 100644 --- a/profiles/gui.nix +++ b/profiles/gui.nix @@ -1,23 +1,26 @@ { pkgs, - userName, + username, ... }: { imports = [ ./cli-minimal.nix - ../modules/nix/hardware/gui.nix - ../modules/nix/camera.nix - ../modules/nix/fonts.nix - ../modules/nix/greetd.nix - ../modules/nix/i18n.nix - ../modules/nix/kde.nix - ../modules/nix/noctalia.nix + ../modules/system/hardware/gui.nix + ../modules/system/camera.nix + ../modules/system/fonts.nix + ../modules/applications/greetd.nix + ../modules/applications/fcitx5.nix + ../modules/applications/kde.nix ]; - programs = { + my.applications = { niri.enable = true; - xwayland.enable = true; + noctalia.enable = true; + wayland.enable = true; + }; + + programs = { dconf.enable = true; seahorse.enable = true; }; @@ -34,5 +37,5 @@ wf-recorder # A Screen Recorder For Wayland ]; - home-manager.users.${userName}.imports = [ ]; + home-manager.users.${username}.imports = [ ]; } diff --git a/profiles/laptop.nix b/profiles/laptop.nix index f23890a..3dde5db 100644 --- a/profiles/laptop.nix +++ b/profiles/laptop.nix @@ -1,15 +1,15 @@ { pkgs, - userName, + username, ... }: { imports = [ ./gui.nix - ../modules/nix/bluetooth.nix - ../modules/nix/fingerprint.nix - ../modules/nix/network/wifi.nix - ../modules/nix/power.nix + ../modules/system/hardware/bluetooth.nix + ../modules/system/fingerprint.nix + ../modules/system/network/wifi.nix + ../modules/system/power.nix ]; environment.systemPackages = with pkgs; [ @@ -17,5 +17,5 @@ sbctl # Secure Boot Key Management Tool ]; - home-manager.users.${userName}.imports = [ ]; + home-manager.users.${username}.imports = [ ]; } From 394638638d75d044903b3db26f2719cddc584238 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Sat, 30 May 2026 22:11:33 +0900 Subject: [PATCH 15/39] fix --- modules/applications/btop/default.nix | 2 +- modules/applications/claude/default.nix | 2 +- modules/applications/fcitx5/default.nix | 2 +- modules/applications/ghostty/default.nix | 2 +- modules/applications/git/default.nix | 2 +- modules/applications/gtk/default.nix | 2 +- modules/applications/gtk/system.nix | 8 +++++- modules/applications/niri/default.nix | 2 +- modules/applications/noctalia/default.nix | 2 +- modules/applications/ssh/default.nix | 2 +- modules/applications/vim/default.nix | 2 +- .../applications/vim/home/plugins/default.nix | 2 +- .../vim/home/plugins/editor/default.nix | 26 +++++++++---------- .../vim/home/plugins/ui/default.nix | 22 ++++++++-------- modules/applications/vscode/default.nix | 2 +- modules/applications/zellij/default.nix | 2 +- modules/applications/zsh/default.nix | 2 +- modules/default.nix | 8 ++++++ modules/system/audio.nix | 22 ++++++++++++++++ modules/system/boot/default.nix | 6 +++++ modules/system/boot/nfs.nix | 1 + modules/system/default.nix | 5 ++-- modules/system/hardware/default.nix | 7 +++++ modules/system/network/default.nix | 4 +++ modules/system/power.nix | 9 +++++++ modules/system/version.nix | 4 +-- 26 files changed, 107 insertions(+), 43 deletions(-) create mode 100644 modules/system/audio.nix diff --git a/modules/applications/btop/default.nix b/modules/applications/btop/default.nix index 6f87dd3..1e27b13 100644 --- a/modules/applications/btop/default.nix +++ b/modules/applications/btop/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.btop = { diff --git a/modules/applications/claude/default.nix b/modules/applications/claude/default.nix index aaec6a9..91c914c 100644 --- a/modules/applications/claude/default.nix +++ b/modules/applications/claude/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.claude = { diff --git a/modules/applications/fcitx5/default.nix b/modules/applications/fcitx5/default.nix index 7becf6f..11c198e 100644 --- a/modules/applications/fcitx5/default.nix +++ b/modules/applications/fcitx5/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.fcitx5 = { diff --git a/modules/applications/ghostty/default.nix b/modules/applications/ghostty/default.nix index 950c021..966e80c 100644 --- a/modules/applications/ghostty/default.nix +++ b/modules/applications/ghostty/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.ghostty = { diff --git a/modules/applications/git/default.nix b/modules/applications/git/default.nix index 89243c6..6d7bbf9 100644 --- a/modules/applications/git/default.nix +++ b/modules/applications/git/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.git = { diff --git a/modules/applications/gtk/default.nix b/modules/applications/gtk/default.nix index f4e8f45..9c8d388 100644 --- a/modules/applications/gtk/default.nix +++ b/modules/applications/gtk/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.gtk = { diff --git a/modules/applications/gtk/system.nix b/modules/applications/gtk/system.nix index bf89701..c3434fc 100644 --- a/modules/applications/gtk/system.nix +++ b/modules/applications/gtk/system.nix @@ -1,4 +1,8 @@ -{ lib, config, ... }: +{ + lib, + config, + ... +}: let cfg = config.my.applications.gtk.system; in @@ -10,5 +14,7 @@ in config = lib.mkIf cfg.enable { programs.dconf.enable = true; programs.seahorse.enable = true; + + services.gnome.gnome-keyring.enable = true; }; } diff --git a/modules/applications/niri/default.nix b/modules/applications/niri/default.nix index 7858c87..f42e307 100644 --- a/modules/applications/niri/default.nix +++ b/modules/applications/niri/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.niri = { diff --git a/modules/applications/noctalia/default.nix b/modules/applications/noctalia/default.nix index c555310..9ac464b 100644 --- a/modules/applications/noctalia/default.nix +++ b/modules/applications/noctalia/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.noctalia = { diff --git a/modules/applications/ssh/default.nix b/modules/applications/ssh/default.nix index caafc4e..89e6c85 100644 --- a/modules/applications/ssh/default.nix +++ b/modules/applications/ssh/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.ssh = { diff --git a/modules/applications/vim/default.nix b/modules/applications/vim/default.nix index ea5460e..17711f3 100644 --- a/modules/applications/vim/default.nix +++ b/modules/applications/vim/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home + ./system.nix ]; options.my.applications.vim = { diff --git a/modules/applications/vim/home/plugins/default.nix b/modules/applications/vim/home/plugins/default.nix index d99031d..ec310f7 100644 --- a/modules/applications/vim/home/plugins/default.nix +++ b/modules/applications/vim/home/plugins/default.nix @@ -1,7 +1,7 @@ { ... }: { imports = [ - ./ui ./editor + ./ui ]; } diff --git a/modules/applications/vim/home/plugins/editor/default.nix b/modules/applications/vim/home/plugins/editor/default.nix index ed0668a..d03d572 100644 --- a/modules/applications/vim/home/plugins/editor/default.nix +++ b/modules/applications/vim/home/plugins/editor/default.nix @@ -1,23 +1,23 @@ { ... }: { imports = [ - ./snacks.nix - ./treesitter.nix - ./blink-cmp.nix - ./gitsigns.nix - ./comment.nix ./autopairs.nix - ./lsp-signature.nix - ./copilot.nix - ./trouble.nix + ./blink-cmp.nix + ./comment.nix ./conform.nix - ./surround.nix - ./git.nix - ./git-conflict.nix - ./glance.nix + ./copilot.nix ./flash.nix - ./todo-comments.nix + ./git-conflict.nix + ./git.nix + ./gitsigns.nix + ./glance.nix + ./lsp-signature.nix + ./snacks.nix ./spectre.nix + ./surround.nix + ./todo-comments.nix + ./treesitter.nix + ./trouble.nix ./wakatime.nix ]; } diff --git a/modules/applications/vim/home/plugins/ui/default.nix b/modules/applications/vim/home/plugins/ui/default.nix index 7709bc0..0e72a6f 100644 --- a/modules/applications/vim/home/plugins/ui/default.nix +++ b/modules/applications/vim/home/plugins/ui/default.nix @@ -1,20 +1,20 @@ { ... }: { imports = [ - ./lualine.nix - ./neo-tree.nix - ./blankline.nix - ./which-key.nix - ./web-devicons.nix - ./toggleterm.nix - ./treesitter.nix ./barbar.nix - ./lightbulb.nix + ./blankline.nix ./colorizer.nix ./dropbar.nix - ./scrollbar.nix - ./ufo.nix - ./zen-mode.nix + ./lightbulb.nix + ./lualine.nix ./markview.nix + ./neo-tree.nix + ./scrollbar.nix + ./toggleterm.nix + ./treesitter.nix + ./ufo.nix + ./web-devicons.nix + ./which-key.nix + ./zen-mode.nix ]; } diff --git a/modules/applications/vscode/default.nix b/modules/applications/vscode/default.nix index 6fe9147..96a36d3 100644 --- a/modules/applications/vscode/default.nix +++ b/modules/applications/vscode/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.vscode = { diff --git a/modules/applications/zellij/default.nix b/modules/applications/zellij/default.nix index 69a4d65..81a0c8a 100644 --- a/modules/applications/zellij/default.nix +++ b/modules/applications/zellij/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.zellij = { diff --git a/modules/applications/zsh/default.nix b/modules/applications/zsh/default.nix index 1d7b07b..10ee585 100644 --- a/modules/applications/zsh/default.nix +++ b/modules/applications/zsh/default.nix @@ -8,8 +8,8 @@ let in { imports = [ - ./system.nix ./home.nix + ./system.nix ]; options.my.applications.zsh = { diff --git a/modules/default.nix b/modules/default.nix index e69de29..8030ff0 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ./applications + ./drivers + ./integrations + ./system + ]; +} diff --git a/modules/system/audio.nix b/modules/system/audio.nix new file mode 100644 index 0000000..d859857 --- /dev/null +++ b/modules/system/audio.nix @@ -0,0 +1,22 @@ +{ lib, config, ... }: +let + cfg = config.my.system.audio; +in +{ + options.my.system.audio = { + enable = lib.mkEnableOption "Audio support (PipeWire)"; + }; + + config = lib.mkIf cfg.enable { + security.rtkit.enable = true; + + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + wireplumber.enable = true; + }; + }; +} diff --git a/modules/system/boot/default.nix b/modules/system/boot/default.nix index 81bb87b..63e8b0a 100644 --- a/modules/system/boot/default.nix +++ b/modules/system/boot/default.nix @@ -4,8 +4,14 @@ ... }: { + imports = [ + ./nfs.nix + ./uefi.nix + ]; + boot = { loader.systemd-boot.configurationLimit = lib.mkDefault 8; kernelPackages = pkgs.linuxPackages_latest; }; + programs.nix-ld.enable = true; } diff --git a/modules/system/boot/nfs.nix b/modules/system/boot/nfs.nix index 023ebd8..7a84414 100644 --- a/modules/system/boot/nfs.nix +++ b/modules/system/boot/nfs.nix @@ -14,5 +14,6 @@ in config = lib.mkIf cfg.enable { boot.supportedFilesystems = [ "nfs" ]; fuse.userAllowOther = true; + services.rpcbind.enable = true; }; } diff --git a/modules/system/default.nix b/modules/system/default.nix index 282b3f6..aeefa4e 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -1,14 +1,15 @@ { imports = [ + ./audio.nix ./boot - ./nix.nix ./camera.nix ./fingerprint.nix ./fonts.nix ./gc.nix - ./locale.nix ./hardware + ./locale.nix ./network + ./nix.nix ./power.nix ./secure-boot.nix ./user diff --git a/modules/system/hardware/default.nix b/modules/system/hardware/default.nix index 6ccc795..722b480 100644 --- a/modules/system/hardware/default.nix +++ b/modules/system/hardware/default.nix @@ -1,7 +1,14 @@ { lib, ... }: { + imports = [ + ./bluetooth.nix + ./gui.nix + ]; + hardware = { enableRedistributableFirmware = lib.mkDefault true; keyboard.qmk.enable = true; }; + + services.fwupd.enable = true; } diff --git a/modules/system/network/default.nix b/modules/system/network/default.nix index 4783c4c..894fe2e 100644 --- a/modules/system/network/default.nix +++ b/modules/system/network/default.nix @@ -4,6 +4,10 @@ ... }: { + imports = [ + ./wifi.nix + ]; + networking = { hostName = host; diff --git a/modules/system/power.nix b/modules/system/power.nix index c99e6b1..6ab8466 100644 --- a/modules/system/power.nix +++ b/modules/system/power.nix @@ -24,5 +24,14 @@ in services.power-profiles-daemon.enable = true; services.tlp.enable = false; services.upower.enable = true; + + services.logind = { + settings.Login = { + HandleLidSwitch = "suspend"; + HandleLidSwitchDocked = "ignore"; + HandleLidSwitchExternalPower = "suspend"; + LidSwitchIgnoreInhibited = "no"; + }; + }; }; } diff --git a/modules/system/version.nix b/modules/system/version.nix index cc8f061..3218185 100644 --- a/modules/system/version.nix +++ b/modules/system/version.nix @@ -7,12 +7,12 @@ options.my.stateVersions = { nixos = lib.mkOption { type = lib.types.str; - default = "25.11"; + default = "26.05"; }; homeManager = lib.mkOption { type = lib.types.str; - default = "25.11"; + default = "26.05"; }; }; From 3ff532f9e55bb6141ec4c5f5f21703bc8e89d262 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Sat, 30 May 2026 23:37:40 +0900 Subject: [PATCH 16/39] fix --- modules/applications/default.nix | 3 +- modules/applications/java.nix | 21 ------------ modules/applications/java/default.nix | 25 ++++++++++++++ modules/applications/java/home.nix | 23 +++++++++++++ modules/applications/java/system.nix | 27 +++++++++++++++ modules/applications/slack.nix | 26 ++++++++++++++ modules/default.nix | 1 + modules/features/application/browser.nix | 13 +++++++ .../features/application/communication.nix | 17 ++++++++++ modules/features/application/default.nix | 6 ++++ modules/features/boot/default.nix | 7 ++++ modules/features/boot/power.nix | 13 +++++++ modules/features/boot/secure-boot.nix | 13 +++++++ modules/features/boot/uefi.nix | 13 +++++++ modules/features/cli/base.nix | 34 +++++++++++++++++++ modules/features/cli/default.nix | 7 ++++ modules/features/cli/interactive.nix | 25 ++++++++++++++ modules/features/cli/shell.nix | 13 +++++++ modules/features/connect/bluetooth.nix | 13 +++++++ modules/features/connect/default.nix | 6 ++++ modules/features/connect/wifi.nix | 13 +++++++ modules/features/default.nix | 14 ++++++++ modules/features/dev/agent.nix | 13 +++++++ modules/features/dev/bun.nix | 20 +++++++++++ modules/features/dev/default.nix | 9 +++++ modules/features/dev/java.nix | 13 +++++++ modules/features/dev/nix.nix | 20 +++++++++++ modules/features/dev/python.nix | 21 ++++++++++++ modules/features/gui/audio.nix | 13 +++++++ modules/features/gui/camera.nix | 13 +++++++ modules/features/gui/capture.nix | 22 ++++++++++++ modules/features/gui/default.nix | 13 +++++++ modules/features/gui/desktop.nix | 25 ++++++++++++++ modules/features/gui/editor.nix | 13 +++++++ modules/features/gui/file-manager.nix | 13 +++++++ modules/features/gui/graphic.nix | 13 +++++++ modules/features/gui/jp-input.nix | 13 +++++++ modules/features/gui/terminal.nix | 22 ++++++++++++ modules/features/identity/default.nix | 6 ++++ modules/features/identity/fingerprint.nix | 13 +++++++ modules/features/identity/ssh-default-key.nix | 31 +++++++++++++++++ modules/features/network/default.nix | 5 +++ modules/features/network/tailscale.nix | 31 +++++++++++++++++ modules/features/services/container.nix | 13 +++++++ modules/features/services/default.nix | 6 ++++ modules/features/services/kde.nix | 13 +++++++ modules/features/storage/default.nix | 5 +++ modules/features/storage/nfs-client.nix | 13 +++++++ modules/system/secure-boot.nix | 5 +++ profiles/cli-minimal.nix | 7 ---- profiles/gui.nix | 7 ---- profiles/interfaces/cli-interactive.nix | 0 profiles/interfaces/cli-minimal.nix | 0 profiles/interfaces/gui.nix | 0 profiles/platforms/desktop.nix | 0 profiles/platforms/laptop.nix | 0 profiles/platforms/thinkpad.nix | 0 profiles/platforms/vm.nix | 0 profiles/workloads/dev.nix | 0 profiles/workloads/ops.nix | 0 profiles/workloads/srv.nix | 0 61 files changed, 708 insertions(+), 36 deletions(-) delete mode 100644 modules/applications/java.nix create mode 100644 modules/applications/java/default.nix create mode 100644 modules/applications/java/home.nix create mode 100644 modules/applications/java/system.nix create mode 100644 modules/applications/slack.nix create mode 100644 modules/features/application/browser.nix create mode 100644 modules/features/application/communication.nix create mode 100644 modules/features/application/default.nix create mode 100644 modules/features/boot/default.nix create mode 100644 modules/features/boot/power.nix create mode 100644 modules/features/boot/secure-boot.nix create mode 100644 modules/features/boot/uefi.nix create mode 100644 modules/features/cli/base.nix create mode 100644 modules/features/cli/default.nix create mode 100644 modules/features/cli/interactive.nix create mode 100644 modules/features/cli/shell.nix create mode 100644 modules/features/connect/bluetooth.nix create mode 100644 modules/features/connect/default.nix create mode 100644 modules/features/connect/wifi.nix create mode 100644 modules/features/default.nix create mode 100644 modules/features/dev/agent.nix create mode 100644 modules/features/dev/bun.nix create mode 100644 modules/features/dev/default.nix create mode 100644 modules/features/dev/java.nix create mode 100644 modules/features/dev/nix.nix create mode 100644 modules/features/dev/python.nix create mode 100644 modules/features/gui/audio.nix create mode 100644 modules/features/gui/camera.nix create mode 100644 modules/features/gui/capture.nix create mode 100644 modules/features/gui/default.nix create mode 100644 modules/features/gui/desktop.nix create mode 100644 modules/features/gui/editor.nix create mode 100644 modules/features/gui/file-manager.nix create mode 100644 modules/features/gui/graphic.nix create mode 100644 modules/features/gui/jp-input.nix create mode 100644 modules/features/gui/terminal.nix create mode 100644 modules/features/identity/default.nix create mode 100644 modules/features/identity/fingerprint.nix create mode 100644 modules/features/identity/ssh-default-key.nix create mode 100644 modules/features/network/default.nix create mode 100644 modules/features/network/tailscale.nix create mode 100644 modules/features/services/container.nix create mode 100644 modules/features/services/default.nix create mode 100644 modules/features/services/kde.nix create mode 100644 modules/features/storage/default.nix create mode 100644 modules/features/storage/nfs-client.nix create mode 100644 profiles/interfaces/cli-interactive.nix create mode 100644 profiles/interfaces/cli-minimal.nix create mode 100644 profiles/interfaces/gui.nix create mode 100644 profiles/platforms/desktop.nix create mode 100644 profiles/platforms/laptop.nix create mode 100644 profiles/platforms/thinkpad.nix create mode 100644 profiles/platforms/vm.nix create mode 100644 profiles/workloads/dev.nix create mode 100644 profiles/workloads/ops.nix create mode 100644 profiles/workloads/srv.nix diff --git a/modules/applications/default.nix b/modules/applications/default.nix index 3e55634..2815c76 100644 --- a/modules/applications/default.nix +++ b/modules/applications/default.nix @@ -12,12 +12,13 @@ ./gnupg.nix ./greetd.nix ./gtk - ./java.nix + ./java ./kde.nix ./nautilus.nix ./niri ./noctalia ./openssh.nix + ./slack.nix ./ssh ./swayidle.nix ./tailscale.nix diff --git a/modules/applications/java.nix b/modules/applications/java.nix deleted file mode 100644 index d59d018..0000000 --- a/modules/applications/java.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: -let - cfg = config.my.applications.java; -in -{ - options.my.applications.java = { - enable = lib.mkEnableOption "Java runtime"; - }; - - config = lib.mkIf cfg.enable { - programs.java = { - enable = true; - package = pkgs.jdk25; - }; - }; -} diff --git a/modules/applications/java/default.nix b/modules/applications/java/default.nix new file mode 100644 index 0000000..253a984 --- /dev/null +++ b/modules/applications/java/default.nix @@ -0,0 +1,25 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.java; +in +{ + imports = [ + ./home.nix + ./system.nix + ]; + + options.my.applications.java = { + enable = lib.mkEnableOption "Java runtime"; + system.enable = lib.mkEnableOption "Java system configuration"; + homeManager.enable = lib.mkEnableOption "Java home-manager configuration"; + }; + + config = lib.mkIf cfg.enable { + my.applications.java.system.enable = lib.mkDefault true; + my.applications.java.homeManager.enable = lib.mkDefault true; + }; +} diff --git a/modules/applications/java/home.nix b/modules/applications/java/home.nix new file mode 100644 index 0000000..3661470 --- /dev/null +++ b/modules/applications/java/home.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.java.homeManager; +in +{ + options.my.applications.java.homeManager = { + enable = lib.mkEnableOption "Java home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf cfg.enable { + programs.java = { + enable = true; + }; + }; + } + ]; +} diff --git a/modules/applications/java/system.nix b/modules/applications/java/system.nix new file mode 100644 index 0000000..ec6f1b8 --- /dev/null +++ b/modules/applications/java/system.nix @@ -0,0 +1,27 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.java.system; +in +{ + options.my.applications.java.system = { + enable = lib.mkEnableOption "Java system configuration"; + }; + + config = lib.mkIf cfg.enable { + programs.java = { + enable = true; + package = pkgs.jdk25; + }; + + environment.systemPackages = with pkgs; [ + jdk25 # Java Development Kit 25 + maven # Java Build Tool + gradle # Java Build Tool + ]; + }; +} diff --git a/modules/applications/slack.nix b/modules/applications/slack.nix new file mode 100644 index 0000000..703e417 --- /dev/null +++ b/modules/applications/slack.nix @@ -0,0 +1,26 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.slack; +in +{ + options.my.applications.slack = { + enable = lib.mkEnableOption "Slack messaging client"; + }; + + config = lib.mkIf cfg.enable { + nixpkgs.config.allowUnfreePredicate = pkg: lib.getName pkg == "slack"; + + home-manager.sharedModules = [ + { + home.packages = with pkgs; [ + slack # Team messaging and collaboration platform + ]; + } + ]; + }; +} diff --git a/modules/default.nix b/modules/default.nix index 8030ff0..b8ff541 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -2,6 +2,7 @@ imports = [ ./applications ./drivers + ./features ./integrations ./system ]; diff --git a/modules/features/application/browser.nix b/modules/features/application/browser.nix new file mode 100644 index 0000000..221de91 --- /dev/null +++ b/modules/features/application/browser.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.application.browser; +in +{ + options.my.features.application.browser = { + enable = lib.mkEnableOption "Web browser (Chrome)"; + }; + + config = lib.mkIf cfg.enable { + my.applications.chrome.enable = true; + }; +} diff --git a/modules/features/application/communication.nix b/modules/features/application/communication.nix new file mode 100644 index 0000000..edd2036 --- /dev/null +++ b/modules/features/application/communication.nix @@ -0,0 +1,17 @@ +{ lib, config, ... }: +let + cfg = config.my.features.application.communication; +in +{ + options.my.features.application.communication = { + enable = lib.mkEnableOption "Communication applications (Discord, Zoom, Slack)"; + }; + + config = lib.mkIf cfg.enable { + my.applications = { + discord.enable = true; + zoom.enable = true; + slack.enable = true; + }; + }; +} diff --git a/modules/features/application/default.nix b/modules/features/application/default.nix new file mode 100644 index 0000000..3e2d7e0 --- /dev/null +++ b/modules/features/application/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./browser.nix + ./communication.nix + ]; +} diff --git a/modules/features/boot/default.nix b/modules/features/boot/default.nix new file mode 100644 index 0000000..57d2608 --- /dev/null +++ b/modules/features/boot/default.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./power.nix + ./secure-boot.nix + ./uefi.nix + ]; +} diff --git a/modules/features/boot/power.nix b/modules/features/boot/power.nix new file mode 100644 index 0000000..7cc0a83 --- /dev/null +++ b/modules/features/boot/power.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.boot.power; +in +{ + options.my.features.boot.power = { + enable = lib.mkEnableOption "Power management"; + }; + + config = lib.mkIf cfg.enable { + my.system.power.enable = true; + }; +} diff --git a/modules/features/boot/secure-boot.nix b/modules/features/boot/secure-boot.nix new file mode 100644 index 0000000..28f90cd --- /dev/null +++ b/modules/features/boot/secure-boot.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.boot.secureBoot; +in +{ + options.my.features.boot.secureBoot = { + enable = lib.mkEnableOption "Secure boot (lanzaboote)"; + }; + + config = lib.mkIf cfg.enable { + my.system.secure-boot.enable = true; + }; +} diff --git a/modules/features/boot/uefi.nix b/modules/features/boot/uefi.nix new file mode 100644 index 0000000..b12c228 --- /dev/null +++ b/modules/features/boot/uefi.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.boot.uefi; +in +{ + options.my.features.boot.uefi = { + enable = lib.mkEnableOption "UEFI boot support"; + }; + + config = lib.mkIf cfg.enable { + my.system.boot.uefi.enable = true; + }; +} diff --git a/modules/features/cli/base.nix b/modules/features/cli/base.nix new file mode 100644 index 0000000..a119e47 --- /dev/null +++ b/modules/features/cli/base.nix @@ -0,0 +1,34 @@ +{ + lib, + config, + pkgs, + ... +}: +let + cfg = config.my.features.cli.base; +in +{ + options.my.features.cli.base = { + enable = lib.mkEnableOption "Base CLI configuration"; + sshServer = lib.mkEnableOption "OpenSSH server"; + }; + + config = lib.mkIf cfg.enable { + my.applications = { + btop.enable = true; + git.enable = true; + ssh.enable = true; + direnv.enable = true; + gnupg.enable = true; + openssh.enable = cfg.sshServer; + }; + + environment.systemPackages = with pkgs; [ + htop # Interactive Process Viewer + curl # Tool For Fetching Files With Links + wget # Tool For Fetching Files With Links + unzip # Tool For Handling .zip Files + unrar # Tool For Handling .rar Files + ]; + }; +} diff --git a/modules/features/cli/default.nix b/modules/features/cli/default.nix new file mode 100644 index 0000000..1a2a937 --- /dev/null +++ b/modules/features/cli/default.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./base.nix + ./interactive.nix + ./shell.nix + ]; +} diff --git a/modules/features/cli/interactive.nix b/modules/features/cli/interactive.nix new file mode 100644 index 0000000..0aa5699 --- /dev/null +++ b/modules/features/cli/interactive.nix @@ -0,0 +1,25 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.features.cli.interactive; +in +{ + options.my.features.cli.interactive = { + enable = lib.mkEnableOption "Interactive CLI tools (vim, btop, zellij)"; + }; + + config = lib.mkIf cfg.enable { + my.applications = { + vim.enable = true; + zellij.enable = true; + }; + + environment.systemPackages = with pkgs; [ + tio # A Simple TTY Terminal I/O Application + ]; + }; +} diff --git a/modules/features/cli/shell.nix b/modules/features/cli/shell.nix new file mode 100644 index 0000000..533c0e9 --- /dev/null +++ b/modules/features/cli/shell.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.cli.shell; +in +{ + options.my.features.cli.shell = { + enable = lib.mkEnableOption "Shell configuration (zsh)"; + }; + + config = lib.mkIf cfg.enable { + my.applications.zsh.enable = true; + }; +} diff --git a/modules/features/connect/bluetooth.nix b/modules/features/connect/bluetooth.nix new file mode 100644 index 0000000..f0f5cfd --- /dev/null +++ b/modules/features/connect/bluetooth.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.connect.bluetooth; +in +{ + options.my.features.connect.bluetooth = { + enable = lib.mkEnableOption "Bluetooth support"; + }; + + config = lib.mkIf cfg.enable { + my.system.hardware.bluetooth.enable = true; + }; +} diff --git a/modules/features/connect/default.nix b/modules/features/connect/default.nix new file mode 100644 index 0000000..412300c --- /dev/null +++ b/modules/features/connect/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./bluetooth.nix + ./wifi.nix + ]; +} diff --git a/modules/features/connect/wifi.nix b/modules/features/connect/wifi.nix new file mode 100644 index 0000000..e78e9aa --- /dev/null +++ b/modules/features/connect/wifi.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.connect.wifi; +in +{ + options.my.features.connect.wifi = { + enable = lib.mkEnableOption "WiFi (NetworkManager) support"; + }; + + config = lib.mkIf cfg.enable { + my.system.network.wifi.enable = true; + }; +} diff --git a/modules/features/default.nix b/modules/features/default.nix new file mode 100644 index 0000000..b3aa070 --- /dev/null +++ b/modules/features/default.nix @@ -0,0 +1,14 @@ +{ + imports = [ + ./application + ./boot + ./cli + ./connect + ./dev + ./gui + ./identity + ./network + ./services + ./storage + ]; +} diff --git a/modules/features/dev/agent.nix b/modules/features/dev/agent.nix new file mode 100644 index 0000000..a273de0 --- /dev/null +++ b/modules/features/dev/agent.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.dev.agent; +in +{ + options.my.features.dev.agent = { + enable = lib.mkEnableOption "AI coding agents (Claude Code)"; + }; + + config = lib.mkIf cfg.enable { + my.applications.claude.enable = true; + }; +} diff --git a/modules/features/dev/bun.nix b/modules/features/dev/bun.nix new file mode 100644 index 0000000..706e021 --- /dev/null +++ b/modules/features/dev/bun.nix @@ -0,0 +1,20 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.features.dev.bun; +in +{ + options.my.features.dev.bun = { + enable = lib.mkEnableOption "Bun JavaScript runtime"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + bun # A Fast JavaScript Runtime Like Node.js And Deno + ]; + }; +} diff --git a/modules/features/dev/default.nix b/modules/features/dev/default.nix new file mode 100644 index 0000000..c0875f3 --- /dev/null +++ b/modules/features/dev/default.nix @@ -0,0 +1,9 @@ +{ + imports = [ + ./agent.nix + ./bun.nix + ./java.nix + ./nix.nix + ./python.nix + ]; +} diff --git a/modules/features/dev/java.nix b/modules/features/dev/java.nix new file mode 100644 index 0000000..2b532e9 --- /dev/null +++ b/modules/features/dev/java.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.dev.java; +in +{ + options.my.features.dev.java = { + enable = lib.mkEnableOption "Java development environment"; + }; + + config = lib.mkIf cfg.enable { + my.applications.java.enable = true; + }; +} diff --git a/modules/features/dev/nix.nix b/modules/features/dev/nix.nix new file mode 100644 index 0000000..195670a --- /dev/null +++ b/modules/features/dev/nix.nix @@ -0,0 +1,20 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.features.dev.nix; +in +{ + options.my.features.dev.nix = { + enable = lib.mkEnableOption "Nix development tools (nil language server)"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + nil # Nix Language Server + ]; + }; +} diff --git a/modules/features/dev/python.nix b/modules/features/dev/python.nix new file mode 100644 index 0000000..47e06ce --- /dev/null +++ b/modules/features/dev/python.nix @@ -0,0 +1,21 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.features.dev.python; +in +{ + options.my.features.dev.python = { + enable = lib.mkEnableOption "Python development environment"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + python312 # Python 3.12 + uv # Universal Virtual Environment Manager For Python + ]; + }; +} diff --git a/modules/features/gui/audio.nix b/modules/features/gui/audio.nix new file mode 100644 index 0000000..d966cd8 --- /dev/null +++ b/modules/features/gui/audio.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.gui.audio; +in +{ + options.my.features.gui.audio = { + enable = lib.mkEnableOption "Audio support (PipeWire)"; + }; + + config = lib.mkIf cfg.enable { + my.system.audio.enable = true; + }; +} diff --git a/modules/features/gui/camera.nix b/modules/features/gui/camera.nix new file mode 100644 index 0000000..3236dd9 --- /dev/null +++ b/modules/features/gui/camera.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.gui.camera; +in +{ + options.my.features.gui.camera = { + enable = lib.mkEnableOption "Camera support"; + }; + + config = lib.mkIf cfg.enable { + my.system.camera.enable = true; + }; +} diff --git a/modules/features/gui/capture.nix b/modules/features/gui/capture.nix new file mode 100644 index 0000000..c0377dc --- /dev/null +++ b/modules/features/gui/capture.nix @@ -0,0 +1,22 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.features.gui.capture; +in +{ + options.my.features.gui.capture = { + enable = lib.mkEnableOption "Screen capture tools (slurp, grim, wf-recorder)"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + slurp # Tool for selecting a region of the screen + grim # Screenshot tool for Wayland + wf-recorder # Screen recorder for Wayland + ]; + }; +} diff --git a/modules/features/gui/default.nix b/modules/features/gui/default.nix new file mode 100644 index 0000000..63b1199 --- /dev/null +++ b/modules/features/gui/default.nix @@ -0,0 +1,13 @@ +{ + imports = [ + ./audio.nix + ./camera.nix + ./capture.nix + ./desktop.nix + ./editor.nix + ./file-manager.nix + ./graphic.nix + ./jp-input.nix + ./terminal.nix + ]; +} diff --git a/modules/features/gui/desktop.nix b/modules/features/gui/desktop.nix new file mode 100644 index 0000000..7787d27 --- /dev/null +++ b/modules/features/gui/desktop.nix @@ -0,0 +1,25 @@ +{ + lib, + config, + ... +}: +let + cfg = config.my.features.gui.desktop; +in +{ + options.my.features.gui.desktop = { + enable = lib.mkEnableOption "Niri Wayland compositor environment"; + }; + + config = lib.mkIf cfg.enable { + my.applications = { + gtk.enable = true; + niri.enable = true; + wayland.enable = true; + greetd.enable = true; + noctalia.enable = true; + swayidle.enable = true; + vicinae.enable = true; + }; + }; +} diff --git a/modules/features/gui/editor.nix b/modules/features/gui/editor.nix new file mode 100644 index 0000000..e10c20d --- /dev/null +++ b/modules/features/gui/editor.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.gui.editor; +in +{ + options.my.features.gui.editor = { + enable = lib.mkEnableOption "GUI code editor (VSCode)"; + }; + + config = lib.mkIf cfg.enable { + my.applications.vscode.enable = true; + }; +} diff --git a/modules/features/gui/file-manager.nix b/modules/features/gui/file-manager.nix new file mode 100644 index 0000000..50996cd --- /dev/null +++ b/modules/features/gui/file-manager.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.gui.fileManager; +in +{ + options.my.features.gui.fileManager = { + enable = lib.mkEnableOption "File manager (Nautilus)"; + }; + + config = lib.mkIf cfg.enable { + my.applications.nautilus.enable = true; + }; +} diff --git a/modules/features/gui/graphic.nix b/modules/features/gui/graphic.nix new file mode 100644 index 0000000..28eaecd --- /dev/null +++ b/modules/features/gui/graphic.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.gui.graphic; +in +{ + options.my.features.gui.graphic = { + enable = lib.mkEnableOption "GPU/graphics hardware acceleration"; + }; + + config = lib.mkIf cfg.enable { + my.system.hardware.gui.enable = true; + }; +} diff --git a/modules/features/gui/jp-input.nix b/modules/features/gui/jp-input.nix new file mode 100644 index 0000000..864f503 --- /dev/null +++ b/modules/features/gui/jp-input.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.gui.jpInput; +in +{ + options.my.features.gui.jpInput = { + enable = lib.mkEnableOption "Japanese input method (fcitx5)"; + }; + + config = lib.mkIf cfg.enable { + my.applications.fcitx5.enable = true; + }; +} diff --git a/modules/features/gui/terminal.nix b/modules/features/gui/terminal.nix new file mode 100644 index 0000000..85e4e5a --- /dev/null +++ b/modules/features/gui/terminal.nix @@ -0,0 +1,22 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.features.gui.terminal; +in +{ + options.my.features.gui.terminal = { + enable = lib.mkEnableOption "Terminal emulators (Ghostty, Alacritty)"; + }; + + config = lib.mkIf cfg.enable { + my.applications.ghostty.enable = true; + + environment.systemPackages = with pkgs; [ + alacritty # A GPU Accelerated Terminal Emulator + ]; + }; +} diff --git a/modules/features/identity/default.nix b/modules/features/identity/default.nix new file mode 100644 index 0000000..1f694c3 --- /dev/null +++ b/modules/features/identity/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./fingerprint.nix + ./ssh-default-key.nix + ]; +} diff --git a/modules/features/identity/fingerprint.nix b/modules/features/identity/fingerprint.nix new file mode 100644 index 0000000..b1d135e --- /dev/null +++ b/modules/features/identity/fingerprint.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.identity.fingerprint; +in +{ + options.my.features.identity.fingerprint = { + enable = lib.mkEnableOption "Fingerprint authentication"; + }; + + config = lib.mkIf cfg.enable { + my.system.fingerprint.enable = true; + }; +} diff --git a/modules/features/identity/ssh-default-key.nix b/modules/features/identity/ssh-default-key.nix new file mode 100644 index 0000000..c1da00a --- /dev/null +++ b/modules/features/identity/ssh-default-key.nix @@ -0,0 +1,31 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.features.identity.sshDefaultKey; +in +{ + options.my.features.identity.sshDefaultKey = { + enable = lib.mkEnableOption "Generate default SSH key (ed25519)"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf cfg.enable { + home.activation.generateSshKey = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + key="$HOME/.ssh/id_ed25519" + if [ ! -f "$key" ]; then + umask 077 + mkdir -p "$HOME/.ssh" + ${pkgs.openssh}/bin/ssh-keygen -t ed25519 -N "" -f "$key" \ + -C "moons@$(${pkgs.hostname}/bin/hostname || echo host)" + echo "Generated SSH key at $key" + fi + ''; + }; + } + ]; +} diff --git a/modules/features/network/default.nix b/modules/features/network/default.nix new file mode 100644 index 0000000..1f59251 --- /dev/null +++ b/modules/features/network/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./tailscale.nix + ]; +} diff --git a/modules/features/network/tailscale.nix b/modules/features/network/tailscale.nix new file mode 100644 index 0000000..495e5aa --- /dev/null +++ b/modules/features/network/tailscale.nix @@ -0,0 +1,31 @@ +{ lib, config, ... }: +let + cfg = config.my.features.network.tailscale; +in +{ + options.my.features.network.tailscale = { + enable = lib.mkEnableOption "Tailscale VPN"; + acceptDns = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Accept DNS configuration from Tailscale"; + }; + acceptRoutes = lib.mkOption { + type = lib.types.bool; + default = true; + description = "Accept subnet routes from Tailscale"; + }; + extraUpFlags = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ ]; + description = "Additional flags to pass to tailscale up"; + }; + }; + + config = lib.mkIf cfg.enable { + my.applications.tailscale = { + enable = true; + inherit (cfg) acceptDns acceptRoutes extraUpFlags; + }; + }; +} diff --git a/modules/features/services/container.nix b/modules/features/services/container.nix new file mode 100644 index 0000000..c26435b --- /dev/null +++ b/modules/features/services/container.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.services.container; +in +{ + options.my.features.services.container = { + enable = lib.mkEnableOption "Container runtime (Docker)"; + }; + + config = lib.mkIf cfg.enable { + my.applications.docker.enable = true; + }; +} diff --git a/modules/features/services/default.nix b/modules/features/services/default.nix new file mode 100644 index 0000000..e4e39fa --- /dev/null +++ b/modules/features/services/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./container.nix + ./kde.nix + ]; +} diff --git a/modules/features/services/kde.nix b/modules/features/services/kde.nix new file mode 100644 index 0000000..1c5bcff --- /dev/null +++ b/modules/features/services/kde.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.services.kde; +in +{ + options.my.features.services.kde = { + enable = lib.mkEnableOption "KDE Connect"; + }; + + config = lib.mkIf cfg.enable { + my.applications.kde.enable = true; + }; +} diff --git a/modules/features/storage/default.nix b/modules/features/storage/default.nix new file mode 100644 index 0000000..0b3cf91 --- /dev/null +++ b/modules/features/storage/default.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./nfs-client.nix + ]; +} diff --git a/modules/features/storage/nfs-client.nix b/modules/features/storage/nfs-client.nix new file mode 100644 index 0000000..5a92e2f --- /dev/null +++ b/modules/features/storage/nfs-client.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.storage.nfsClient; +in +{ + options.my.features.storage.nfsClient = { + enable = lib.mkEnableOption "NFS client support"; + }; + + config = lib.mkIf cfg.enable { + my.system.boot.nfs.enable = true; + }; +} diff --git a/modules/system/secure-boot.nix b/modules/system/secure-boot.nix index 0d393f2..8eda80d 100644 --- a/modules/system/secure-boot.nix +++ b/modules/system/secure-boot.nix @@ -1,4 +1,5 @@ { + pkgs, inputs, lib, config, @@ -27,5 +28,9 @@ in enable = true; pkiBundle = "/var/lib/sbctl"; }; + + environment.systemPackages = with pkgs; [ + sbctl # A tool to manage UEFI Secure Boot keys and signatures + ]; }; } diff --git a/profiles/cli-minimal.nix b/profiles/cli-minimal.nix index 958f762..40eacc6 100644 --- a/profiles/cli-minimal.nix +++ b/profiles/cli-minimal.nix @@ -16,13 +16,6 @@ environment.systemPackages = with pkgs; [ nil # Nix Language Server - docker # Containerization Platform - tio # A Simple TTY Terminal I/O Application - sqlite # Vscode Raycast Extension Dependency - oxker # Docker TUI Tool - jdk25 # Java Development Kit 25 - maven # Java Build Tool - gradle # Java Build Tool python312 # Python 3.12 uv # Universal Virtual Environment Manager For Python bun # A Fast JavaScript Runtime Like Node.js And Deno diff --git a/profiles/gui.nix b/profiles/gui.nix index b0f2026..2c2a556 100644 --- a/profiles/gui.nix +++ b/profiles/gui.nix @@ -27,14 +27,7 @@ environment.systemPackages = with pkgs; [ tuigreet # The Login Manager (Sometimes Referred To As Display Manager) - uwsm # Universal Wayland Session Manager (optional must be enabled) - alacritty # A GPU Accelerated Terminal Emulator fuzzel # A Simple And Lightweight Application Launcher - unstable.ghostty # A Fast And Minimal Terminal Emulator For Wayland - xwayland-satellite # A Helper For Running X11 Applications In Wayland - slurp # A Tool For Selecting A Region Of The Screen - grim # A Tool For Taking Screenshots In Wayland with slurp - wf-recorder # A Screen Recorder For Wayland ]; home-manager.users.${username}.imports = [ ]; diff --git a/profiles/interfaces/cli-interactive.nix b/profiles/interfaces/cli-interactive.nix new file mode 100644 index 0000000..e69de29 diff --git a/profiles/interfaces/cli-minimal.nix b/profiles/interfaces/cli-minimal.nix new file mode 100644 index 0000000..e69de29 diff --git a/profiles/interfaces/gui.nix b/profiles/interfaces/gui.nix new file mode 100644 index 0000000..e69de29 diff --git a/profiles/platforms/desktop.nix b/profiles/platforms/desktop.nix new file mode 100644 index 0000000..e69de29 diff --git a/profiles/platforms/laptop.nix b/profiles/platforms/laptop.nix new file mode 100644 index 0000000..e69de29 diff --git a/profiles/platforms/thinkpad.nix b/profiles/platforms/thinkpad.nix new file mode 100644 index 0000000..e69de29 diff --git a/profiles/platforms/vm.nix b/profiles/platforms/vm.nix new file mode 100644 index 0000000..e69de29 diff --git a/profiles/workloads/dev.nix b/profiles/workloads/dev.nix new file mode 100644 index 0000000..e69de29 diff --git a/profiles/workloads/ops.nix b/profiles/workloads/ops.nix new file mode 100644 index 0000000..e69de29 diff --git a/profiles/workloads/srv.nix b/profiles/workloads/srv.nix new file mode 100644 index 0000000..e69de29 From b9dd5bb6bba7260e988da16218d677cd873fc483 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Sun, 31 May 2026 13:26:00 +0900 Subject: [PATCH 17/39] fix --- hosts/default.nix | 11 +++++--- profiles/base.nix | 36 ------------------------- profiles/cli-minimal.nix | 28 ------------------- profiles/cli-vm.nix | 7 ----- profiles/desktop.nix | 7 ----- profiles/gui.nix | 34 ----------------------- profiles/interfaces/cli-interactive.nix | 7 +++++ profiles/interfaces/cli-minimal.nix | 9 +++++++ profiles/interfaces/gui.nix | 18 +++++++++++++ profiles/laptop.nix | 21 --------------- profiles/platforms/desktop.nix | 3 +++ profiles/platforms/laptop.nix | 12 +++++++++ profiles/platforms/thinkpad.nix | 7 +++++ profiles/platforms/vm.nix | 6 +++++ profiles/workloads/dev.nix | 13 +++++++++ profiles/workloads/ops.nix | 0 profiles/workloads/personal.nix | 6 +++++ profiles/workloads/srv.nix | 7 +++++ 18 files changed, 95 insertions(+), 137 deletions(-) delete mode 100644 profiles/base.nix delete mode 100644 profiles/cli-minimal.nix delete mode 100644 profiles/cli-vm.nix delete mode 100644 profiles/desktop.nix delete mode 100644 profiles/gui.nix delete mode 100644 profiles/laptop.nix delete mode 100644 profiles/workloads/ops.nix create mode 100644 profiles/workloads/personal.nix diff --git a/hosts/default.nix b/hosts/default.nix index 7d824a3..fb18e47 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -21,7 +21,7 @@ let { host, system, - profile ? null, + profiles ? [ ], extraModules ? [ ], }: assert lib.assertMsg (lib.elem system config.systems) @@ -32,9 +32,9 @@ let { nixpkgs.config.allowUnfree = true; } - ../profiles/${profile}.nix ./${host}/default.nix ] + ++ map (p: ../profiles/${p}.nix) profiles ++ extraModules; specialArgs = { inherit inputs username unstable; }; }; @@ -44,8 +44,11 @@ in nix-example = mkSystem { host = "nix-example"; system = "x86_64-linux"; - profile = "base"; - extraModules = [ ]; + profiles = [ + "interfaces/cli-interactive" + "platforms/vm" + "workloads/dev" + ]; }; }; } diff --git a/profiles/base.nix b/profiles/base.nix deleted file mode 100644 index de6a54b..0000000 --- a/profiles/base.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - pkgs, - username, - ... -}: -{ - imports = [ - ../modules/system/boot - ../modules/system/caches.nix - ../modules/system/gc.nix - ../modules/system/hardware - ../modules/system/network - ]; - - programs = { - zsh.enable = true; - gnupg.agent = { - enable = true; - enableSSHSupport = false; - }; - }; - - environment.systemPackages = with pkgs; [ - htop - btop # Simple Terminal Based System Monitor - unrar # Tool For Handling .rar Files - unzip # Tool For Handling .zip Files - wget # Tool For Fetching Files With Links - curl # Tool For Fetching Files With Links - git # Version Control System - unstable.msedit # Microsoft Editor - ]; - - home-manager.users.${username}.imports = [ - ]; -} diff --git a/profiles/cli-minimal.nix b/profiles/cli-minimal.nix deleted file mode 100644 index 40eacc6..0000000 --- a/profiles/cli-minimal.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - pkgs, - username, - ... -}: -{ - imports = [ - ./base.nix - ]; - programs = { - java = { - enable = true; - package = pkgs.jdk25; - }; - }; - - environment.systemPackages = with pkgs; [ - nil # Nix Language Server - python312 # Python 3.12 - uv # Universal Virtual Environment Manager For Python - bun # A Fast JavaScript Runtime Like Node.js And Deno - unstable.claude-code # Anthropic's AI Assistant - unstable.codex # OpenAI's Code Generation Model - unstable.opencode # Coding AI Assistant - ]; - - home-manager.users.${username}.imports = [ ]; -} diff --git a/profiles/cli-vm.nix b/profiles/cli-vm.nix deleted file mode 100644 index db2bd7e..0000000 --- a/profiles/cli-vm.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ username, ... }: -{ - imports = [ - ./cli-minimal.nix - ]; - home-manager.users.${username}.imports = [ ]; -} diff --git a/profiles/desktop.nix b/profiles/desktop.nix deleted file mode 100644 index d105aab..0000000 --- a/profiles/desktop.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ username, ... }: -{ - imports = [ - ./gui.nix - ]; - home-manager.users.${username}.imports = [ ]; -} diff --git a/profiles/gui.nix b/profiles/gui.nix deleted file mode 100644 index 2c2a556..0000000 --- a/profiles/gui.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - pkgs, - username, - ... -}: -{ - imports = [ - ./cli-minimal.nix - ../modules/system/hardware/gui.nix - ../modules/system/camera.nix - ../modules/system/fonts.nix - ../modules/applications/greetd.nix - ../modules/applications/fcitx5.nix - ../modules/applications/kde.nix - ]; - - my.applications = { - niri.enable = true; - noctalia.enable = true; - wayland.enable = true; - }; - - programs = { - dconf.enable = true; - seahorse.enable = true; - }; - - environment.systemPackages = with pkgs; [ - tuigreet # The Login Manager (Sometimes Referred To As Display Manager) - fuzzel # A Simple And Lightweight Application Launcher - ]; - - home-manager.users.${username}.imports = [ ]; -} diff --git a/profiles/interfaces/cli-interactive.nix b/profiles/interfaces/cli-interactive.nix index e69de29..6703a38 100644 --- a/profiles/interfaces/cli-interactive.nix +++ b/profiles/interfaces/cli-interactive.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./cli-minimal.nix + ]; + + my.features.cli.interactive.enable = true; +} diff --git a/profiles/interfaces/cli-minimal.nix b/profiles/interfaces/cli-minimal.nix index e69de29..e3f2f38 100644 --- a/profiles/interfaces/cli-minimal.nix +++ b/profiles/interfaces/cli-minimal.nix @@ -0,0 +1,9 @@ +{ + my.features = { + cli = { + base.enable = true; + shell.enable = true; + }; + identity.sshDefaultKey.enable = true; + }; +} diff --git a/profiles/interfaces/gui.nix b/profiles/interfaces/gui.nix index e69de29..25f3e5f 100644 --- a/profiles/interfaces/gui.nix +++ b/profiles/interfaces/gui.nix @@ -0,0 +1,18 @@ +{ + imports = [ + ./cli-interactive.nix + ]; + + my.features = { + gui = { + desktop.enable = true; + terminal.enable = true; + audio.enable = true; + jpInput.enable = true; + graphic.enable = true; + capture.enable = true; + fileManager.enable = true; + }; + services.kde.enable = true; + }; +} diff --git a/profiles/laptop.nix b/profiles/laptop.nix deleted file mode 100644 index 3dde5db..0000000 --- a/profiles/laptop.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - pkgs, - username, - ... -}: -{ - imports = [ - ./gui.nix - ../modules/system/hardware/bluetooth.nix - ../modules/system/fingerprint.nix - ../modules/system/network/wifi.nix - ../modules/system/power.nix - ]; - - environment.systemPackages = with pkgs; [ - tailscale # Zero-Config VPN - sbctl # Secure Boot Key Management Tool - ]; - - home-manager.users.${username}.imports = [ ]; -} diff --git a/profiles/platforms/desktop.nix b/profiles/platforms/desktop.nix index e69de29..395d7d0 100644 --- a/profiles/platforms/desktop.nix +++ b/profiles/platforms/desktop.nix @@ -0,0 +1,3 @@ +{ + my.features.boot.uefi.enable = true; +} diff --git a/profiles/platforms/laptop.nix b/profiles/platforms/laptop.nix index e69de29..20f357a 100644 --- a/profiles/platforms/laptop.nix +++ b/profiles/platforms/laptop.nix @@ -0,0 +1,12 @@ +{ + my.features = { + boot.power.enable = true; + connect = { + wifi.enable = true; + bluetooth.enable = true; + }; + gui.camera.enable = true; + identity.fingerprint.enable = true; + network.tailscale.enable = true; + }; +} diff --git a/profiles/platforms/thinkpad.nix b/profiles/platforms/thinkpad.nix index e69de29..a33c6dd 100644 --- a/profiles/platforms/thinkpad.nix +++ b/profiles/platforms/thinkpad.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./laptop.nix + ]; + + my.features.boot.secureBoot.enable = true; +} diff --git a/profiles/platforms/vm.nix b/profiles/platforms/vm.nix index e69de29..f95077f 100644 --- a/profiles/platforms/vm.nix +++ b/profiles/platforms/vm.nix @@ -0,0 +1,6 @@ +{ + my.features = { + boot.uefi.enable = true; + storage.nfsClient.enable = true; + }; +} diff --git a/profiles/workloads/dev.nix b/profiles/workloads/dev.nix index e69de29..72376c7 100644 --- a/profiles/workloads/dev.nix +++ b/profiles/workloads/dev.nix @@ -0,0 +1,13 @@ +{ + my.features = { + dev = { + agent.enable = true; + nix.enable = true; + python.enable = true; + bun.enable = true; + java.enable = true; + }; + gui.editor.enable = true; + services.container.enable = true; + }; +} diff --git a/profiles/workloads/ops.nix b/profiles/workloads/ops.nix deleted file mode 100644 index e69de29..0000000 diff --git a/profiles/workloads/personal.nix b/profiles/workloads/personal.nix new file mode 100644 index 0000000..1b9da2a --- /dev/null +++ b/profiles/workloads/personal.nix @@ -0,0 +1,6 @@ +{ + my.features.application = { + browser.enable = true; + communication.enable = true; + }; +} diff --git a/profiles/workloads/srv.nix b/profiles/workloads/srv.nix index e69de29..f0c433c 100644 --- a/profiles/workloads/srv.nix +++ b/profiles/workloads/srv.nix @@ -0,0 +1,7 @@ +{ + my.features = { + cli.base.sshServer = true; + network.tailscale.enable = true; + services.container.enable = true; + }; +} From 4044c52c7a300e8c36607570b9b7dfdcbe463446 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Sun, 31 May 2026 14:07:26 +0900 Subject: [PATCH 18/39] fix --- hosts/default.nix | 10 +++++- modules/applications/gtk/default.nix | 2 -- modules/applications/java/default.nix | 2 -- modules/applications/ssh/default.nix | 2 -- modules/applications/vim/home/default.nix | 5 +++ modules/applications/vscode/home.nix | 2 +- modules/applications/zsh/default.nix | 2 -- modules/features/identity/ssh-default-key.nix | 31 ++++++++++--------- modules/integrations/home-manager.nix | 2 ++ modules/system/boot/nfs.nix | 2 +- modules/system/hardware/bluetooth.nix | 12 +++---- 11 files changed, 39 insertions(+), 33 deletions(-) diff --git a/hosts/default.nix b/hosts/default.nix index fb18e47..4b8d74c 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -32,11 +32,19 @@ let { nixpkgs.config.allowUnfree = true; } + ../modules ./${host}/default.nix ] ++ map (p: ../profiles/${p}.nix) profiles ++ extraModules; - specialArgs = { inherit inputs username unstable; }; + specialArgs = { + inherit + inputs + username + unstable + host + ; + }; }; in { diff --git a/modules/applications/gtk/default.nix b/modules/applications/gtk/default.nix index 9c8d388..bc3bb9b 100644 --- a/modules/applications/gtk/default.nix +++ b/modules/applications/gtk/default.nix @@ -14,8 +14,6 @@ in options.my.applications.gtk = { enable = lib.mkEnableOption "GTK theme configuration"; - system.enable = lib.mkEnableOption "GTK system configuration"; - homeManager.enable = lib.mkEnableOption "GTK home-manager configuration"; }; config = lib.mkIf cfg.enable { diff --git a/modules/applications/java/default.nix b/modules/applications/java/default.nix index 253a984..ef8ecb5 100644 --- a/modules/applications/java/default.nix +++ b/modules/applications/java/default.nix @@ -14,8 +14,6 @@ in options.my.applications.java = { enable = lib.mkEnableOption "Java runtime"; - system.enable = lib.mkEnableOption "Java system configuration"; - homeManager.enable = lib.mkEnableOption "Java home-manager configuration"; }; config = lib.mkIf cfg.enable { diff --git a/modules/applications/ssh/default.nix b/modules/applications/ssh/default.nix index 89e6c85..f3debb2 100644 --- a/modules/applications/ssh/default.nix +++ b/modules/applications/ssh/default.nix @@ -14,8 +14,6 @@ in options.my.applications.ssh = { enable = lib.mkEnableOption "OpenSSH client"; - system.enable = lib.mkEnableOption "SSH system configuration"; - homeManager.enable = lib.mkEnableOption "SSH home-manager configuration"; defaultIdentityFile = lib.mkOption { type = lib.types.str; diff --git a/modules/applications/vim/home/default.nix b/modules/applications/vim/home/default.nix index 59ab1f1..b2a1060 100644 --- a/modules/applications/vim/home/default.nix +++ b/modules/applications/vim/home/default.nix @@ -30,6 +30,11 @@ in viAlias = true; withNodeJs = true; + nixpkgs = { + source = pkgs.path; + config.allowUnfree = true; + }; + extraPackages = with pkgs; [ git ripgrep diff --git a/modules/applications/vscode/home.nix b/modules/applications/vscode/home.nix index d61a0b0..c744a45 100644 --- a/modules/applications/vscode/home.nix +++ b/modules/applications/vscode/home.nix @@ -44,7 +44,7 @@ let name = "hadolint"; publisher = "exiasr"; version = "1.1.2"; - hash = "sha256-6GO1f8SP4CE8yYl87/tm60FdGHqHsJA4c2B6ukVdpgM="; + hash = "sha256-6GO1f8SP4CE8yYl87/tm60FdGHqHsJA4c2B6UKVdpgM="; } { name = "chatgpt"; diff --git a/modules/applications/zsh/default.nix b/modules/applications/zsh/default.nix index 10ee585..ce95586 100644 --- a/modules/applications/zsh/default.nix +++ b/modules/applications/zsh/default.nix @@ -14,8 +14,6 @@ in options.my.applications.zsh = { enable = lib.mkEnableOption "Zsh shell"; - system.enable = lib.mkEnableOption "Zsh system configuration"; - homeManager.enable = lib.mkEnableOption "Zsh home-manager configuration"; }; config = lib.mkIf cfg.enable { diff --git a/modules/features/identity/ssh-default-key.nix b/modules/features/identity/ssh-default-key.nix index c1da00a..eeef32b 100644 --- a/modules/features/identity/ssh-default-key.nix +++ b/modules/features/identity/ssh-default-key.nix @@ -13,19 +13,22 @@ in }; config.home-manager.sharedModules = [ - { - config = lib.mkIf cfg.enable { - home.activation.generateSshKey = lib.hm.dag.entryAfter [ "writeBoundary" ] '' - key="$HOME/.ssh/id_ed25519" - if [ ! -f "$key" ]; then - umask 077 - mkdir -p "$HOME/.ssh" - ${pkgs.openssh}/bin/ssh-keygen -t ed25519 -N "" -f "$key" \ - -C "moons@$(${pkgs.hostname}/bin/hostname || echo host)" - echo "Generated SSH key at $key" - fi - ''; - }; - } + ( + { lib, ... }: + { + config = lib.mkIf cfg.enable { + home.activation.generateSshKey = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + key="$HOME/.ssh/id_ed25519" + if [ ! -f "$key" ]; then + umask 077 + mkdir -p "$HOME/.ssh" + ${pkgs.openssh}/bin/ssh-keygen -t ed25519 -N "" -f "$key" \ + -C "moons@$(${pkgs.hostname}/bin/hostname || echo host)" + echo "Generated SSH key at $key" + fi + ''; + }; + } + ) ]; } diff --git a/modules/integrations/home-manager.nix b/modules/integrations/home-manager.nix index 8dde697..600f1d4 100644 --- a/modules/integrations/home-manager.nix +++ b/modules/integrations/home-manager.nix @@ -15,6 +15,8 @@ backupFileExtension = "backup"; users.${username} = { + nixpkgs.config.allowUnfree = true; + home = { inherit username; homeDirectory = "/home/${username}"; diff --git a/modules/system/boot/nfs.nix b/modules/system/boot/nfs.nix index 7a84414..7c9bc27 100644 --- a/modules/system/boot/nfs.nix +++ b/modules/system/boot/nfs.nix @@ -13,7 +13,7 @@ in config = lib.mkIf cfg.enable { boot.supportedFilesystems = [ "nfs" ]; - fuse.userAllowOther = true; + programs.fuse.userAllowOther = true; services.rpcbind.enable = true; }; } diff --git a/modules/system/hardware/bluetooth.nix b/modules/system/hardware/bluetooth.nix index f3685b7..6b0f8a8 100644 --- a/modules/system/hardware/bluetooth.nix +++ b/modules/system/hardware/bluetooth.nix @@ -12,15 +12,11 @@ in }; config = lib.mkIf cfg.enable { - hardware = { - bluetooth.enable = true; - bluetooth.powerOnBoot = true; + hardware.bluetooth = { + enable = true; + powerOnBoot = true; }; - services = { - bluetooth.enable = true; - bluetooth.startWhenNeeded = true; - blueman.enable = true; - }; + services.blueman.enable = true; }; } From 7203c1ccf2474c5fd926721c3c9c278a10a92e72 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Sun, 31 May 2026 14:29:21 +0900 Subject: [PATCH 19/39] fix --- modules/applications/chrome.nix | 2 -- modules/applications/slack.nix | 2 -- modules/applications/ssh/home.nix | 6 +++--- modules/applications/vscode/home.nix | 2 -- modules/applications/zoom.nix | 2 -- modules/features/dev/python.nix | 2 ++ modules/integrations/home-manager.nix | 2 -- 7 files changed, 5 insertions(+), 13 deletions(-) diff --git a/modules/applications/chrome.nix b/modules/applications/chrome.nix index 29a22e1..8e6acd8 100644 --- a/modules/applications/chrome.nix +++ b/modules/applications/chrome.nix @@ -13,8 +13,6 @@ in }; config = lib.mkIf cfg.enable { - nixpkgs.config.allowUnfree = true; - home-manager.sharedModules = [ { home.packages = with pkgs; [ diff --git a/modules/applications/slack.nix b/modules/applications/slack.nix index 703e417..f52e68a 100644 --- a/modules/applications/slack.nix +++ b/modules/applications/slack.nix @@ -13,8 +13,6 @@ in }; config = lib.mkIf cfg.enable { - nixpkgs.config.allowUnfreePredicate = pkg: lib.getName pkg == "slack"; - home-manager.sharedModules = [ { home.packages = with pkgs; [ diff --git a/modules/applications/ssh/home.nix b/modules/applications/ssh/home.nix index 19f7233..e0e34b7 100644 --- a/modules/applications/ssh/home.nix +++ b/modules/applications/ssh/home.nix @@ -24,10 +24,10 @@ in enable = true; enableDefaultConfig = false; - matchBlocks = cfg.matchBlocks // { + settings = cfg.matchBlocks // { "*" = { - identityFile = cfg.defaultIdentityFile; - extraOptions.AddKeysToAgent = cfg.addKeysToAgent; + IdentityFile = cfg.defaultIdentityFile; + AddKeysToAgent = cfg.addKeysToAgent; }; }; }; diff --git a/modules/applications/vscode/home.nix b/modules/applications/vscode/home.nix index c744a45..ab8286a 100644 --- a/modules/applications/vscode/home.nix +++ b/modules/applications/vscode/home.nix @@ -261,8 +261,6 @@ in }; config = lib.mkIf cfg.enable { - nixpkgs.config.allowUnfree = true; - home-manager.sharedModules = [ { programs.vscode = { diff --git a/modules/applications/zoom.nix b/modules/applications/zoom.nix index ce74f17..5e78408 100644 --- a/modules/applications/zoom.nix +++ b/modules/applications/zoom.nix @@ -13,8 +13,6 @@ in }; config = lib.mkIf cfg.enable { - nixpkgs.config.allowUnfreePredicate = pkg: lib.getName pkg == "zoom-us"; - home-manager.sharedModules = [ { home.packages = with pkgs; [ diff --git a/modules/features/dev/python.nix b/modules/features/dev/python.nix index 47e06ce..9da0595 100644 --- a/modules/features/dev/python.nix +++ b/modules/features/dev/python.nix @@ -13,6 +13,8 @@ in }; config = lib.mkIf cfg.enable { + documentation.doc.enable = false; + environment.systemPackages = with pkgs; [ python312 # Python 3.12 uv # Universal Virtual Environment Manager For Python diff --git a/modules/integrations/home-manager.nix b/modules/integrations/home-manager.nix index 600f1d4..8dde697 100644 --- a/modules/integrations/home-manager.nix +++ b/modules/integrations/home-manager.nix @@ -15,8 +15,6 @@ backupFileExtension = "backup"; users.${username} = { - nixpkgs.config.allowUnfree = true; - home = { inherit username; homeDirectory = "/home/${username}"; From a273cd9d5482aff11dd2d5e874cd2f8f68a78a20 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Sun, 31 May 2026 14:39:27 +0900 Subject: [PATCH 20/39] fix --- hosts/default.nix | 1 + profiles/workloads/remote.nix | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 profiles/workloads/remote.nix diff --git a/hosts/default.nix b/hosts/default.nix index 4b8d74c..094677c 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -56,6 +56,7 @@ in "interfaces/cli-interactive" "platforms/vm" "workloads/dev" + "workloads/remote" ]; }; }; diff --git a/profiles/workloads/remote.nix b/profiles/workloads/remote.nix new file mode 100644 index 0000000..78d47c9 --- /dev/null +++ b/profiles/workloads/remote.nix @@ -0,0 +1,5 @@ +{ + my.features = { + cli.base.sshServer = true; + }; +} From 2d2f535aee5f4ecdb74612789971e0c60743f2ed Mon Sep 17 00:00:00 2001 From: moons-14 Date: Sun, 31 May 2026 14:51:17 +0900 Subject: [PATCH 21/39] feat --- AGENTS.md | 376 ++++++++++++++++++++++++++---- modules/applications/codex.nix | 21 ++ modules/applications/default.nix | 2 + modules/applications/opencode.nix | 21 ++ modules/features/dev/agent.nix | 8 +- 5 files changed, 383 insertions(+), 45 deletions(-) create mode 100644 modules/applications/codex.nix create mode 100644 modules/applications/opencode.nix diff --git a/AGENTS.md b/AGENTS.md index 9611f51..265287a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,15 +1,14 @@ # AGENTS.md -NixOS + Home Manager flake。v2 リセット中 — flake-parts 導入済み、outputs はまだスケルトンのみ。 +NixOS + Home Manager flake (v2)。flake-parts ベース。 ## Commands ```sh -# flake の更新 -nix flake update - -# フォーマット -nix fmt +nix flake update # flake の更新 +nix fmt # フォーマット +sudo nixos-rebuild build --flake .# # ビルド確認 +sudo nixos-rebuild switch --flake .# # 適用 ``` ## Conventions @@ -17,67 +16,170 @@ nix fmt - User: `moons`, locale: `ja_JP.UTF-8`, timezone: `Asia/Tokyo` - Commits: conventional commits (`feat:`, `chore:`, `fix:`, etc.) - リモート: `git@github.com:moons-14/dotfiles.git` -- `modules/system/` や `modules/applications/` に新しいファイルを追加した際は、必ず同ディレクトリの `default.nix` の `imports` に追加する -- `environment.systemPackages` にパッケージを追加する際は、パッケージ名の横に簡単な説明をコメントで追加する +- `environment.systemPackages` にパッケージを追加する際はパッケージ名の横に簡単な説明をコメントで追加する +- 警告を抑制する設定は書かない。根本原因を調査して修正する +- home-manager の `sharedModules` 内で `lib.hm.*` を使う場合は、そのモジュール関数の引数で `lib` を受け取る必要がある(NixOSモジュールの `lib` とは別スコープ) +- `useGlobalPkgs = true` なので、home-manager 内で `nixpkgs.config` を設定しない(NixOSレベルで一括設定) +- `allowUnfree` は `hosts/default.nix` でグローバルに設定済み。各モジュールで個別設定しない -## Module Structure +## Architecture -### `modules/system/` +``` +flake.nix +└── hosts/default.nix # mkSystem でホスト構成を生成 + ├── modules/ # 全モジュール(常にインポートされる) + │ ├── applications/ # アプリケーション設定 + │ ├── system/ # システム設定 + │ ├── drivers/ # ドライバ設定 + │ ├── features/ # 機能バンドル(application/systemを束ねる) + │ └── integrations/ # home-manager 統合 + └── profiles/ # ホストごとに有効化するfeaturesの組み合わせ + ├── interfaces/ # 操作インターフェース (CLI/GUI) + ├── platforms/ # ハードウェア (desktop/laptop/vm) + └── workloads/ # 用途 (dev/personal/srv) +``` -システムレベル(NixOS)の設定。OS 全体に影響する設定を配置する。 +### 評価の流れ -- 例: boot, hardware, network, user, locale, fonts, power, secure-boot, caches, gc, version +``` +profile (featuresの有効化) + → features (application/systemの有効化 + パッケージ追加) + → applications (system.nix + home.nix) + → system (NixOS設定) +``` -### `modules/applications/` +## Layer Design -アプリケーション固有の設定。ユーザーが個別に有効/無効を切り替えたいアプリケーションを配置する。 +### `modules/system/` — NixOS システム設定 -- 例: niri, noctalia, greetd, fcitx5, kde, wayland +OS全体に影響する設定。`config.my.system.*` namespace。 -### Module Pattern +- boot, hardware, network, user, locale, fonts, power, secure-boot, gc, version +- 常にインポートされるが、`enable` オプションで実効性を制御 +- home-manager の設定は含めない -`modules/system/` と `modules/applications/` のモジュールは、デフォルトで `config.my.*` namespace で有効/無効を切り替えられる仕組みにする。 +### `modules/applications/` — アプリケーション設定 -#### Simple Module (NixOS のみ) +個別に有効/無効を切り替えたいアプリケーション。`config.my.applications.*` namespace。 -home-manager の設定を含まないモジュール: +- NixOS設定のみ、または NixOS + Home Manager の両方 +- Complex Module は system.nix と home.nix に分離 + +### `modules/features/` — 機能バンドル + +application や system より抽象度の高い「機能」単位で、複数の application/system を束ねて有効化する層。`config.my.features.*` namespace。 + +**features がやること:** + +1. 複数の `my.applications.*.enable` / `my.system.*.enable` をまとめて有効化 +2. application/system に属さないパッケージや設定を直接記述(`environment.systemPackages`、`home.activation` 等) +3. 追加オプションの受け渡し(例: tailscale の `acceptDns` を feature から application に passthrough) + +**features がやらないこと:** + +- 個別アプリケーションの詳細設定(それは applications 層の責務) + +### `profiles/` — ホスト構成 + +features の `enable` を指定するだけの薄い層。ロジックは書かない。 + +| カテゴリ | 役割 | 例 | +| ------------- | -------------------- | --------------------------------- | +| `interfaces/` | 操作インターフェース | cli-minimal, cli-interactive, gui | +| `platforms/` | ハードウェア固有設定 | desktop, laptop, thinkpad, vm | +| `workloads/` | 用途・ワークロード | dev, personal, srv | + +profiles は継承可能: ```nix +# cli-interactive.nix { - lib, - config, - ... -}: + imports = [ ./cli-minimal.nix ]; + my.features.cli.interactive.enable = true; +} +``` + +### `hosts/` — ホスト定義 + +`mkSystem` でホストを定義。profiles のリストを指定: + +```nix +nix-example = mkSystem { + host = "nix-example"; + system = "x86_64-linux"; + profiles = [ + "interfaces/cli-interactive" + "platforms/vm" + "workloads/dev" + ]; +}; +``` + +`specialArgs` で `inputs`, `username`, `unstable`, `host` が全モジュールに渡される。 + +## Module Patterns + +### Simple Module(NixOS のみ) + +home-manager の設定を含まない。1ファイルで完結: + +```nix +# modules/system/audio.nix +{ lib, config, ... }: let - cfg = config.my..; + cfg = config.my.system.audio; in { - options.my.. = { - enable = lib.mkEnableOption ""; + options.my.system.audio = { + enable = lib.mkEnableOption "Audio support (PipeWire)"; }; config = lib.mkIf cfg.enable { - # configuration here + # NixOS設定をここに書く }; } ``` -- `my.system.*` — system モジュール用 -- `my.applications.*` — applications モジュール用 +### Simple Module(Home Manager のみ) -#### Complex Module (NixOS + Home Manager) +NixOS設定を含まず、home-manager のみ: -home-manager の設定も含むモジュールは3つのフラグを設定する: +```nix +# modules/applications/zoom.nix +{ pkgs, lib, config, ... }: +let + cfg = config.my.applications.zoom; +in +{ + options.my.applications.zoom = { + enable = lib.mkEnableOption "Zoom video conferencing"; + }; + + config = lib.mkIf cfg.enable { + home-manager.sharedModules = [ + { + home.packages = with pkgs; [ + zoom-us # Video conferencing application + ]; + } + ]; + }; +} +``` + +### Complex Module(NixOS + Home Manager) + +ディレクトリ構造で system と home を分離: ``` modules/applications// -├── default.nix # my.applications..enable (マスター) -├── system.nix # my.applications..system.enable -├── home.nix # my.applications..homeManager.enable +├── default.nix # マスター enable + imports +├── system.nix # NixOS 設定 +├── home.nix # Home Manager 設定 └── (other files) # 設定ファイル等 ``` -`default.nix`: +**default.nix** — `enable` のみ宣言。`system.enable`/`homeManager.enable` は sub-file に任せる: ```nix { @@ -89,17 +191,15 @@ let cfg = config.my.applications.; in { + imports = [ + ./home.nix + ./system.nix + ]; + options.my.applications. = { enable = lib.mkEnableOption ""; - system.enable = lib.mkEnableOption " system configuration"; - homeManager.enable = lib.mkEnableOption " home-manager configuration"; }; - imports = [ - ./system.nix - ./home.nix - ]; - config = lib.mkIf cfg.enable { my.applications..system.enable = lib.mkDefault true; my.applications..homeManager.enable = lib.mkDefault true; @@ -107,4 +207,194 @@ in } ``` -マスターの `enable` を有効にすると、`lib.mkDefault` で system と homeManager の両方が有効化される。個別に無効化も可能。 +**system.nix:** + +```nix +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications..system; +in +{ + options.my.applications..system = { + enable = lib.mkEnableOption " system configuration"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + # Description + ]; + }; +} +``` + +**home.nix** — `home-manager.sharedModules` を使用: + +```nix +{ + lib, + config, + ... +}: +let + cfg = config.my.applications.; + hmCfg = config.my.applications..homeManager; +in +{ + options.my.applications..homeManager = { + enable = lib.mkEnableOption " home-manager configuration"; + }; + + config.home-manager.sharedModules = [ + { + config = lib.mkIf hmCfg.enable { + # home-manager 設定をここに書く + }; + } + ]; +} +``` + +**注意点:** + +- `default.nix` では `enable` のみ宣言。`system.enable`/`homeManager.enable` は `system.nix`/`home.nix` で宣言する(重複宣言エラー回避) +- home.nix で親の `cfg` を参照する場合は `cfg` と `hmCfg` の両方を let で定義 +- Complex Module の home-manager 設定は `home-manager.sharedModules` で記述(`home-manager.users.` は使わない) + +### Feature Module + +**application/system を束ねる場合:** + +```nix +# modules/features/services/container.nix +{ lib, config, ... }: +let + cfg = config.my.features.services.container; +in +{ + options.my.features.services.container = { + enable = lib.mkEnableOption "Container runtime (Docker)"; + }; + + config = lib.mkIf cfg.enable { + my.applications.docker.enable = true; + }; +} +``` + +**パッケージを直接追加する場合(application/system に属さない):** + +```nix +# modules/features/gui/capture.nix +{ pkgs, lib, config, ... }: +let + cfg = config.my.features.gui.capture; +in +{ + options.my.features.gui.capture = { + enable = lib.mkEnableOption "Screen capture tools"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + slurp # Tool for selecting a region of the screen + grim # Screenshot tool for Wayland + ]; + }; +} +``` + +**オプションを passthrough する場合:** + +```nix +# modules/features/network/tailscale.nix +{ + options.my.features.network.tailscale = { + enable = lib.mkEnableOption "Tailscale VPN"; + acceptDns = lib.mkOption { type = lib.types.bool; default = false; }; + }; + + config = lib.mkIf cfg.enable { + my.applications.tailscale = { + enable = true; + inherit (cfg) acceptDns; + }; + }; +} +``` + +**home.activation を使う場合(identity 等):** + +```nix +# modules/features/identity/ssh-default-key.nix +config.home-manager.sharedModules = [ + ( + { lib, ... }: + { + config = lib.mkIf cfg.enable { + home.activation.generateSshKey = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + # shell script here + ''; + }; + } + ) +]; +``` + +### Profile + +features の有効化のみを記述: + +```nix +# profiles/platforms/laptop.nix +{ + my.features = { + boot.power.enable = true; + connect = { + wifi.enable = true; + bluetooth.enable = true; + }; + gui.camera.enable = true; + identity.fingerprint.enable = true; + network.tailscale.enable = true; + }; +} +``` + +## Adding New Features — Checklist + +### 新しいアプリケーションを追加する場合 + +1. `modules/applications/` にモジュール作成(Simple or Complex) +2. `modules/applications/default.nix` の `imports` に追加 +3. `modules/features/` の適切なカテゴリに feature を作成(既存の feature に追記でも可) +4. `modules/features//default.nix` の `imports` に追加 +5. `profiles/` の適切な profile で feature を有効化 + +### 新しいシステム設定を追加する場合 + +1. `modules/system/` にモジュール作成(Simple Module) +2. `modules/system/default.nix` の `imports` に追加 +3. `modules/features/` の適切なカテゴリに feature を作成 +4. `modules/features//default.nix` の `imports` に追加 +5. `profiles/` の適切な profile で feature を有効化 + +### 新しいホストを追加する場合 + +1. `hosts//default.nix` を作成(`hardware-configuration.nix` を import) +2. `hosts/default.nix` の `flake.nixosConfigurations` に `mkSystem` で追加 +3. profiles のリストを指定 + +## Key Technical Notes + +- **nixpkgs channel**: `nixos-26.05` (stable) + `nixpkgs-unstable` +- **unstable パッケージ**: `specialArgs.unstable` 経由で参照(`unstable.`) +- **llm-agents**: `inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.` で参照 +- **nixvim**: `nixpkgs.source = pkgs.path` と `nixpkgs.config.allowUnfree = true` を vim/home/default.nix で設定 +- **home-manager**: `useGlobalPkgs = true`, `useUserPackages = true` +- **hostname**: `specialArgs.host` から `modules/system/network/default.nix` で `networking.hostName` に設定 +- **stateVersion**: `config.my.stateVersions.nixos` / `config.my.stateVersions.homeManager` で管理(`modules/system/version.nix`) diff --git a/modules/applications/codex.nix b/modules/applications/codex.nix new file mode 100644 index 0000000..f3faa31 --- /dev/null +++ b/modules/applications/codex.nix @@ -0,0 +1,21 @@ +{ + pkgs, + inputs, + lib, + config, + ... +}: +let + cfg = config.my.applications.codex; +in +{ + options.my.applications.codex = { + enable = lib.mkEnableOption "Codex AI coding assistant"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ + inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.codex # OpenAI Codex CLI + ]; + }; +} diff --git a/modules/applications/default.nix b/modules/applications/default.nix index 2815c76..3c89747 100644 --- a/modules/applications/default.nix +++ b/modules/applications/default.nix @@ -3,6 +3,7 @@ ./btop ./chrome.nix ./claude + ./codex.nix ./direnv.nix ./discord.nix ./docker.nix @@ -17,6 +18,7 @@ ./nautilus.nix ./niri ./noctalia + ./opencode.nix ./openssh.nix ./slack.nix ./ssh diff --git a/modules/applications/opencode.nix b/modules/applications/opencode.nix new file mode 100644 index 0000000..0476c31 --- /dev/null +++ b/modules/applications/opencode.nix @@ -0,0 +1,21 @@ +{ + pkgs, + inputs, + lib, + config, + ... +}: +let + cfg = config.my.applications.opencode; +in +{ + options.my.applications.opencode = { + enable = lib.mkEnableOption "OpenCode AI coding assistant"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ + inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.opencode # OpenCode CLI + ]; + }; +} diff --git a/modules/features/dev/agent.nix b/modules/features/dev/agent.nix index a273de0..da390e3 100644 --- a/modules/features/dev/agent.nix +++ b/modules/features/dev/agent.nix @@ -4,10 +4,14 @@ let in { options.my.features.dev.agent = { - enable = lib.mkEnableOption "AI coding agents (Claude Code)"; + enable = lib.mkEnableOption "AI coding agents (Claude Code, Codex, OpenCode)"; }; config = lib.mkIf cfg.enable { - my.applications.claude.enable = true; + my.applications = { + claude.enable = true; + codex.enable = true; + opencode.enable = true; + }; }; } From 8fbdd743efc3c45196954ebec984991823172641 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Mon, 1 Jun 2026 03:08:43 +0900 Subject: [PATCH 22/39] feat --- modules/features/dev/agent.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/features/dev/agent.nix b/modules/features/dev/agent.nix index da390e3..1ad04f2 100644 --- a/modules/features/dev/agent.nix +++ b/modules/features/dev/agent.nix @@ -1,4 +1,8 @@ -{ lib, config, ... }: +{ + lib, + config, + ... +}: let cfg = config.my.features.dev.agent; in @@ -10,7 +14,7 @@ in config = lib.mkIf cfg.enable { my.applications = { claude.enable = true; - codex.enable = true; + # codex.enable = true; opencode.enable = true; }; }; From 7a36f736d5955a0299b25dd4f90fff134b9c23ac Mon Sep 17 00:00:00 2001 From: moons-14 Date: Tue, 2 Jun 2026 22:34:12 +0900 Subject: [PATCH 23/39] fix --- hosts/default.nix | 3 ++- modules/applications/ghostty/system.nix | 2 +- modules/applications/wayland.nix | 4 ---- modules/features/gui/desktop.nix | 3 +++ 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hosts/default.nix b/hosts/default.nix index 094677c..2cff026 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -53,10 +53,11 @@ in host = "nix-example"; system = "x86_64-linux"; profiles = [ - "interfaces/cli-interactive" + "interfaces/gui" "platforms/vm" "workloads/dev" "workloads/remote" + "workloads/personal" ]; }; }; diff --git a/modules/applications/ghostty/system.nix b/modules/applications/ghostty/system.nix index 97ada0b..26fd7e8 100644 --- a/modules/applications/ghostty/system.nix +++ b/modules/applications/ghostty/system.nix @@ -14,7 +14,7 @@ in config = lib.mkIf cfg.enable { environment.systemPackages = with pkgs; [ - unstable.ghostty # A fast and minimal terminal emulator for Wayland + ghostty # A fast and minimal terminal emulator for Wayland ]; }; } diff --git a/modules/applications/wayland.nix b/modules/applications/wayland.nix index 19d88f3..e702877 100644 --- a/modules/applications/wayland.nix +++ b/modules/applications/wayland.nix @@ -28,10 +28,6 @@ in "wlr" "gtk" ]; - niri.default = [ - "wlr" - "gtk" - ]; }; }; diff --git a/modules/features/gui/desktop.nix b/modules/features/gui/desktop.nix index 7787d27..c24de7f 100644 --- a/modules/features/gui/desktop.nix +++ b/modules/features/gui/desktop.nix @@ -21,5 +21,8 @@ in swayidle.enable = true; vicinae.enable = true; }; + my.system = { + fonts.enable = true; + }; }; } From 45eb0d34b78a26bb586248a91f227e6c1b9249df Mon Sep 17 00:00:00 2001 From: moons-14 Date: Wed, 3 Jun 2026 17:48:10 +0900 Subject: [PATCH 24/39] fix --- hosts/default.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hosts/default.nix b/hosts/default.nix index 2cff026..094677c 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -53,11 +53,10 @@ in host = "nix-example"; system = "x86_64-linux"; profiles = [ - "interfaces/gui" + "interfaces/cli-interactive" "platforms/vm" "workloads/dev" "workloads/remote" - "workloads/personal" ]; }; }; From 4a177503c9ebde317f43a0f92f52fdd5823ba110 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Wed, 3 Jun 2026 17:55:38 +0900 Subject: [PATCH 25/39] feat --- hosts/default.nix | 11 +++++++++++ profiles/platforms/thinkpad.nix | 2 +- profiles/workloads/secure-boot.nix | 3 +++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 profiles/workloads/secure-boot.nix diff --git a/hosts/default.nix b/hosts/default.nix index 094677c..a5719d1 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -59,5 +59,16 @@ in "workloads/remote" ]; }; + x1g13 = mkSystem { + host = "x1g13"; + system = "x86_64-linux"; + profiles = [ + "interfaces/gui" + "platforms/thinkpad" + "workloads/dev" + "workloads/personal" + "workloads/secure-boot" + ]; + }; }; } diff --git a/profiles/platforms/thinkpad.nix b/profiles/platforms/thinkpad.nix index a33c6dd..af1e980 100644 --- a/profiles/platforms/thinkpad.nix +++ b/profiles/platforms/thinkpad.nix @@ -3,5 +3,5 @@ ./laptop.nix ]; - my.features.boot.secureBoot.enable = true; + my.drivers.intel.enable = true; } diff --git a/profiles/workloads/secure-boot.nix b/profiles/workloads/secure-boot.nix new file mode 100644 index 0000000..63962a3 --- /dev/null +++ b/profiles/workloads/secure-boot.nix @@ -0,0 +1,3 @@ +{ + my.features.boot.secureBoot.enable = true; +} From 9b4a2f2f7d83923a5661b3e147c4360ddb6862d2 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Wed, 3 Jun 2026 17:58:08 +0900 Subject: [PATCH 26/39] add x1g13 hardware config --- hosts/x1g13/default.nix | 6 +++ hosts/x1g13/hardware-configuration.nix | 52 ++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 hosts/x1g13/default.nix create mode 100644 hosts/x1g13/hardware-configuration.nix diff --git a/hosts/x1g13/default.nix b/hosts/x1g13/default.nix new file mode 100644 index 0000000..2db9801 --- /dev/null +++ b/hosts/x1g13/default.nix @@ -0,0 +1,6 @@ +{ ... }: +{ + imports = [ + ./hardware-configuration.nix + ]; +} diff --git a/hosts/x1g13/hardware-configuration.nix b/hosts/x1g13/hardware-configuration.nix new file mode 100644 index 0000000..c1a912d --- /dev/null +++ b/hosts/x1g13/hardware-configuration.nix @@ -0,0 +1,52 @@ +# 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, + 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/29b4b68d-c25e-48b1-beb3-30f63ac2f491"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/EA69-77EE"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + + swapDevices = [ ]; + + # 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.wlp0s20f3.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} From c9639132d20e36bf89ad3882e3fb6043e8252a62 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Wed, 3 Jun 2026 18:05:01 +0900 Subject: [PATCH 27/39] intel driver --- modules/drivers/intel-drivers.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/drivers/intel-drivers.nix b/modules/drivers/intel-drivers.nix index cc3ae16..0022a65 100644 --- a/modules/drivers/intel-drivers.nix +++ b/modules/drivers/intel-drivers.nix @@ -16,7 +16,7 @@ in hardware.graphics = { extraPackages = with pkgs; [ intel-media-driver # Intel Media Driver for VA-API - vaapiIntel # VA-API Intel driver + intel-vaapi-driver # VA-API Intel driver vaapiVdpau # VA-API to VDPAU adapter libvdpau-va-gl # VDPAU driver with OpenGL/VAAPI backend ]; From 7c37e6b9499dfcfae692cda3ce57543fdde27298 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Wed, 3 Jun 2026 18:06:30 +0900 Subject: [PATCH 28/39] intel driver --- modules/drivers/intel-drivers.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/drivers/intel-drivers.nix b/modules/drivers/intel-drivers.nix index 0022a65..b0d5383 100644 --- a/modules/drivers/intel-drivers.nix +++ b/modules/drivers/intel-drivers.nix @@ -17,7 +17,7 @@ in extraPackages = with pkgs; [ intel-media-driver # Intel Media Driver for VA-API intel-vaapi-driver # VA-API Intel driver - vaapiVdpau # VA-API to VDPAU adapter + libva-vdpau-driver # VA-API to VDPAU adapter libvdpau-va-gl # VDPAU driver with OpenGL/VAAPI backend ]; }; From 03280e5c777fccdeca21a25f9af148f6656dc8fe Mon Sep 17 00:00:00 2001 From: moons-14 Date: Thu, 4 Jun 2026 05:19:58 +0900 Subject: [PATCH 29/39] disk encrypto --- hosts/default.nix | 2 +- hosts/x1g13/default.nix | 1 + hosts/x1g13/disko.nix | 97 +++++++++++++++++++ modules/features/boot/default.nix | 1 + modules/features/boot/storage-crypto.nix | 30 ++++++ .../{secure-boot.nix => secure-storage.nix} | 1 + 6 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 hosts/x1g13/disko.nix create mode 100644 modules/features/boot/storage-crypto.nix rename profiles/workloads/{secure-boot.nix => secure-storage.nix} (50%) diff --git a/hosts/default.nix b/hosts/default.nix index a5719d1..c4f429b 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -67,7 +67,7 @@ in "platforms/thinkpad" "workloads/dev" "workloads/personal" - "workloads/secure-boot" + "workloads/secure-storage" ]; }; }; diff --git a/hosts/x1g13/default.nix b/hosts/x1g13/default.nix index 2db9801..81f90fb 100644 --- a/hosts/x1g13/default.nix +++ b/hosts/x1g13/default.nix @@ -2,5 +2,6 @@ { imports = [ ./hardware-configuration.nix + ./disko.nix ]; } diff --git a/hosts/x1g13/disko.nix b/hosts/x1g13/disko.nix new file mode 100644 index 0000000..8f7c1f7 --- /dev/null +++ b/hosts/x1g13/disko.nix @@ -0,0 +1,97 @@ +_: +let + espPart = "/dev/disk/by-partuuid/a53e3b19-67de-40de-9ded-3eac3117689a"; + + nixosPart = "/dev/disk/by-partuuid/311d0f9c-f35f-42e6-b6fc-a4d67dd21b2e"; + + btrfsMountOptions = [ + "compress=zstd" + "noatime" + "ssd" + "space_cache=v2" + ]; +in +{ + disko.devices.disk = { + esp = { + type = "disk"; + device = espPart; + destroy = false; + + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ + "umask=0077" + ]; + }; + }; + + nixos = { + type = "disk"; + device = nixosPart; + destroy = false; + + content = { + type = "luks"; + name = "cryptroot"; + + askPassword = true; + + settings = { + allowDiscards = true; + }; + + extraFormatArgs = [ + "--type" + "luks2" + "--pbkdf" + "argon2id" + "--label" + "NixOS-LUKS" + ]; + + content = { + type = "btrfs"; + extraArgs = [ + "-f" + "-L" + "NixOS" + ]; + + subvolumes = { + "@root" = { + mountpoint = "/"; + mountOptions = btrfsMountOptions; + }; + + "@home" = { + mountpoint = "/home"; + mountOptions = btrfsMountOptions; + }; + + "@nix" = { + mountpoint = "/nix"; + mountOptions = btrfsMountOptions; + }; + + "@log" = { + mountpoint = "/var/log"; + mountOptions = btrfsMountOptions; + }; + + "@swap" = { + mountpoint = "/.swapvol"; + mountOptions = [ + "noatime" + ]; + + swap.swapfile.size = "32G"; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/features/boot/default.nix b/modules/features/boot/default.nix index 57d2608..22e06ea 100644 --- a/modules/features/boot/default.nix +++ b/modules/features/boot/default.nix @@ -2,6 +2,7 @@ imports = [ ./power.nix ./secure-boot.nix + ./storage-crypto.nix ./uefi.nix ]; } diff --git a/modules/features/boot/storage-crypto.nix b/modules/features/boot/storage-crypto.nix new file mode 100644 index 0000000..d4f41b8 --- /dev/null +++ b/modules/features/boot/storage-crypto.nix @@ -0,0 +1,30 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.features.boot.storageCrypto; +in +{ + options.my.features.boot.storageCrypto = { + enable = lib.mkEnableOption "LUKS decryption via TPM2"; + }; + + config = lib.mkIf cfg.enable { + boot.initrd.systemd.enable = true; + + boot.initrd.luks.devices.cryptroot = { + crypttabExtraOpts = [ + "tpm2-device=auto" + ]; + }; + + security.tpm2.enable = true; + + environment.systemPackages = with pkgs; [ + tpm2-tools # TPM2 management tools + ]; + }; +} diff --git a/profiles/workloads/secure-boot.nix b/profiles/workloads/secure-storage.nix similarity index 50% rename from profiles/workloads/secure-boot.nix rename to profiles/workloads/secure-storage.nix index 63962a3..c3820e1 100644 --- a/profiles/workloads/secure-boot.nix +++ b/profiles/workloads/secure-storage.nix @@ -1,3 +1,4 @@ { my.features.boot.secureBoot.enable = true; + my.features.boot.storageCrypto.enable = true; } From dec46e9ad9721c7010df9b69a052cfcb14bd421c Mon Sep 17 00:00:00 2001 From: moons-14 Date: Sat, 6 Jun 2026 13:38:05 +0900 Subject: [PATCH 30/39] power --- modules/applications/swayidle.nix | 97 +++++++++++++++++++++---------- 1 file changed, 67 insertions(+), 30 deletions(-) diff --git a/modules/applications/swayidle.nix b/modules/applications/swayidle.nix index 135507f..7477b3f 100644 --- a/modules/applications/swayidle.nix +++ b/modules/applications/swayidle.nix @@ -7,12 +7,57 @@ }: let cfg = config.my.applications.swayidle; - noctaliaPkg = inputs.noctalia.packages.${pkgs.system}.default; - noctaliaExe = lib.getExe noctaliaPkg; - lockCmd = "${pkgs.bash}/bin/bash -lc '${noctaliaExe} ipc call lockScreen lock'"; - lockAndSuspendCmd = "${pkgs.bash}/bin/bash -lc '${noctaliaExe} ipc call sessionMenu lockAndSuspend'"; - dpmsOn = "${pkgs.niri}/bin/niri msg action power-on-monitors"; + noctaliaPkg = inputs.noctalia.packages.${pkgs.system}.default; + noctalia = lib.getExe noctaliaPkg; + + bash = lib.getExe pkgs.bash; + brightnessctl = lib.getExe pkgs.brightnessctl; + niri = lib.getExe pkgs.niri; + rm = "${pkgs.coreutils}/bin/rm"; + + brightnessState = "$XDG_RUNTIME_DIR/swayidle-brightness"; + + noctaliaCall = target: action: "${bash} -lc '${noctalia} ipc call ${target} ${action}'"; + + lockCmd = noctaliaCall "lockScreen" "lock"; + + # AC 接続中は何もしない。つまり battery-only の処理にする。 + skipIfOnAC = '' + for supply in /sys/class/power_supply/*; do + if [ -f "$supply/type" ] \ + && [ "$(< "$supply/type")" = "Mains" ] \ + && [ -f "$supply/online" ] \ + && [ "$(< "$supply/online")" = "1" ]; then + exit 0 + fi + done + ''; + + dimScreen = pkgs.writeShellScript "swayidle-dim-screen" '' + ${skipIfOnAC} + + ${brightnessctl} get > "${brightnessState}" 2>/dev/null || exit 0 + ${brightnessctl} set 10% >/dev/null 2>&1 || true + ''; + + restoreBrightness = pkgs.writeShellScript "swayidle-restore-brightness" '' + if [ -f "${brightnessState}" ]; then + saved=$(< "${brightnessState}") + ${brightnessctl} set "$saved" >/dev/null 2>&1 || true + ${rm} -f "${brightnessState}" + fi + ''; + + lockAndSuspend = pkgs.writeShellScript "swayidle-lock-and-suspend" '' + ${skipIfOnAC} + ${noctaliaCall "sessionMenu" "lockAndSuspend"} + ''; + + afterResume = pkgs.writeShellScript "swayidle-after-resume" '' + ${niri} msg action power-on-monitors + ${restoreBrightness} + ''; in { options.my.applications.swayidle = { @@ -24,40 +69,32 @@ in { services.swayidle = { enable = true; - systemdTarget = "graphical-session.target"; + systemdTargets = [ "graphical-session.target" ]; timeouts = [ { timeout = 300; - command = lockAndSuspendCmd; + command = "${dimScreen}"; + resumeCommand = "${restoreBrightness}"; + } + { + timeout = 360; + command = "${lockAndSuspend}"; } ]; - events = [ - { - event = "lock"; - command = lockCmd; - } - { - event = "before-sleep"; - command = lockCmd; - } - { - event = "after-resume"; - command = dpmsOn; - } - ]; - }; - - systemd.user.services.swayidle = { - Service = { - PassEnvironment = [ - "WAYLAND_DISPLAY" - "XDG_RUNTIME_DIR" - "DBUS_SESSION_BUS_ADDRESS" - ]; + events = { + lock = lockCmd; + before-sleep = lockCmd; + after-resume = "${afterResume}"; }; }; + + systemd.user.services.swayidle.Service.PassEnvironment = [ + "WAYLAND_DISPLAY" + "XDG_RUNTIME_DIR" + "DBUS_SESSION_BUS_ADDRESS" + ]; } ]; }; From 94b6b2feaeaa19947b1a0cacf918986ea0509cfa Mon Sep 17 00:00:00 2001 From: moons14 Date: Sat, 6 Jun 2026 14:12:21 +0900 Subject: [PATCH 31/39] feat: add smart zellij navigation from vim --- modules/applications/vim/home/keymaps.nix | 39 ++++++++++++++++++----- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/modules/applications/vim/home/keymaps.nix b/modules/applications/vim/home/keymaps.nix index f88c074..cefe442 100644 --- a/modules/applications/vim/home/keymaps.nix +++ b/modules/applications/vim/home/keymaps.nix @@ -29,6 +29,29 @@ let inherit desc; }; }; + + mkSmartWindowNav = key: direction: zellijDirection: desc: { + mode = "n"; + inherit key; + action.__raw = '' + function() + local current_win = vim.api.nvim_get_current_win() + vim.cmd.wincmd("${direction}") + + local at_edge = vim.api.nvim_get_current_win() == current_win + local in_zellij = vim.env.ZELLIJ ~= nil + local has_zellij_cli = vim.fn.executable("zellij") == 1 + + if at_edge and in_zellij and has_zellij_cli then + vim.system({ "zellij", "action", "move-focus-or-tab", "${zellijDirection}" }) + end + end + ''; + options = { + silent = true; + inherit desc; + }; + }; in { programs.nixvim = { @@ -98,14 +121,14 @@ in (mk "[l" "lprev" "前のLocation Listへ") # Window navigation - (mk "" "h" "左のウィンドウへ") - (mk "" "j" "下のウィンドウへ") - (mk "" "k" "上のウィンドウへ") - (mk "" "l" "右のウィンドウへ") - (mk "" "h" "左のウィンドウへ") - (mk "" "j" "下のウィンドウへ") - (mk "" "k" "上のウィンドウへ") - (mk "" "l" "右のウィンドウへ") + (mkSmartWindowNav "" "h" "left" "左のウィンドウへ(端ならZellijペイン/タブへ)") + (mkSmartWindowNav "" "j" "down" "下のウィンドウへ(端ならZellijペインへ)") + (mkSmartWindowNav "" "k" "up" "上のウィンドウへ(端ならZellijペインへ)") + (mkSmartWindowNav "" "l" "right" "右のウィンドウへ(端ならZellijペイン/タブへ)") + (mkSmartWindowNav "" "h" "left" "左のウィンドウへ(端ならZellijペイン/タブへ)") + (mkSmartWindowNav "" "j" "down" "下のウィンドウへ(端ならZellijペインへ)") + (mkSmartWindowNav "" "k" "up" "上のウィンドウへ(端ならZellijペインへ)") + (mkSmartWindowNav "" "l" "right" "右のウィンドウへ(端ならZellijペイン/タブへ)") # Alternate file / previous file (mk "" "" "直前のファイルへ戻る") From 7e49ed6530de85366b00a3afa6cbda5e4e975733 Mon Sep 17 00:00:00 2001 From: moons14 Date: Sat, 6 Jun 2026 14:24:35 +0900 Subject: [PATCH 32/39] fix: enable nh in base cli --- modules/applications/default.nix | 1 + modules/applications/nh.nix | 21 +++++++++++++++++++++ modules/features/cli/base.nix | 1 + 3 files changed, 23 insertions(+) create mode 100644 modules/applications/nh.nix diff --git a/modules/applications/default.nix b/modules/applications/default.nix index 3c89747..c7bcd68 100644 --- a/modules/applications/default.nix +++ b/modules/applications/default.nix @@ -16,6 +16,7 @@ ./java ./kde.nix ./nautilus.nix + ./nh.nix ./niri ./noctalia ./opencode.nix diff --git a/modules/applications/nh.nix b/modules/applications/nh.nix new file mode 100644 index 0000000..8feba6d --- /dev/null +++ b/modules/applications/nh.nix @@ -0,0 +1,21 @@ +{ + username, + lib, + config, + ... +}: +let + cfg = config.my.applications.nh; +in +{ + options.my.applications.nh = { + enable = lib.mkEnableOption "nh Nix CLI helper"; + }; + + config = lib.mkIf cfg.enable { + programs.nh = { + enable = true; + flake = "/home/${username}/dotfiles"; + }; + }; +} diff --git a/modules/features/cli/base.nix b/modules/features/cli/base.nix index a119e47..d31374d 100644 --- a/modules/features/cli/base.nix +++ b/modules/features/cli/base.nix @@ -20,6 +20,7 @@ in ssh.enable = true; direnv.enable = true; gnupg.enable = true; + nh.enable = true; openssh.enable = cfg.sshServer; }; From 8d7035a4e6eb095c022ecf7bf656c844a004d8b5 Mon Sep 17 00:00:00 2001 From: moons14 Date: Sat, 6 Jun 2026 14:26:07 +0900 Subject: [PATCH 33/39] fix: enable zellij copy without stealing Ctrl-C --- modules/applications/ghostty/config | 2 +- modules/applications/zellij/home.nix | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/applications/ghostty/config b/modules/applications/ghostty/config index 0280dd4..0e55901 100644 --- a/modules/applications/ghostty/config +++ b/modules/applications/ghostty/config @@ -9,7 +9,7 @@ window-decoration = true # keybind # Copy/Paste -keybind = ctrl+shift+c=copy_to_clipboard +keybind = performable:ctrl+shift+c=copy_to_clipboard keybind = ctrl+shift+v=paste_from_clipboard # create new tab diff --git a/modules/applications/zellij/home.nix b/modules/applications/zellij/home.nix index 3a4dbe4..1f6f449 100644 --- a/modules/applications/zellij/home.nix +++ b/modules/applications/zellij/home.nix @@ -21,6 +21,7 @@ in settings = { pane_frames = true; + copy_clipboard = "system"; copy_on_select = false; default_mode = "locked"; default_shell = "/run/current-system/sw/bin/zsh"; @@ -40,7 +41,8 @@ in bind "Alt J" { Resize "Increase Down"; } bind "Alt K" { Resize "Increase Up"; } bind "Alt L" { Resize "Increase Right"; } - bind "Alt c" { Copy; } + // Do not bind Ctrl+C here: it must pass through to pane processes as SIGINT. + bind "Alt c" "Ctrl Shift c" { Copy; } } normal { bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; } @@ -49,6 +51,7 @@ in bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; } bind "Alt n" { NewPane; } bind "Alt t" { NewTab; } + bind "Ctrl Shift c" { Copy; } bind "Alt H" { Resize "Increase Left"; } bind "Alt J" { Resize "Increase Down"; } bind "Alt K" { Resize "Increase Up"; } From a46e32c81041b4e4f7a92d709335b4a6d6fde854 Mon Sep 17 00:00:00 2001 From: moons14 Date: Sat, 6 Jun 2026 14:26:43 +0900 Subject: [PATCH 34/39] Remove comment on Ctrl+C binding in home.nix Removed comment about Ctrl+C binding to allow SIGINT. --- modules/applications/zellij/home.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/applications/zellij/home.nix b/modules/applications/zellij/home.nix index 1f6f449..98c40ee 100644 --- a/modules/applications/zellij/home.nix +++ b/modules/applications/zellij/home.nix @@ -41,7 +41,6 @@ in bind "Alt J" { Resize "Increase Down"; } bind "Alt K" { Resize "Increase Up"; } bind "Alt L" { Resize "Increase Right"; } - // Do not bind Ctrl+C here: it must pass through to pane processes as SIGINT. bind "Alt c" "Ctrl Shift c" { Copy; } } normal { From 94ee38f9356e99eec2d3ef46431d6f51a161690d Mon Sep 17 00:00:00 2001 From: moons-14 Date: Sun, 14 Jun 2026 04:42:19 +0900 Subject: [PATCH 35/39] disko --- flake.lock | 21 +++++++++++++++++++++ flake.nix | 6 ++++++ modules/system/default.nix | 1 + modules/system/disko.nix | 10 ++++++++++ 4 files changed, 38 insertions(+) create mode 100644 modules/system/disko.nix diff --git a/flake.lock b/flake.lock index 1160ba5..b693604 100644 --- a/flake.lock +++ b/flake.lock @@ -141,6 +141,26 @@ "type": "github" } }, + "disko": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781152676, + "narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=", + "owner": "nix-community", + "repo": "disko", + "rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, "firefox-gnome-theme": { "flake": false, "locked": { @@ -923,6 +943,7 @@ }, "root": { "inputs": { + "disko": "disko", "flake-parts": "flake-parts", "ghostty": "ghostty", "git-hooks-nix": "git-hooks-nix", diff --git a/flake.nix b/flake.nix index 3e4b271..c766709 100644 --- a/flake.nix +++ b/flake.nix @@ -51,6 +51,12 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + # Disk management + disko = { + url = "github:nix-community/disko"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + # Boot lanzaboote = { url = "github:nix-community/lanzaboote"; diff --git a/modules/system/default.nix b/modules/system/default.nix index aeefa4e..a16f8ce 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -3,6 +3,7 @@ ./audio.nix ./boot ./camera.nix + ./disko.nix ./fingerprint.nix ./fonts.nix ./gc.nix diff --git a/modules/system/disko.nix b/modules/system/disko.nix new file mode 100644 index 0000000..29bc2b4 --- /dev/null +++ b/modules/system/disko.nix @@ -0,0 +1,10 @@ +{ inputs, ... }: +{ + imports = [ + inputs.disko.nixosModules.disko + ]; + + config = { + disko.enableConfig = true; + }; +} From 51a9e3e67589617ce066bdb4513b60abb1fd4a95 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Sun, 14 Jun 2026 05:05:20 +0900 Subject: [PATCH 36/39] disko --- hosts/x1g13/disko.nix | 2 ++ hosts/x1g13/hardware-configuration.nix | 19 ------------------- modules/system/disko.nix | 4 ++-- 3 files changed, 4 insertions(+), 21 deletions(-) diff --git a/hosts/x1g13/disko.nix b/hosts/x1g13/disko.nix index 8f7c1f7..6569d4c 100644 --- a/hosts/x1g13/disko.nix +++ b/hosts/x1g13/disko.nix @@ -12,6 +12,8 @@ let ]; in { + disko.enableConfig = true; + disko.devices.disk = { esp = { type = "disk"; diff --git a/hosts/x1g13/hardware-configuration.nix b/hosts/x1g13/hardware-configuration.nix index c1a912d..775079e 100644 --- a/hosts/x1g13/hardware-configuration.nix +++ b/hosts/x1g13/hardware-configuration.nix @@ -24,28 +24,9 @@ boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = { - device = "/dev/disk/by-uuid/29b4b68d-c25e-48b1-beb3-30f63ac2f491"; - fsType = "ext4"; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/EA69-77EE"; - fsType = "vfat"; - options = [ - "fmask=0077" - "dmask=0077" - ]; - }; - swapDevices = [ ]; - # 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.wlp0s20f3.useDHCP = lib.mkDefault true; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; diff --git a/modules/system/disko.nix b/modules/system/disko.nix index 29bc2b4..ccec8f5 100644 --- a/modules/system/disko.nix +++ b/modules/system/disko.nix @@ -1,10 +1,10 @@ -{ inputs, ... }: +{ inputs, lib, ... }: { imports = [ inputs.disko.nixosModules.disko ]; config = { - disko.enableConfig = true; + disko.enableConfig = lib.mkDefault false; }; } From ee0fe4c1b4b160fdf3b4bfc26412fe93e374bec9 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Mon, 15 Jun 2026 18:34:16 +0900 Subject: [PATCH 37/39] ardino --- modules/applications/arduino.nix | 21 +++++++++++++++++++++ modules/applications/default.nix | 1 + modules/features/dev/arduino.nix | 13 +++++++++++++ modules/features/dev/default.nix | 1 + profiles/workloads/dev.nix | 1 + 5 files changed, 37 insertions(+) create mode 100644 modules/applications/arduino.nix create mode 100644 modules/features/dev/arduino.nix diff --git a/modules/applications/arduino.nix b/modules/applications/arduino.nix new file mode 100644 index 0000000..6117fed --- /dev/null +++ b/modules/applications/arduino.nix @@ -0,0 +1,21 @@ +{ + pkgs, + lib, + config, + ... +}: +let + cfg = config.my.applications.arduino; +in +{ + options.my.applications.arduino = { + enable = lib.mkEnableOption "Arduino development tools"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + arduino-cli # Arduino command-line interface + arduino-ide # Arduino IDE (GUI) + ]; + }; +} diff --git a/modules/applications/default.nix b/modules/applications/default.nix index c7bcd68..bb87d41 100644 --- a/modules/applications/default.nix +++ b/modules/applications/default.nix @@ -1,5 +1,6 @@ { imports = [ + ./arduino.nix ./btop ./chrome.nix ./claude diff --git a/modules/features/dev/arduino.nix b/modules/features/dev/arduino.nix new file mode 100644 index 0000000..9cc2c8a --- /dev/null +++ b/modules/features/dev/arduino.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: +let + cfg = config.my.features.dev.arduino; +in +{ + options.my.features.dev.arduino = { + enable = lib.mkEnableOption "Arduino development environment"; + }; + + config = lib.mkIf cfg.enable { + my.applications.arduino.enable = true; + }; +} diff --git a/modules/features/dev/default.nix b/modules/features/dev/default.nix index c0875f3..6d2893a 100644 --- a/modules/features/dev/default.nix +++ b/modules/features/dev/default.nix @@ -1,6 +1,7 @@ { imports = [ ./agent.nix + ./arduino.nix ./bun.nix ./java.nix ./nix.nix diff --git a/profiles/workloads/dev.nix b/profiles/workloads/dev.nix index 72376c7..6142d9a 100644 --- a/profiles/workloads/dev.nix +++ b/profiles/workloads/dev.nix @@ -2,6 +2,7 @@ my.features = { dev = { agent.enable = true; + arduino.enable = true; nix.enable = true; python.enable = true; bun.enable = true; From 33e5f0ae7c006fbd4c8f3ef369a9cd9962acaa40 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Mon, 15 Jun 2026 19:22:58 +0900 Subject: [PATCH 38/39] sops --- .gitignore | 3 +++ .sops.yaml | 14 ++++++++++++ docs/sops-key.md | 17 +++++++++++++++ flake.lock | 21 ++++++++++++++++++ flake.nix | 6 +++++ modules/system/default.nix | 2 ++ modules/system/secret.nix | 14 ++++++++++++ modules/system/sops.nix | 41 +++++++++++++++++++++++++++++++++++ modules/system/user/moons.nix | 9 +++++++- secrets/common/system.yaml | 28 ++++++++++++++++++++++++ shells/dotnix.nix | 19 ++++++++++++++-- 11 files changed, 171 insertions(+), 3 deletions(-) create mode 100644 .sops.yaml create mode 100644 docs/sops-key.md create mode 100644 modules/system/secret.nix create mode 100644 modules/system/sops.nix create mode 100644 secrets/common/system.yaml diff --git a/.gitignore b/.gitignore index 66ecee4..ea12eb1 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ !.envrc +!.sops.yaml + !/flake.nix !/flake.lock @@ -17,5 +19,6 @@ !modules/ !docs/ !images/ +!secrets/ !/flake/ diff --git a/.sops.yaml b/.sops.yaml new file mode 100644 index 0000000..27698bb --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,14 @@ +keys: + - &admin_yubikey1 age1yubikey1qvy5y8kxqc63y7fk0tfv43u499a8z8q332ff087lythry9cc6hdxxkznc6t + - &host_x1g13_old age1xfc7ksg69l5kwsxxgtynsuxgpwltcf9gmqlhfl7efq0clc8lwspqnveyx3 +creation_rules: + - path_regex: ^secrets/common/[^/]+\.ya?ml$ + key_groups: + - age: + - *admin_yubikey1 + - *host_x1g13_old + - path_regex: ^secrets/hosts/x1g13/[^/]+\.ya?ml$ + key_groups: + - age: + - *admin_yubikey1 + - *host_x1g13_old diff --git a/docs/sops-key.md b/docs/sops-key.md new file mode 100644 index 0000000..8dbc9d3 --- /dev/null +++ b/docs/sops-key.md @@ -0,0 +1,17 @@ +# Generate Sops key file + +```bash +mkdir -p ~/.config/sops/age +chmod 700 ~/.config/sops/age + +age-plugin-yubikey --identity --slot 1 \ + > ~/.config/sops/age/yubikey-identity.txt + +chmod 600 ~/.config/sops/age/yubikey-identity.txt +``` + +## Edit sops file + +```bash +sops secrets/common/system.yaml +``` diff --git a/flake.lock b/flake.lock index b693604..837b384 100644 --- a/flake.lock +++ b/flake.lock @@ -959,6 +959,7 @@ "noctalia": "noctalia", "quickshell": "quickshell", "services-flake": "services-flake", + "sops-nix": "sops-nix", "stylix": "stylix", "systems": "systems_6", "treefmt-nix": "treefmt-nix_3", @@ -1002,6 +1003,26 @@ "type": "github" } }, + "sops-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1780547341, + "narHash": "sha256-Gq8KNx5A7hBB3uGJaj6eQfLDIz5YdLu92gqBcvHvoUo=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "9ed65852b6257fbeae4355bc24ecfea307ca759a", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, "stylix": { "inputs": { "base16": "base16", diff --git a/flake.nix b/flake.nix index c766709..95922bb 100644 --- a/flake.nix +++ b/flake.nix @@ -51,6 +51,12 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + # Secrets management + sops-nix = { + url = "github:Mic92/sops-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + # Disk management disko = { url = "github:nix-community/disko"; diff --git a/modules/system/default.nix b/modules/system/default.nix index a16f8ce..2206bcd 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -13,7 +13,9 @@ ./nix.nix ./power.nix ./secure-boot.nix + ./sops.nix ./user ./version.nix + ./secret.nix ]; } diff --git a/modules/system/secret.nix b/modules/system/secret.nix new file mode 100644 index 0000000..bb393d2 --- /dev/null +++ b/modules/system/secret.nix @@ -0,0 +1,14 @@ +_: +let + commonSyetemSecrets = ../../secrets/common/system.yaml; +in +{ + sops.secrets = { + "users/moons/hashedPassword" = { + sopsFile = commonSyetemSecrets; + + # need before user creation + neededForUsers = true; + }; + }; +} diff --git a/modules/system/sops.nix b/modules/system/sops.nix new file mode 100644 index 0000000..caf3184 --- /dev/null +++ b/modules/system/sops.nix @@ -0,0 +1,41 @@ +{ + inputs, + pkgs, + ... +}: +{ + imports = [ + inputs.sops-nix.nixosModules.sops + ]; + + environment.systemPackages = with pkgs; [ + # sops / age + sops + age + ssh-to-age + + # YubiKey edit key + age-plugin-yubikey + yubikey-manager + pcsc-tools + + # password hash generation + mkpasswd + ]; + + # age-plugin-yubikey depend + services.pcscd.enable = true; + + services.openssh.enable = true; + + sops = { + defaultSopsFormat = "yaml"; + + age = { + # system keys + sshKeyPaths = [ + "/etc/ssh/ssh_host_ed25519_key" + ]; + }; + }; +} diff --git a/modules/system/user/moons.nix b/modules/system/user/moons.nix index c4c2f76..47d70c2 100644 --- a/modules/system/user/moons.nix +++ b/modules/system/user/moons.nix @@ -1,8 +1,15 @@ -{ pkgs, ... }: { + pkgs, + config, + ... +}: +{ + users.mutableUsers = false; + users.users.moons = { isNormalUser = true; description = "moons-14"; + hashedPasswordFile = config.sops.secrets."users/moons/hashedPassword".path; extraGroups = [ "adbusers" "docker" diff --git a/secrets/common/system.yaml b/secrets/common/system.yaml new file mode 100644 index 0000000..e9f7735 --- /dev/null +++ b/secrets/common/system.yaml @@ -0,0 +1,28 @@ +users: + moons: + hashedPassword: ENC[AES256_GCM,data:QtZei/BXPn/PDxUlOu0ZVrAfRM5jiHChAE5j5NVscPmm4OWjr94nPVOmJlYjL2WAiJY3/JSthmbrEIqiUF6E9qv10HQzAxzmZQ==,iv:ksshJX9S/20lw/8IDZYadNZLLE/gNgENZJ3/wRgJCds=,tag:xJPiO8O/q4rKmb+YNnpZdg==,type:str] +sops: + age: + - enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHBpdi1wMjU2IGxWc2NMZyBBM09Pclhu + K0ozcS90TG9Qam1YUjdCUGw5QjRoNXNGMU92WVdJOVluUk0vNQpjb3AxeGVpaFBT + L2hLYnZ1WWtOQjdyRFR1SnNMb1JITTVwWlNXb003YUFJCi0tLSBPNnowdm00ZEhR + b2VGZ1drRG4rU01TODk5Rm5KbXJjVkNhQ0hNeUxwdXBzCqKtUyprjagTVajskgXg + OBMMuflEZQH+mtFWsBc0k1Mm7MAS8DpMVLNZnkfNNPpFTP4pAOWFd2LhuMkDONFQ + vnA= + -----END AGE ENCRYPTED FILE----- + recipient: age1yubikey1qvy5y8kxqc63y7fk0tfv43u499a8z8q332ff087lythry9cc6hdxxkznc6t + - enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPU0d5bVUrditWVCtDbyt6 + WFpJTVdLOGpqZ1hLZTJGZi83MXZLMzR6RVhFCnBZRU53V3NvYXFpVXVJaDJHdlhz + SlV4NFUvTDZUQWdTaUJNZElidk1zMjgKLS0tIEd3QTRldzBJamp0OWhNUTBFMExC + dlhiMGp4b1JqY2JVTG5vSitadXI4cEUKvhqw+A5CXktuHR3JBDNKg2SrNIy4++l8 + e58uQoTjJab1ivvLVAZOdtIdoulca50W9+ALNOFqBn9j5VD0BfFeKg== + -----END AGE ENCRYPTED FILE----- + recipient: age1xfc7ksg69l5kwsxxgtynsuxgpwltcf9gmqlhfl7efq0clc8lwspqnveyx3 + lastmodified: "2026-06-15T10:20:19Z" + mac: ENC[AES256_GCM,data:Tw58FneoksiOuol1aUOFXoAnFiTzddmFfYAA0B0RfPPyj6UKQbBvRYJhOMuOMRE1fVlDhqxxDiqZI5y14vJg8gLusAZt1JKi7ODR7MqcImvxboaee8DIj4uIcN254g0c0cmZWsGrt7yTYoSLDUc3QdAxj9/Az/CMls6XjM+RL8E=,iv:XGgWgbexCUxzuJzRVG3V2GZGwmwjAtowgz+NRPxk1+o=,tag:FwYJXfwS2f70okl0bhS+Sw==,type:str] + unencrypted_suffix: _unencrypted + version: 3.13.1 diff --git a/shells/dotnix.nix b/shells/dotnix.nix index 1afb4b2..bef8bb2 100644 --- a/shells/dotnix.nix +++ b/shells/dotnix.nix @@ -9,12 +9,27 @@ _: { devShells.dotnix = pkgs.mkShell { packages = [ config.treefmt.build.wrapper - pkgs.gitleaks + pkgs.git + pkgs.gitleaks pkgs.pre-commit + + # sops-nix / age + pkgs.sops + pkgs.age + pkgs.ssh-to-age + + # YubiKey for sops editing + pkgs.age-plugin-yubikey + pkgs.yubikey-manager + pkgs.pcsc-tools ]; - shellHook = config.pre-commit.settings.shellHook; + shellHook = '' + ${config.pre-commit.settings.shellHook} + + export SOPS_AGE_KEY_FILE="$HOME/.config/sops/age/yubikey-identity.txt" + ''; }; }; } From 32600536dc33a9ec640e08a958d5604460899a43 Mon Sep 17 00:00:00 2001 From: moons-14 Date: Wed, 17 Jun 2026 21:12:57 +0900 Subject: [PATCH 39/39] installer --- docs/install.md | 157 +++++++++++++++++++++++++++++ docs/iso-build.md | 26 +++++ hosts/default.nix | 10 ++ hosts/installer/default.nix | 191 ++++++++++++++++++++++++++++++++++++ 4 files changed, 384 insertions(+) create mode 100644 docs/install.md create mode 100644 docs/iso-build.md create mode 100644 hosts/installer/default.nix diff --git a/docs/install.md b/docs/install.md new file mode 100644 index 0000000..cd5786a --- /dev/null +++ b/docs/install.md @@ -0,0 +1,157 @@ +# NixOSインストール手順 + +## 事前準備 + +1. [ISOビルド](iso-build.md)を参照してISOを作成 +2. USBに書き込んで対象マシンでブート + +## ネットワーク接続 + +### 有線LAN + +DHCPで自動設定される。 + +### WiFi(有線が使えない場合) + +```bash +nmcli device wifi connect --ask +``` + +## SSH接続 + +コンソールに表示されたIPアドレスに接続: + +```bash +ssh root@ +``` + +## インストール手順 + +### 1. dotfilesのクローン + +```bash +git clone git@github.com:moons-14/dotfiles.git ~/dotfiles +``` + +### 2. SSHホストキーの生成 + +新しいホスト用のSSHホストキーを生成: + +```bash +ssh-keygen -t ed25519 -f /tmp/ssh_host_ed25519_key -N "" +``` + +### 3. age公開鍵の取得 + +SSHホストキーからage公開鍵を取得: + +```bash +ssh-to-age -i /tmp/ssh_host_ed25519_key.pub +``` + +出力されたage公開鍵をコピー。 + +### 4. .sops.yamlの編集 + +```bash +cd ~/dotfiles +vim .sops.yaml +``` + +以下を追加: + +```yaml +keys: + - &host_ + +creation_rules: + - path_regex: ^secrets/hosts//[^/]+\.ya?ml$ + key_groups: + - age: + - *admin_yubikey1 + - *host_ +``` + +### 5. シークレットの再暗号化 + +```bash +sops updatekeys secrets/common/system.yaml +sops updatekeys secrets/hosts//*.yaml +``` + +### 6. disko設定の作成 + +新しいホスト用の`hosts//disko.nix`を作成。 + +#### シンプル構成(暗号化なし) + +```nix +_: +{ + disko.enableConfig = true; + + disko.devices.disk.main = { + type = "disk"; + device = "/dev/sda"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "512M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + }; + }; + root = { + size = "100%"; + content = { + type = "filesystem"; + format = "ext4"; + mountpoint = "/"; + }; + }; + }; + }; + }; +} +``` + +#### LUKS暗号化 + btrfs + +`hosts/x1g13/disko.nix`を参照。 + +### 7. ディスクのパーティション + +```bash +cd ~/dotfiles +nix run github:nix-community/disko -- --mode disko hosts//disko.nix +``` + +### 8. ホストキーのコピー + +```bash +mkdir -p /mnt/etc/ssh +cp /tmp/ssh_host_ed25519_key* /mnt/etc/ssh/ +chmod 600 /mnt/etc/ssh/ssh_host_ed25519_key +``` + +### 9. NixOSインストール + +```bash +nixos-install --flake ~/dotfiles# +``` + +### 10. 再起動 + +```bash +reboot +``` + +## インストール後の確認 + +- SSHでログインできるか +- sopsシークレットが復号できるか +- diskoでパーティションが正しく設定されているか diff --git a/docs/iso-build.md b/docs/iso-build.md new file mode 100644 index 0000000..d62af15 --- /dev/null +++ b/docs/iso-build.md @@ -0,0 +1,26 @@ +# カスタムISOビルド + +## ビルド + +```bash +nix build .#nixosConfigurations.installer.config.system.build.isoImage +``` + +## ISO書き込み + +```bash +# USBデバイスの確認 +lsblk + +# 書き込み(/dev/sdXは実際のデバイスに置き換える) +sudo dd if=./result/nixos-minimal-*.iso of=/dev/sdX bs=4M status=progress +sync +``` + +## ISOの特徴 + +- SSH鍵認証でrootログイン可能 +- 有線LANはDHCPで自動設定 +- WiFiは`nmcli`で手動設定可能 +- disko/sops/ageなどのツールを内蔵 +- ブート時にIPアドレスとヘルプを表示 diff --git a/hosts/default.nix b/hosts/default.nix index c4f429b..0cbb0c1 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -70,5 +70,15 @@ in "workloads/secure-storage" ]; }; + + installer = nixosSystem { + system = "x86_64-linux"; + modules = [ + ./installer/default.nix + ]; + specialArgs = { + inherit inputs; + }; + }; }; } diff --git a/hosts/installer/default.nix b/hosts/installer/default.nix new file mode 100644 index 0000000..fcbe24f --- /dev/null +++ b/hosts/installer/default.nix @@ -0,0 +1,191 @@ +{ + pkgs, + lib, + modulesPath, + ... +}: +{ + imports = [ + "${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix" + ]; + + networking = { + hostName = "nixos-installer"; + + networkmanager = { + enable = true; + wifi.powersave = false; + }; + }; + + services.openssh = { + enable = true; + settings = { + PermitRootLogin = "prohibit-password"; + PasswordAuthentication = false; + KbdInteractiveAuthentication = false; + PubkeyAuthentication = "yes"; + }; + }; + + users.users.root.openssh.authorizedKeys.keys = [ + "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIKhxDkucmeCor6CKoXAua7DgDSzuXrZOtpdkyzQxz5+aAAAABHNzaDo= moons@moons14.com" + "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIN6hZJyng/5LgFKPjR6uZAd/00UkO0vN0uQOoIvfSELdAAAABHNzaDo= moons@moons14.com" + ]; + + environment.systemPackages = with pkgs; [ + git # Clone dotfiles repository + disko # Disk partitioning + sops # Secrets management + age # Age encryption + ssh-to-age # Convert SSH keys to age + age-plugin-yubikey # YubiKey support + yubikey-manager # YubiKey management + pcsc-tools # Smart card tools + mkpasswd # Password hash generation + rsync # File synchronization + vim # Text editor + wget # Download files + curl # HTTP client + jq # JSON processor + parted # Partition tools + cryptsetup # LUKS encryption + btrfs-progs # Btrfs filesystem tools + ]; + + services.pcscd.enable = true; + + environment.etc."installer-help.txt".text = '' + + ╔══════════════════════════════════════════════════════════════╗ + ║ NixOS Installer ISO ║ + ╠══════════════════════════════════════════════════════════════╣ + ║ ║ + ║ SSH Access: ║ + ║ ssh root@ ║ + ║ ║ + ║ Network Setup: ║ + ║ Wired: Auto-configured via DHCP ║ + ║ WiFi: nmcli device wifi connect --ask ║ + ║ ║ + ║ Installation Workflow: ║ + ║ ║ + ║ 1. Clone dotfiles: ║ + ║ git clone git@github.com:moons-14/dotfiles.git ~/dotfiles║ + ║ ║ + ║ 2. Generate SSH host key for new host: ║ + ║ ssh-keygen -t ed25519 -f /tmp/ssh_host_ed25519_key -N "" ║ + ║ ║ + ║ 3. Get age public key from SSH host key: ║ + ║ ssh-to-age -i /tmp/ssh_host_ed25519_key.pub ║ + ║ ║ + ║ 4. Add age key to .sops.yaml: ║ + ║ cd ~/dotfiles ║ + ║ # Edit .sops.yaml and add the age key ║ + ║ # Add new host entry to creation_rules ║ + ║ ║ + ║ 5. Re-encrypt secrets: ║ + ║ sops updatekeys secrets/common/system.yaml ║ + ║ sops updatekeys secrets/hosts//*.yaml ║ + ║ ║ + ║ 6. Create disko.nix for new host: ║ + ║ # Check disk devices ║ + ║ lsblk -f ║ + ║ ║ + ║ # Create hosts//disko.nix ║ + ║ # Example: LUKS + btrfs ║ + ║ # See hosts/x1g13/disko.nix for reference ║ + ║ ║ + ║ 7. Partition disk with disko: ║ + ║ nix run github:nix-community/disko -- \ ║ + ║ --mode disko hosts//disko.nix ║ + ║ ║ + ║ 8. Copy host key to installed system: ║ + ║ mkdir -p /mnt/etc/ssh ║ + ║ cp /tmp/ssh_host_ed25519_key* /mnt/etc/ssh/ ║ + ║ chmod 600 /mnt/etc/ssh/ssh_host_ed25519_key ║ + ║ ║ + ║ 9. Install NixOS: ║ + ║ nixos-install --flake ~/dotfiles# ║ + ║ ║ + ║ Disko Configuration Examples: ║ + ║ ║ + ║ Simple (no encryption): ║ + ║ disko.devices.disk.main = { ║ + ║ type = "disk"; ║ + ║ device = "/dev/sda"; ║ + ║ content = { ║ + ║ type = "gpt"; ║ + ║ partitions = { ║ + ║ ESP = { size = "512M"; type = "EF00"; ║ + ║ content = { type = "filesystem"; ║ + ║ format = "vfat"; mountpoint = "/boot"; }; }; ║ + ║ root = { size = "100%"; ║ + ║ content = { type = "filesystem"; ║ + ║ format = "ext4"; mountpoint = "/"; }; }; ║ + ║ }; ║ + ║ }; ║ + ║ }; ║ + ║ ║ + ║ LUKS + btrfs (see hosts/x1g13/disko.nix): ║ + ║ - Use partuuid for device path ║ + ║ - Set askPassword = true for LUKS ║ + ║ - Configure btrfs subvolumes ║ + ║ ║ + ╚══════════════════════════════════════════════════════════════╝ + + ''; + + systemd.services.installer-banner = { + description = "Display installer help on console"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${pkgs.coreutils}/bin/cat /etc/installer-help.txt"; + StandardOutput = "tty"; + TTYPath = "/dev/tty1"; + }; + }; + + systemd.services.display-ip = { + description = "Display IP address on console"; + wantedBy = [ "multi-user.target" ]; + after = [ "network-online.target" ]; + wants = [ "network-online.target" ]; + serviceConfig = { + Type = "oneshot"; + ExecStart = pkgs.writeShellScript "display-ip" '' + sleep 2 + echo "" + echo "=== Network Interfaces ===" + ${pkgs.iproute2}/bin/ip -4 addr show | ${pkgs.gnugrep}/bin/grep inet + echo "" + echo "=== SSH Access ===" + for ip in $(${pkgs.iproute2}/bin/ip -4 addr show | ${pkgs.gnugrep}/bin/grep -oP 'inet \K[\d.]+' | ${pkgs.gnugrep}/bin/grep -v '127.0.0.1'); do + echo " ssh root@$ip" + done + echo "" + ''; + StandardOutput = "tty"; + TTYPath = "/dev/tty1"; + }; + }; + + nix = { + settings = { + experimental-features = [ + "nix-command" + "flakes" + ]; + trusted-users = [ "root" ]; + }; + + extraOptions = '' + experimental-features = nix-command flakes + ''; + }; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + + system.stateVersion = "26.05"; +}