wow
Some checks failed
CI / check (push) Has been cancelled
CI / ida (push) Has been cancelled
CI / cpt (push) Has been cancelled
CI / build-nixos (ena) (push) Has been cancelled
CI / build-nixos (hako) (push) Has been cancelled
CI / build-nixos (kazusa) (push) Has been cancelled
CI / build-nixos (mizuki) (push) Has been cancelled
Some checks failed
CI / check (push) Has been cancelled
CI / ida (push) Has been cancelled
CI / cpt (push) Has been cancelled
CI / build-nixos (ena) (push) Has been cancelled
CI / build-nixos (hako) (push) Has been cancelled
CI / build-nixos (kazusa) (push) Has been cancelled
CI / build-nixos (mizuki) (push) Has been cancelled
This commit is contained in:
commit
bbac123a8d
144 changed files with 7059 additions and 0 deletions
74
.forgejo/workflows/main.yml
Normal file
74
.forgejo/workflows/main.yml
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths-ignore:
|
||||
- "hosts/machine/kanade/**"
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- "hosts/machine/kanade/**"
|
||||
|
||||
jobs:
|
||||
check:
|
||||
runs-on: x86_64
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
- name: Check flake
|
||||
run: |
|
||||
source /etc/bashrc
|
||||
nix flake check
|
||||
ida:
|
||||
runs-on: x86_64
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
- name: Prefetch IDA
|
||||
run: |
|
||||
source /etc/bashrc
|
||||
nix-prefetch-url --type sha256 https://file.mizuki.guru/.ida/ida-free-pc_93_x64linux.run
|
||||
cpt:
|
||||
runs-on: x86_64
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
- name: Prefetch Cisco Packet Tracer
|
||||
run: |
|
||||
source /etc/bashrc
|
||||
nix-prefetch-url --type sha256 https://file.mizuki.guru/.cpt/CiscoPacketTracer_900_Ubuntu_64bit.deb
|
||||
nix-prefetch-url --type sha256 https://file.mizuki.guru/.cpt/CiscoPacketTracer822_amd64_signed.deb
|
||||
|
||||
build-nixos:
|
||||
needs: check
|
||||
runs-on: x86_64
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
host: [mizuki, ena, hako, kazusa]
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Build NixOS configuration with nom
|
||||
run: |
|
||||
source /etc/bashrc
|
||||
nix build .#nixosConfigurations.${{ matrix.host }}.config.system.build.toplevel
|
||||
|
||||
- name: Cache & Push to Attic
|
||||
if: success()
|
||||
env:
|
||||
ATTIC_SERVER: ${{ secrets.ATTIC_SERVER }}
|
||||
ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }}
|
||||
run: |
|
||||
source /etc/bashrc
|
||||
nix shell nixpkgs#attic-client -c bash -c "
|
||||
attic login imnyang \"$ATTIC_SERVER\" \"$ATTIC_TOKEN\"
|
||||
attic push imnyang ./result
|
||||
"
|
||||
- name: Clean Builder Environment
|
||||
if: success()
|
||||
run: |
|
||||
nix-collect-garbage -d
|
||||
13
.gitignore
vendored
Normal file
13
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
result
|
||||
result-*
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# sops: keep encrypted secret files in git, ignore local key material/artifacts
|
||||
*.dec
|
||||
*.decrypted
|
||||
.sops-age-key
|
||||
keys.txt
|
||||
|
||||
.DS_Store
|
||||
3
README.md
Normal file
3
README.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
nr
|
||||
clean
|
||||
update
|
||||
19
assets/1password.desktop
Normal file
19
assets/1password.desktop
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
[Desktop Entry]
|
||||
Categories=Office;
|
||||
Comment[en_US]=Password manager and secure wallet
|
||||
Comment=Password manager and secure wallet
|
||||
Exec=1password --silent %U
|
||||
GenericName[en_US]=
|
||||
GenericName=
|
||||
Icon=1password
|
||||
MimeType=
|
||||
Name[en_US]=1Password
|
||||
Name=1Password
|
||||
Path=
|
||||
StartupNotify=true
|
||||
StartupWMClass=1Password
|
||||
Terminal=false
|
||||
TerminalOptions=
|
||||
Type=Application
|
||||
X-KDE-SubstituteUID=false
|
||||
X-KDE-Username=
|
||||
147
assets/Kawa.colors
Normal file
147
assets/Kawa.colors
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
[ColorEffects:Disabled]
|
||||
Color=56,56,56
|
||||
ColorAmount=0
|
||||
ColorEffect=0
|
||||
ContrastAmount=0.65
|
||||
ContrastEffect=1
|
||||
IntensityAmount=0.1
|
||||
IntensityEffect=2
|
||||
|
||||
[ColorEffects:Inactive]
|
||||
ChangeSelectionColor=true
|
||||
Color=112,111,110
|
||||
ColorAmount=0.025
|
||||
ColorEffect=2
|
||||
ContrastAmount=0.1
|
||||
ContrastEffect=2
|
||||
Enable=false
|
||||
IntensityAmount=0
|
||||
IntensityEffect=0
|
||||
|
||||
[Colors:Button]
|
||||
BackgroundAlternate=163,212,250
|
||||
BackgroundNormal=252,248,249
|
||||
DecorationFocus=61,174,233
|
||||
DecorationHover=61,174,233
|
||||
ForegroundActive=61,174,233
|
||||
ForegroundInactive=112,125,138
|
||||
ForegroundLink=41,128,185
|
||||
ForegroundNegative=218,68,83
|
||||
ForegroundNeutral=246,116,0
|
||||
ForegroundNormal=25,16,23
|
||||
ForegroundPositive=39,174,96
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[Colors:Complementary]
|
||||
BackgroundAlternate=27,30,32
|
||||
BackgroundNormal=42,46,50
|
||||
DecorationFocus=61,174,233
|
||||
DecorationHover=61,174,233
|
||||
ForegroundActive=61,174,233
|
||||
ForegroundInactive=161,169,177
|
||||
ForegroundLink=29,153,243
|
||||
ForegroundNegative=218,68,83
|
||||
ForegroundNeutral=246,116,0
|
||||
ForegroundNormal=252,252,252
|
||||
ForegroundPositive=39,174,96
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[Colors:Header]
|
||||
BackgroundAlternate=239,240,241
|
||||
BackgroundNormal=222,224,226
|
||||
DecorationFocus=61,174,233
|
||||
DecorationHover=61,174,233
|
||||
ForegroundActive=61,174,233
|
||||
ForegroundInactive=112,125,138
|
||||
ForegroundLink=41,128,185
|
||||
ForegroundNegative=218,68,83
|
||||
ForegroundNeutral=246,116,0
|
||||
ForegroundNormal=35,38,41
|
||||
ForegroundPositive=39,174,96
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[Colors:Header][Inactive]
|
||||
BackgroundAlternate=227,229,231
|
||||
BackgroundNormal=239,240,241
|
||||
DecorationFocus=61,174,233
|
||||
DecorationHover=61,174,233
|
||||
ForegroundActive=61,174,233
|
||||
ForegroundInactive=112,125,138
|
||||
ForegroundLink=41,128,185
|
||||
ForegroundNegative=218,68,83
|
||||
ForegroundNeutral=246,116,0
|
||||
ForegroundNormal=35,38,41
|
||||
ForegroundPositive=39,174,96
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[Colors:Selection]
|
||||
BackgroundAlternate=163,212,250
|
||||
BackgroundNormal=236,183,213
|
||||
DecorationFocus=61,174,233
|
||||
DecorationHover=61,174,233
|
||||
ForegroundActive=255,255,255
|
||||
ForegroundInactive=112,125,138
|
||||
ForegroundLink=253,188,75
|
||||
ForegroundNegative=176,55,69
|
||||
ForegroundNeutral=198,92,0
|
||||
ForegroundNormal=25,16,23
|
||||
ForegroundPositive=23,104,57
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[Colors:Tooltip]
|
||||
BackgroundAlternate=239,240,241
|
||||
BackgroundNormal=247,247,247
|
||||
DecorationFocus=61,174,233
|
||||
DecorationHover=61,174,233
|
||||
ForegroundActive=61,174,233
|
||||
ForegroundInactive=112,125,138
|
||||
ForegroundLink=41,128,185
|
||||
ForegroundNegative=218,68,83
|
||||
ForegroundNeutral=246,116,0
|
||||
ForegroundNormal=35,38,41
|
||||
ForegroundPositive=39,174,96
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[Colors:View]
|
||||
BackgroundAlternate=247,247,247
|
||||
BackgroundNormal=252,248,249
|
||||
DecorationFocus=61,174,233
|
||||
DecorationHover=61,174,233
|
||||
ForegroundActive=61,174,233
|
||||
ForegroundInactive=112,125,138
|
||||
ForegroundLink=41,128,185
|
||||
ForegroundNegative=218,68,83
|
||||
ForegroundNeutral=246,116,0
|
||||
ForegroundNormal=25,16,23
|
||||
ForegroundPositive=39,174,96
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[Colors:Window]
|
||||
BackgroundAlternate=227,229,231
|
||||
BackgroundNormal=252,248,249
|
||||
DecorationFocus=61,174,233
|
||||
DecorationHover=61,174,233
|
||||
ForegroundActive=61,174,233
|
||||
ForegroundInactive=112,125,138
|
||||
ForegroundLink=41,128,185
|
||||
ForegroundNegative=218,68,83
|
||||
ForegroundNeutral=246,116,0
|
||||
ForegroundNormal=25,16,23
|
||||
ForegroundPositive=39,174,96
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[General]
|
||||
ColorScheme=BreezeLight
|
||||
Name=Kawa
|
||||
shadeSortColumn=true
|
||||
|
||||
[KDE]
|
||||
contrast=4
|
||||
|
||||
[WM]
|
||||
activeBackground=227,229,231
|
||||
activeBlend=227,229,231
|
||||
activeForeground=35,38,41
|
||||
inactiveBackground=239,240,241
|
||||
inactiveBlend=239,240,241
|
||||
inactiveForeground=112,125,138
|
||||
BIN
assets/avatar.webp
Normal file
BIN
assets/avatar.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
4
assets/wallpaper/README.md
Normal file
4
assets/wallpaper/README.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
[wallpaper1.jpg - @Drift0827](https://x.com/Drift0827/status/1990350670445306010?s=20)
|
||||
[wallpaper2.png - 服作り奮闘中 Card](https://sekai.best/card/1356)
|
||||
[wallpaper3.png - 気づいてしまった想い Card](https://sekai.best/card/202)
|
||||
[wallpaper4.png - 当たり前になった打ち上げ](https://sekai.best/card/363)
|
||||
BIN
assets/wallpaper/wallpaper1.jpg
Normal file
BIN
assets/wallpaper/wallpaper1.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 MiB |
BIN
assets/wallpaper/wallpaper2.png
Normal file
BIN
assets/wallpaper/wallpaper2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.2 MiB |
BIN
assets/wallpaper/wallpaper3.png
Normal file
BIN
assets/wallpaper/wallpaper3.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.7 MiB |
BIN
assets/wallpaper/wallpaper4.png
Normal file
BIN
assets/wallpaper/wallpaper4.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.1 MiB |
1065
flake.lock
generated
Normal file
1065
flake.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
139
flake.nix
Normal file
139
flake.nix
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
{
|
||||
description = "imnyang's Nix Configuration";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||
nixpkgs-2511.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
spicetify-nix.url = "github:Gerg-L/spicetify-nix";
|
||||
|
||||
catppuccin.url = "github:catppuccin/nix";
|
||||
|
||||
nix-flatpak.url = "github:gmodena/nix-flatpak/";
|
||||
|
||||
plasma-manager = {
|
||||
url = "github:nix-community/plasma-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.home-manager.follows = "home-manager";
|
||||
};
|
||||
|
||||
darwin = {
|
||||
url = "github:nix-darwin/nix-darwin";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nix-homebrew.url = "github:zhaofengli/nix-homebrew";
|
||||
|
||||
sops-nix = {
|
||||
url = "github:Mic92/sops-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nixcord.url = "github:FlameFlag/nixcord";
|
||||
# nixcord.url = "path:/home/imnyang/workspaces/git/imnyang/nixcord";
|
||||
|
||||
vscode-nigo = {
|
||||
url = "git+https://git.pari.ng/imnyang/vscode-nigo.git?ref=main";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
notion-desktop = {
|
||||
url = "github:heytcass/notion-mac-flake";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
notion-calendar-electron.url = "github:czlabinger/notion-calendar-electron";
|
||||
|
||||
millennium.url = "github:SteamClientHomebrew/Millennium?dir=packages/nix";
|
||||
|
||||
vicinae.url = "github:vicinaehq/vicinae";
|
||||
|
||||
vicinae-extensions = {
|
||||
url = "github:vicinaehq/extensions";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
|
||||
|
||||
codex-app = {
|
||||
url = "github:ilysenko/codex-desktop-linux";
|
||||
};
|
||||
|
||||
quadlet-nix.url = "github:SEIAROTg/quadlet-nix";
|
||||
|
||||
rustfs = {
|
||||
url = "github:rustfs/rustfs-flake";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
imnyang.url = "git+https://git.mizuki.guru/imnyang/nix-packages.git";
|
||||
|
||||
paring.url = "git+https://git.pari.ng/paring/nix-packages.git";
|
||||
|
||||
mizuki-nc.url = "git+https://git.mizuki.guru/imnyang/mizuki.guru.git?rev=70b1c9a2befc933c63f2b3197655b4f1166f9fbb";
|
||||
|
||||
muvel.url = "github:imnyang/muvel-nix";
|
||||
};
|
||||
|
||||
outputs =
|
||||
inputs@{
|
||||
imnyang,
|
||||
paring,
|
||||
...
|
||||
}:
|
||||
let
|
||||
# Overlays
|
||||
overlays = [
|
||||
paring.overlays.default
|
||||
imnyang.overlays.default
|
||||
inputs.millennium.overlays.default
|
||||
(import ./overlays/spotx.nix)
|
||||
(final: prev: {
|
||||
pythonPackagesExtensions = (prev.pythonPackagesExtensions or [ ]) ++ [
|
||||
(python-final: python-prev: {
|
||||
uefi-firmware-parser = python-prev.uefi-firmware-parser.overridePythonAttrs (old: {
|
||||
build-system = (old.build-system or [ ]) ++ [
|
||||
python-final.setuptools-scm
|
||||
];
|
||||
});
|
||||
})
|
||||
];
|
||||
})
|
||||
(import ./overlays/hoffice)
|
||||
];
|
||||
|
||||
mkHost =
|
||||
hostPath: overlays:
|
||||
import hostPath {
|
||||
inherit inputs overlays;
|
||||
};
|
||||
in
|
||||
{
|
||||
nixosConfigurations = {
|
||||
# Machine
|
||||
mafuyu = mkHost ./hosts/machine/mafuyu overlays;
|
||||
mizuki = mkHost ./hosts/machine/mizuki overlays;
|
||||
ena = mkHost ./hosts/machine/ena overlays;
|
||||
ribbon = mkHost ./hosts/machine/ribbon [
|
||||
paring.overlays.default
|
||||
imnyang.overlays.default
|
||||
];
|
||||
|
||||
# Server
|
||||
hikari = mkHost ./hosts/server/hikari/default overlays;
|
||||
hako = mkHost ./hosts/server/hikari/hako overlays;
|
||||
natsu = mkHost ./hosts/server/natsu overlays;
|
||||
kazusa = mkHost ./hosts/server/kazusa overlays;
|
||||
};
|
||||
|
||||
darwinConfigurations = {
|
||||
# Machine
|
||||
kanade = mkHost ./hosts/machine/kanade overlays;
|
||||
};
|
||||
};
|
||||
}
|
||||
59
hosts/machine/ena/configuration.nix
Normal file
59
hosts/machine/ena/configuration.nix
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
|
||||
"${inputs.self}/modules/nixos/base"
|
||||
"${inputs.self}/modules/nixos/features/boot.nix"
|
||||
"${inputs.self}/modules/nixos/features/fonts.nix"
|
||||
"${inputs.self}/modules/nixos/features/plasma.nix"
|
||||
"${inputs.self}/modules/nixos/features/sound.nix"
|
||||
"${inputs.self}/modules/nixos/features/packages.nix"
|
||||
"${inputs.self}/modules/nixos/features/catppuccin.nix"
|
||||
"${inputs.self}/modules/nixos/features/figma-agent.nix"
|
||||
"${inputs.self}/modules/nixos/features/sbctl.nix"
|
||||
"${inputs.self}/modules/nixos/features/grub-standalone.nix"
|
||||
"${inputs.self}/modules/nixos/features/virtualisation.nix"
|
||||
"${inputs.self}/modules/nixos/features/cockpit.nix"
|
||||
"${inputs.self}/modules/nixos/features/bluetooth.nix"
|
||||
"${inputs.self}/modules/nixos/features/graphics.nix"
|
||||
"${inputs.self}/modules/nixos/features/steam.nix"
|
||||
"${inputs.self}/modules/nixos/features/ssh.nix"
|
||||
];
|
||||
|
||||
networking = {
|
||||
hostName = "ena";
|
||||
networkmanager.enable = true;
|
||||
firewall.enable = false;
|
||||
};
|
||||
|
||||
networking.networkmanager.plugins = [
|
||||
pkgs.networkmanager-ssh
|
||||
];
|
||||
|
||||
services.printing.enable = true;
|
||||
services.power-profiles-daemon.enable = true;
|
||||
services.asusd.enable = true;
|
||||
services.netbird.enable = true;
|
||||
|
||||
systemd.services.asusctl-battery-limit = {
|
||||
description = "Set ASUS battery charge limit";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "asusd.service" ];
|
||||
after = [ "asusd.service" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${pkgs.asusctl}/bin/asusctl battery limit 95";
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
};
|
||||
|
||||
services.cloudflare-warp.enable = true;
|
||||
|
||||
system.stateVersion = "25.11";
|
||||
}
|
||||
42
hosts/machine/ena/default.nix
Normal file
42
hosts/machine/ena/default.nix
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
inputs,
|
||||
overlays,
|
||||
}:
|
||||
let
|
||||
inherit (inputs)
|
||||
nixpkgs
|
||||
home-manager
|
||||
catppuccin
|
||||
nix-flatpak
|
||||
plasma-manager
|
||||
spicetify-nix
|
||||
vicinae
|
||||
;
|
||||
in
|
||||
nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
./hardware-configuration.nix
|
||||
./configuration.nix
|
||||
catppuccin.nixosModules.catppuccin
|
||||
nix-flatpak.nixosModules.nix-flatpak
|
||||
# lanzaboote.nixosModules.lanzaboote
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.backupFileExtension = "backup";
|
||||
home-manager.sharedModules = [
|
||||
plasma-manager.homeModules.plasma-manager
|
||||
spicetify-nix.homeManagerModules.default
|
||||
vicinae.homeManagerModules.default
|
||||
];
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
home-manager.users.imnyang = import ./home;
|
||||
}
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
inherit overlays;
|
||||
};
|
||||
}
|
||||
71
hosts/machine/ena/hardware-configuration.nix
Normal file
71
hosts/machine/ena/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
# 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"
|
||||
"usbhid"
|
||||
];
|
||||
boot.initrd.kernelModules = [ "xe" ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.kernelParams = [
|
||||
# NVMe APST(Autonomous Power State Transition) 관련 이슈 방지
|
||||
"nvme_core.default_ps_max_latency_us=0"
|
||||
"xe.enable_psr=0"
|
||||
"intel_idle.max_cstate=2" # C-state를 깊게 들어가지 않도록 제한 (테스트 후 점진적으로 상향 가능)
|
||||
];
|
||||
hardware.enableRedistributableFirmware = true;
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/161e6b72-1ec6-4b9c-b1b7-325dd4320c2e";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
boot.initrd.luks.devices."luks-5a2a5e2d-749d-408e-82df-82e8607ae67e" = {
|
||||
device = "/dev/disk/by-uuid/5a2a5e2d-749d-408e-82df-82e8607ae67e";
|
||||
allowDiscards = true;
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/7078-16D1";
|
||||
fsType = "vfat";
|
||||
options = [
|
||||
"fmask=0077"
|
||||
"dmask=0077"
|
||||
];
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
extraPackages = with pkgs; [
|
||||
intel-media-driver
|
||||
intel-compute-runtime
|
||||
vpl-gpu-rt # Lunar Lake 비디오 가속을 위한 핵심 패키지
|
||||
];
|
||||
};
|
||||
|
||||
hardware.cpu.intel.updateMicrocode = true;
|
||||
|
||||
services.thermald.enable = true; # 인텔 CPU 발열 및 전력 관리 보조
|
||||
services.fstrim.enable = true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
# hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
15
hosts/machine/ena/home/config/plasma.nix
Normal file
15
hosts/machine/ena/home/config/plasma.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{ inputs, ... }:
|
||||
let
|
||||
assets = "${inputs.self}/assets";
|
||||
in
|
||||
{
|
||||
imports = [ "${inputs.self}/modules/home/plasma.nix" ];
|
||||
|
||||
programs.plasma.workspace.cursor = {
|
||||
theme = "pjsk-cursor-n25-ena-ani";
|
||||
};
|
||||
|
||||
programs.plasma.workspace.wallpaper = "${assets}/wallpaper/wallpaper1.jpg";
|
||||
|
||||
programs.plasma.kscreenlocker.appearance.wallpaper = "${assets}/wallpaper/wallpaper3.png";
|
||||
}
|
||||
57
hosts/machine/ena/home/config/shell.nix
Normal file
57
hosts/machine/ena/home/config/shell.nix
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
shellAliases = {
|
||||
# 디렉토리 네비게이션
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
|
||||
# ls 별칭
|
||||
ls = "eza --icons=always";
|
||||
ll = "eza --icons=always -l";
|
||||
la = "eza --icons=always -a";
|
||||
lla = "eza --icons=always -la";
|
||||
|
||||
# NixOS 관련
|
||||
rebuild = "nr";
|
||||
update = "nix flake update";
|
||||
clean = "sudo nix-collect-garbage -d";
|
||||
};
|
||||
|
||||
interactiveShellInit = ''
|
||||
set -g fish_greeting ""
|
||||
set -g fish_color_command blue
|
||||
set -g fish_color_error red
|
||||
set -g fish_color_param cyan
|
||||
'';
|
||||
};
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
format = "🎨 $directory:$character";
|
||||
add_newline = false;
|
||||
# username = {
|
||||
# style_user = "purple";
|
||||
# style_root = "purple";
|
||||
# format = "[$user]($style)";
|
||||
# show_always = true;
|
||||
# };
|
||||
# hostname = {
|
||||
# style = "green";
|
||||
# format = "[$hostname]($style)";
|
||||
# ssh_only = false;
|
||||
# };
|
||||
directory = {
|
||||
style = "fg:#fbb6c4";
|
||||
format = "[$path]($style)";
|
||||
truncation_length = 3;
|
||||
};
|
||||
character = {
|
||||
success_symbol = " 💕";
|
||||
error_symbol = " ⚠️";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
46
hosts/machine/ena/home/default.nix
Normal file
46
hosts/machine/ena/home/default.nix
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
xdg.enable = true;
|
||||
# gtk.enable = true;
|
||||
|
||||
home.stateVersion = "25.05";
|
||||
home.username = "imnyang";
|
||||
home.homeDirectory = "/home/imnyang";
|
||||
home.packages = import ./packages.nix { inherit pkgs inputs; };
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nano";
|
||||
VISUAL = "nano";
|
||||
};
|
||||
|
||||
xdg.configFile."fontconfig/conf.d/10-hm-fonts.conf".force = true;
|
||||
|
||||
programs.vicinae = {
|
||||
enable = true;
|
||||
systemd = {
|
||||
enable = true;
|
||||
autoStart = true;
|
||||
environment = {
|
||||
USE_LAYER_SHELL = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
imports = [
|
||||
"${inputs.self}/modules/home/git.nix"
|
||||
# "${inputs.self}/modules/home/firefox.nix
|
||||
"${inputs.self}/modules/home/neovim.nix"
|
||||
"${inputs.self}/modules/home/spicetify.nix"
|
||||
"${inputs.self}/modules/home/ghostty.nix"
|
||||
"${inputs.self}/modules/home/zed.nix"
|
||||
"${inputs.self}/modules/home/discord/linux.nix"
|
||||
"${inputs.self}/modules/home/vscode.nix"
|
||||
./config/shell.nix
|
||||
./config/plasma.nix
|
||||
];
|
||||
}
|
||||
27
hosts/machine/ena/home/packages.nix
Normal file
27
hosts/machine/ena/home/packages.nix
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{ pkgs, inputs }:
|
||||
let
|
||||
system = pkgs.stdenv.hostPlatform.system;
|
||||
pkgsPacketTracer8 = import inputs.nixpkgs-2511 {
|
||||
inherit system;
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
permittedInsecurePackages = [
|
||||
"ciscoPacketTracer8-8.2.2"
|
||||
];
|
||||
};
|
||||
};
|
||||
in
|
||||
with pkgs;
|
||||
(import ../../../../modules/home/packages.nix { inherit pkgs inputs; })
|
||||
++ [
|
||||
# tail-tray
|
||||
kdePackages.kcolorchooser
|
||||
fastfetch
|
||||
# amnezia-vpn
|
||||
# inputs.waterfox.packages.${pkgs.system}.waterfox
|
||||
gnome-network-displays
|
||||
element-desktop
|
||||
cisco-packet-tracer_9
|
||||
pkgsPacketTracer8.ciscoPacketTracer8
|
||||
# hoffice
|
||||
]
|
||||
23
hosts/machine/kanade/configuration.nix
Normal file
23
hosts/machine/kanade/configuration.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
overlays ? [ ],
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
./modules/nix.nix
|
||||
./modules/user.nix
|
||||
./modules/mac
|
||||
./modules/packages.nix
|
||||
./modules/homebrew/default.nix
|
||||
"${inputs.self}/modules/home/discord/mac.nix"
|
||||
];
|
||||
|
||||
nixpkgs = {
|
||||
hostPlatform = "aarch64-darwin";
|
||||
overlays = overlays;
|
||||
};
|
||||
|
||||
system.stateVersion = 5;
|
||||
}
|
||||
36
hosts/machine/kanade/default.nix
Normal file
36
hosts/machine/kanade/default.nix
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
inputs,
|
||||
overlays,
|
||||
}:
|
||||
let
|
||||
inherit (inputs) darwin home-manager;
|
||||
in
|
||||
darwin.lib.darwinSystem {
|
||||
system = "aarch64-darwin";
|
||||
modules = [
|
||||
./configuration.nix
|
||||
home-manager.darwinModules.home-manager
|
||||
inputs.nix-homebrew.darwinModules.nix-homebrew
|
||||
{
|
||||
nix-homebrew = {
|
||||
enable = true;
|
||||
user = "imnyang";
|
||||
mutableTaps = true;
|
||||
# nix-darwin's Homebrew module uses /opt/homebrew/bin/brew directly.
|
||||
# The nix-homebrew integration calls `brew` before it is on PATH.
|
||||
enableFishIntegration = false;
|
||||
};
|
||||
}
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.backupFileExtension = "backup";
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
home-manager.users.imnyang = import ./home;
|
||||
}
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
inherit overlays;
|
||||
};
|
||||
}
|
||||
31
hosts/machine/kanade/home/config/git.nix
Normal file
31
hosts/machine/kanade/home/config/git.nix
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.git = {
|
||||
enable = true;
|
||||
|
||||
# 기본 사용자 설정
|
||||
# userName = "imnyang";
|
||||
# userEmail = "imnyang@pm.me";
|
||||
|
||||
settings = {
|
||||
user = {
|
||||
signingkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOHP3Z+AYrRh9f8TYyqChKfeyNm3lOe0F75AwRHTTaxD";
|
||||
name = "imnyang";
|
||||
email = "imnyang@pm.me";
|
||||
};
|
||||
# gpg = {
|
||||
# format = "ssh";
|
||||
# "ssh".program = "/Applications/1Password.app/Contents/MacOS/op-ssh-sign";
|
||||
# };
|
||||
# commit.gpgsign = true;
|
||||
init.defaultBranch = "main";
|
||||
pull.rebase = false;
|
||||
includeIf."gitdir:~/workspaces/git/adofai.gg/" = {
|
||||
path = builtins.toFile "gitconfig-adofaigg" ''
|
||||
[user]
|
||||
email = imnyang@adofai.gg
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
64
hosts/machine/kanade/home/config/shell.nix
Normal file
64
hosts/machine/kanade/home/config/shell.nix
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
{
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
shellAliases = {
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
|
||||
ls = "eza --icons=always";
|
||||
ll = "eza --icons=always -l";
|
||||
la = "eza --icons=always -a";
|
||||
lla = "eza --icons=always -la";
|
||||
|
||||
# nix-darwin 관련
|
||||
rebuild = "sudo darwin-rebuild switch --flake .#kanade";
|
||||
update = "nix flake update";
|
||||
clean = "nix-collect-garbage -d";
|
||||
};
|
||||
|
||||
interactiveShellInit = ''
|
||||
set -g fish_greeting ""
|
||||
set -g fish_color_command blue
|
||||
set -g fish_color_error red
|
||||
set -g fish_color_param cyan
|
||||
|
||||
set -gx ANDROID_HOME "$HOME/Library/Android/sdk"
|
||||
if test -d "$ANDROID_HOME/ndk"
|
||||
set -l ndk_versions "$ANDROID_HOME"/ndk/*
|
||||
if test (count $ndk_versions) -gt 0
|
||||
set -gx NDK_HOME $ndk_versions[-1]
|
||||
end
|
||||
end
|
||||
|
||||
set -gx SSH_AUTH_SOCK /Users/imnyang/.ssh/proton-pass-agent.sock
|
||||
'';
|
||||
};
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
format = "🎼 $directory:$character";
|
||||
add_newline = false;
|
||||
# username = {
|
||||
# style_user = "purple";
|
||||
# style_root = "purple";
|
||||
# format = "[$user]($style)";
|
||||
# show_always = true;
|
||||
# };
|
||||
# hostname = {
|
||||
# style = "green";
|
||||
# format = "[$hostname]($style)";
|
||||
# ssh_only = false;
|
||||
# };
|
||||
directory = {
|
||||
style = "fg:#fbb6c4";
|
||||
format = "[$path]($style)";
|
||||
truncation_length = 3;
|
||||
};
|
||||
character = {
|
||||
success_symbol = " 💕";
|
||||
error_symbol = " ⚠️";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
27
hosts/machine/kanade/home/default.nix
Normal file
27
hosts/machine/kanade/home/default.nix
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
xdg.enable = true;
|
||||
|
||||
home.stateVersion = "25.05";
|
||||
home.username = "imnyang";
|
||||
home.homeDirectory = "/Users/imnyang";
|
||||
home.packages = import ./packages.nix { inherit pkgs inputs; };
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
VISUAL = "nvim";
|
||||
};
|
||||
|
||||
imports = [
|
||||
"${inputs.self}/modules/home/neovim.nix"
|
||||
"${inputs.self}/modules/home/ghostty.nix"
|
||||
"${inputs.self}/modules/home/zed.nix"
|
||||
./config/git.nix
|
||||
./config/shell.nix
|
||||
];
|
||||
}
|
||||
55
hosts/machine/kanade/home/packages.nix
Normal file
55
hosts/machine/kanade/home/packages.nix
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
{ pkgs, inputs, ... }:
|
||||
let
|
||||
dr = import ../../../../modules/nixos/features/packages/dr.nix { inherit pkgs; };
|
||||
in
|
||||
with pkgs;
|
||||
[
|
||||
# Language runtimes and package managers
|
||||
nodejs
|
||||
pnpm
|
||||
yarn
|
||||
bun
|
||||
python3
|
||||
rustup
|
||||
go
|
||||
|
||||
# Editors and database tools
|
||||
neovide
|
||||
jetbrains.datagrip
|
||||
jetbrains.idea
|
||||
|
||||
# CLI utilities
|
||||
ripgrep
|
||||
fd
|
||||
bat
|
||||
fzf
|
||||
jq
|
||||
eza
|
||||
fastfetch
|
||||
btop
|
||||
|
||||
# Source control
|
||||
gh
|
||||
lazygit
|
||||
|
||||
# Browsers
|
||||
google-chrome
|
||||
|
||||
# Development applications
|
||||
postman
|
||||
scrcpy
|
||||
|
||||
# Virtualisation
|
||||
utm
|
||||
|
||||
# Media
|
||||
iina
|
||||
|
||||
# Gaming
|
||||
prismlauncher
|
||||
|
||||
# Nix workflows
|
||||
dr
|
||||
|
||||
inputs.muvel.packages.${pkgs.stdenv.hostPlatform.system}.muvel
|
||||
]
|
||||
8
hosts/machine/kanade/modules/homebrew/brews.nix
Normal file
8
hosts/machine/kanade/modules/homebrew/brews.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
[
|
||||
# Apple and mobile development
|
||||
"cocoapods"
|
||||
"watchman"
|
||||
|
||||
# Media customisation
|
||||
"spicetify-cli"
|
||||
]
|
||||
46
hosts/machine/kanade/modules/homebrew/casks.nix
Normal file
46
hosts/machine/kanade/modules/homebrew/casks.nix
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
[
|
||||
# Security and networking
|
||||
"1password"
|
||||
"cloudflare-warp"
|
||||
"protonvpn"
|
||||
"microsoft-edge@canary"
|
||||
|
||||
# Communication
|
||||
"discord"
|
||||
"discord@canary"
|
||||
"proton-mail"
|
||||
"signal"
|
||||
"zoom"
|
||||
|
||||
# Productivity and design
|
||||
"camo-studio"
|
||||
"proton-drive"
|
||||
"figma"
|
||||
"notion"
|
||||
|
||||
# Development
|
||||
"android-studio"
|
||||
"burp-suite"
|
||||
"docker-desktop"
|
||||
"unity-hub"
|
||||
"visual-studio-code@insiders"
|
||||
"zed"
|
||||
"codex"
|
||||
"codex-app"
|
||||
"codexbar"
|
||||
|
||||
# Media and audio
|
||||
"finetune"
|
||||
"spotify"
|
||||
|
||||
# Gaming and remote access
|
||||
"parsec"
|
||||
"steam"
|
||||
|
||||
# macOS utilities
|
||||
"alt-tab"
|
||||
"keka"
|
||||
"raycast"
|
||||
"thaw"
|
||||
"mole-app"
|
||||
]
|
||||
18
hosts/machine/kanade/modules/homebrew/default.nix
Normal file
18
hosts/machine/kanade/modules/homebrew/default.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
...
|
||||
}:
|
||||
{
|
||||
homebrew = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
|
||||
onActivation = {
|
||||
autoUpdate = true;
|
||||
cleanup = "zap";
|
||||
upgrade = true;
|
||||
};
|
||||
|
||||
brews = import ./brews.nix;
|
||||
casks = import ./casks.nix;
|
||||
};
|
||||
}
|
||||
34
hosts/machine/kanade/modules/mac/avatar.nix
Normal file
34
hosts/machine/kanade/modules/mac/avatar.nix
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
avatar = pkgs.runCommand "kanade-avatar.jpg" { nativeBuildInputs = [ pkgs.imagemagick ]; } ''
|
||||
magick "${inputs.self}/assets/avatar.webp" -quality 92 "$out"
|
||||
'';
|
||||
in
|
||||
{
|
||||
system.activationScripts.postActivation.text = ''
|
||||
avatarPath="/Library/User Pictures/imnyang.jpg"
|
||||
importFile="$(/usr/bin/mktemp /tmp/imnyang-avatar.XXXXXX)"
|
||||
|
||||
/usr/bin/install -d -m 0755 "/Library/User Pictures"
|
||||
/usr/bin/install -m 0644 "${avatar}" "$avatarPath"
|
||||
|
||||
# Replace both account-picture representations. JPEGPhoto is embedded in
|
||||
# the directory record and is used by the login screen and System Settings.
|
||||
/usr/bin/dscl . -delete /Users/imnyang JPEGPhoto >/dev/null 2>&1 || true
|
||||
/usr/bin/dscl . -delete /Users/imnyang Picture >/dev/null 2>&1 || true
|
||||
/usr/bin/dscl . -create /Users/imnyang Picture "$avatarPath"
|
||||
|
||||
/usr/bin/printf '%s\n%s:%s' \
|
||||
'0x0A 0x5C 0x3A 0x2C dsRecTypeStandard:Users 2 dsAttrTypeStandard:RecordName externalbinary:dsAttrTypeStandard:JPEGPhoto' \
|
||||
'imnyang' \
|
||||
"$avatarPath" > "$importFile"
|
||||
/usr/bin/dsimport "$importFile" /Local/Default M
|
||||
/bin/rm -f "$importFile"
|
||||
|
||||
/usr/bin/dscacheutil -flushcache
|
||||
'';
|
||||
}
|
||||
10
hosts/machine/kanade/modules/mac/default.nix
Normal file
10
hosts/machine/kanade/modules/mac/default.nix
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
imports = [
|
||||
./avatar.nix
|
||||
./dock.nix
|
||||
./keyboard.nix
|
||||
./preferences.nix
|
||||
./touch-id.nix
|
||||
./wallpaper.nix
|
||||
];
|
||||
}
|
||||
36
hosts/machine/kanade/modules/mac/dock.nix
Normal file
36
hosts/machine/kanade/modules/mac/dock.nix
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
system.defaults.dock = {
|
||||
autohide = false;
|
||||
show-recents = true;
|
||||
|
||||
wvous-bl-corner = 1;
|
||||
wvous-br-corner = 1;
|
||||
wvous-tl-corner = 1;
|
||||
wvous-tr-corner = 1;
|
||||
|
||||
persistent-apps = [
|
||||
"/System/Applications/Apps.app"
|
||||
"/Applications/Microsoft Edge Canary.app"
|
||||
"/Applications/Discord.app"
|
||||
"/Applications/KakaoTalk.app"
|
||||
"/Applications/Signal.app"
|
||||
"/Applications/Proton Mail.app"
|
||||
# "/Applications/Proton Pass.app"
|
||||
# "/System/Applications/Mail.app"
|
||||
"/Applications/1Password.app"
|
||||
"/Applications/Figma.app"
|
||||
"/Applications/Notion.app"
|
||||
# "/Applications/Notion Calendar.app"
|
||||
"${pkgs.utm}/Applications/UTM.app"
|
||||
"/Applications/Spotify.app"
|
||||
"${pkgs.ghostty-bin}/Applications/Ghostty.app"
|
||||
"/Applications/Visual Studio Code - Insiders.app"
|
||||
"/Applications/Zed.app"
|
||||
"/System/Applications/System Settings.app"
|
||||
];
|
||||
mru-spaces = false;
|
||||
tilesize = 48;
|
||||
orientation = "bottom";
|
||||
};
|
||||
}
|
||||
14
hosts/machine/kanade/modules/mac/keyboard.nix
Normal file
14
hosts/machine/kanade/modules/mac/keyboard.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
system.keyboard.enableKeyMapping = true;
|
||||
|
||||
system.defaults.NSGlobalDomain = {
|
||||
ApplePressAndHoldEnabled = false;
|
||||
InitialKeyRepeat = 15;
|
||||
KeyRepeat = 2;
|
||||
NSAutomaticCapitalizationEnabled = false;
|
||||
NSAutomaticDashSubstitutionEnabled = false;
|
||||
NSAutomaticPeriodSubstitutionEnabled = false;
|
||||
NSAutomaticQuoteSubstitutionEnabled = false;
|
||||
NSAutomaticSpellingCorrectionEnabled = false;
|
||||
};
|
||||
}
|
||||
92
hosts/machine/kanade/modules/mac/preferences.nix
Normal file
92
hosts/machine/kanade/modules/mac/preferences.nix
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
# sudo_local is managed as a regular file by touch-id.nix because macOS 26
|
||||
# rejects nix-darwin's symlink-based /etc/pam.d management.
|
||||
security.pam.services.sudo_local.enable = false;
|
||||
|
||||
networking = {
|
||||
hostName = "kanade";
|
||||
computerName = "kanade";
|
||||
localHostName = "kanade";
|
||||
};
|
||||
|
||||
time.timeZone = "Asia/Seoul";
|
||||
|
||||
# Keep the terminal font declared in the Ghostty Home Manager module available
|
||||
# to native macOS applications as well.
|
||||
fonts.packages = [ pkgs.nerd-fonts.jetbrains-mono ];
|
||||
|
||||
system.defaults = {
|
||||
NSGlobalDomain = {
|
||||
AppleICUForce24HourTime = true;
|
||||
AppleMeasurementUnits = "Centimeters";
|
||||
AppleTemperatureUnit = "Celsius";
|
||||
|
||||
AppleInterfaceStyleSwitchesAutomatically = false;
|
||||
AppleInterfaceStyle = null;
|
||||
|
||||
NSAutomaticCapitalizationEnabled = false;
|
||||
NSAutomaticDashSubstitutionEnabled = false;
|
||||
NSAutomaticPeriodSubstitutionEnabled = false;
|
||||
NSAutomaticQuoteSubstitutionEnabled = false;
|
||||
NSAutomaticSpellingCorrectionEnabled = false;
|
||||
|
||||
AppleShowAllExtensions = true;
|
||||
AppleShowAllFiles = true;
|
||||
NSNavPanelExpandedStateForSaveMode = true;
|
||||
NSNavPanelExpandedStateForSaveMode2 = true;
|
||||
"com.apple.sound.beep.feedback" = 0;
|
||||
};
|
||||
|
||||
SoftwareUpdate = {
|
||||
AutomaticallyInstallMacOSUpdates = false;
|
||||
};
|
||||
|
||||
finder = {
|
||||
AppleShowAllExtensions = true;
|
||||
FXEnableExtensionChangeWarning = false;
|
||||
FXDefaultSearchScope = "SCcf";
|
||||
FXRemoveOldTrashItems = true;
|
||||
ShowPathbar = true;
|
||||
ShowStatusBar = true;
|
||||
# _FXShowPosixPathInTitle = true;
|
||||
};
|
||||
|
||||
menuExtraClock = {
|
||||
ShowAMPM = false;
|
||||
ShowDate = 1;
|
||||
ShowSeconds = false;
|
||||
Show24Hour = true;
|
||||
};
|
||||
|
||||
trackpad = {
|
||||
Clicking = true;
|
||||
TrackpadRightClick = true;
|
||||
TrackpadThreeFingerDrag = true;
|
||||
};
|
||||
|
||||
loginwindow.GuestEnabled = false;
|
||||
|
||||
CustomUserPreferences = {
|
||||
"com.apple.AdLib" = {
|
||||
allowApplePersonalizedAdvertising = false;
|
||||
};
|
||||
"com.apple.controlcenter" = {
|
||||
BatteryShowPercentage = true;
|
||||
};
|
||||
"com.apple.desktopservices" = {
|
||||
DSDontWriteNetworkStores = true;
|
||||
DSDontWriteUSBStores = true;
|
||||
};
|
||||
"com.apple.finder"._FXSortFoldersFirst = true;
|
||||
"com.apple.screensaver" = {
|
||||
askForPassword = 1;
|
||||
askForPasswordDelay = 0;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
system.activationScripts.postActivation.text = ''
|
||||
/System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u
|
||||
'';
|
||||
}
|
||||
12
hosts/machine/kanade/modules/mac/touch-id.nix
Normal file
12
hosts/machine/kanade/modules/mac/touch-id.nix
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{ pkgs, ... }:
|
||||
let
|
||||
sudoLocal = pkgs.writeText "sudo_local" ''
|
||||
# Managed by nix-darwin: use Touch ID for sudo with password fallback.
|
||||
auth sufficient pam_tid.so
|
||||
'';
|
||||
in
|
||||
{
|
||||
system.activationScripts.postActivation.text = ''
|
||||
/usr/bin/install -m 0444 "${sudoLocal}" /etc/pam.d/sudo_local
|
||||
'';
|
||||
}
|
||||
42
hosts/machine/kanade/modules/mac/wallpaper.nix
Normal file
42
hosts/machine/kanade/modules/mac/wallpaper.nix
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
wallpaper = "${inputs.self}/assets/wallpaper/wallpaper1.jpg";
|
||||
setWallpaperScript = pkgs.writeShellScriptBin "set-wallpaper-script" ''
|
||||
set -eu
|
||||
|
||||
# System Events runs in the logged-in Aqua session and updates every Space.
|
||||
# Retry because launch agents can start before the desktop is fully ready.
|
||||
for attempt in {1..12}; do
|
||||
if /usr/bin/osascript <<'APPLESCRIPT'
|
||||
tell application "System Events"
|
||||
tell every desktop
|
||||
set picture to "${wallpaper}"
|
||||
end tell
|
||||
end tell
|
||||
APPLESCRIPT
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
/bin/sleep 5
|
||||
done
|
||||
|
||||
exit 1
|
||||
'';
|
||||
in
|
||||
{
|
||||
environment.systemPackages = [ setWallpaperScript ];
|
||||
|
||||
launchd.user.agents.set-wallpaper = {
|
||||
command = "${setWallpaperScript}/bin/set-wallpaper-script";
|
||||
serviceConfig = {
|
||||
RunAtLoad = true;
|
||||
ProcessType = "Interactive";
|
||||
LimitLoadToSessionType = "Aqua";
|
||||
};
|
||||
};
|
||||
}
|
||||
37
hosts/machine/kanade/modules/nix.nix
Normal file
37
hosts/machine/kanade/modules/nix.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{ ... }:
|
||||
{
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
nix.settings = {
|
||||
sandbox = "relaxed";
|
||||
experimental-features = [
|
||||
"nix-command"
|
||||
"flakes"
|
||||
];
|
||||
# Optimising during every build can race on Darwin. Run it separately instead.
|
||||
auto-optimise-store = false;
|
||||
trusted-users = [
|
||||
"imnyang"
|
||||
];
|
||||
substituters = [
|
||||
"https://cache.mizuki.guru"
|
||||
"https://nix.mizuki.my/public"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"cache.mizuki.guru-1:EbUC9b0ryD7BJKqfT8fl4GoS2ojLV+hI9fW1al5Whp0="
|
||||
"public:SnHrtrxbCPcZujbJdgsKFeObTfRKQl5KhrI+LljtZUE="
|
||||
];
|
||||
};
|
||||
|
||||
nix.optimise.automatic = true;
|
||||
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
interval = {
|
||||
Weekday = 0;
|
||||
Hour = 3;
|
||||
Minute = 15;
|
||||
};
|
||||
options = "--delete-older-than 7d";
|
||||
};
|
||||
}
|
||||
13
hosts/machine/kanade/modules/packages.nix
Normal file
13
hosts/machine/kanade/modules/packages.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
# Recovery and bootstrap tools
|
||||
curl
|
||||
wget
|
||||
vim
|
||||
|
||||
# Nix tooling
|
||||
nixd
|
||||
nil
|
||||
];
|
||||
}
|
||||
15
hosts/machine/kanade/modules/user.nix
Normal file
15
hosts/machine/kanade/modules/user.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
system.primaryUser = "imnyang";
|
||||
|
||||
users.users.imnyang = {
|
||||
name = "imnyang";
|
||||
home = "/Users/imnyang";
|
||||
shell = pkgs.fish;
|
||||
};
|
||||
|
||||
environment.shells = [ pkgs.fish ];
|
||||
|
||||
programs.fish.enable = true;
|
||||
programs.zsh.enable = true;
|
||||
}
|
||||
64
hosts/machine/mafuyu/configuration.nix
Normal file
64
hosts/machine/mafuyu/configuration.nix
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
{ pkgs, inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
|
||||
"${inputs.self}/modules/nixos/base"
|
||||
"${inputs.self}/modules/nixos/features/boot.nix"
|
||||
"${inputs.self}/modules/nixos/features/fonts.nix"
|
||||
"${inputs.self}/modules/nixos/features/packages.nix"
|
||||
"${inputs.self}/modules/nixos/features/plasma.nix"
|
||||
"${inputs.self}/modules/nixos/features/sound.nix"
|
||||
"${inputs.self}/modules/nixos/features/catppuccin.nix"
|
||||
"${inputs.self}/modules/nixos/features/ssh.nix"
|
||||
"${inputs.self}/modules/nixos/features/steam.nix"
|
||||
"${inputs.self}/modules/nixos/features/sunshine.nix"
|
||||
];
|
||||
|
||||
networking = {
|
||||
hostName = "mafuyu";
|
||||
networkmanager.enable = true;
|
||||
firewall.enable = false;
|
||||
};
|
||||
|
||||
services.caddy = {
|
||||
enable = true;
|
||||
virtualHosts."http://broadcast.epc.mizuki.arpa".extraConfig = ''
|
||||
@preflight method OPTIONS
|
||||
|
||||
header {
|
||||
Access-Control-Allow-Origin *
|
||||
Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS"
|
||||
Access-Control-Allow-Headers *
|
||||
}
|
||||
|
||||
respond @preflight "" 204
|
||||
|
||||
reverse_proxy 127.0.0.1:6769
|
||||
'';
|
||||
virtualHosts."http://broadcast.epc.mizuki.arpa:8027".extraConfig = ''
|
||||
@preflight method OPTIONS
|
||||
|
||||
header {
|
||||
Access-Control-Allow-Origin *
|
||||
Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS"
|
||||
Access-Control-Allow-Headers *
|
||||
}
|
||||
|
||||
respond @preflight "" 204
|
||||
|
||||
reverse_proxy 127.0.0.1:1108
|
||||
'';
|
||||
};
|
||||
|
||||
services.displayManager = {
|
||||
plasma-login-manager.enable = true;
|
||||
autoLogin.user = "imnyang";
|
||||
};
|
||||
|
||||
users.users.imnyang.openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOHP3Z+AYrRh9f8TYyqChKfeyNm3lOe0F75AwRHTTaxD imnyang@mizuki"
|
||||
];
|
||||
|
||||
system.stateVersion = "26.05";
|
||||
}
|
||||
37
hosts/machine/mafuyu/default.nix
Normal file
37
hosts/machine/mafuyu/default.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
inputs,
|
||||
overlays,
|
||||
}:
|
||||
let
|
||||
inherit (inputs)
|
||||
nixpkgs
|
||||
home-manager
|
||||
catppuccin
|
||||
plasma-manager
|
||||
spicetify-nix
|
||||
;
|
||||
in
|
||||
nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
./hardware-configuration.nix
|
||||
./configuration.nix
|
||||
catppuccin.nixosModules.catppuccin
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.backupFileExtension = "backup";
|
||||
home-manager.sharedModules = [
|
||||
plasma-manager.homeModules.plasma-manager
|
||||
spicetify-nix.homeManagerModules.default
|
||||
];
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
home-manager.users.imnyang = import ./home;
|
||||
}
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
inherit overlays;
|
||||
};
|
||||
}
|
||||
79
hosts/machine/mafuyu/hardware-configuration.nix
Normal file
79
hosts/machine/mafuyu/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
# 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"
|
||||
"ahci"
|
||||
"usb_storage"
|
||||
"usbhid"
|
||||
"uas"
|
||||
"sd_mod"
|
||||
];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
boot.kernelParams = [
|
||||
# 가상 디스플레이(해상도) 1개 생성
|
||||
"video=virtual:1920x1080@60"
|
||||
];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/223889e0-caa4-4dc5-a7b3-e5260230896f";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/7233-6B3C";
|
||||
fsType = "vfat";
|
||||
options = [
|
||||
"fmask=0077"
|
||||
"dmask=0077"
|
||||
];
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
hardware.nvidia = {
|
||||
modesetting.enable = true;
|
||||
powerManagement.enable = true;
|
||||
powerManagement.finegrained = false; # 이슈 있으면 비활하기
|
||||
|
||||
open = false;
|
||||
nvidiaSettings = true;
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
};
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
libva-vdpau-driver
|
||||
libvdpau-va-gl
|
||||
vulkan-loader
|
||||
nvidia-vaapi-driver
|
||||
vulkan-validation-layers
|
||||
vulkan-extension-layer
|
||||
];
|
||||
extraPackages32 = with pkgs.pkgsi686Linux; [
|
||||
libva-vdpau-driver
|
||||
libvdpau-va-gl
|
||||
];
|
||||
};
|
||||
}
|
||||
16
hosts/machine/mafuyu/home/config/plasma.nix
Normal file
16
hosts/machine/mafuyu/home/config/plasma.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{ inputs, ... }:
|
||||
let
|
||||
assets = "${inputs.self}/assets";
|
||||
in
|
||||
{
|
||||
imports = [ "${inputs.self}/modules/home/plasma.nix" ];
|
||||
services.kdeconnect.enable = true;
|
||||
|
||||
programs.plasma.workspace.cursor = {
|
||||
theme = "pjsk-cursor-n25-mafuyu-ani";
|
||||
};
|
||||
|
||||
programs.plasma.workspace.wallpaper = "${assets}/wallpaper/wallpaper3.png";
|
||||
|
||||
programs.plasma.kscreenlocker.appearance.wallpaper = "${assets}/wallpaper/wallpaper3.png";
|
||||
}
|
||||
54
hosts/machine/mafuyu/home/config/shell.nix
Normal file
54
hosts/machine/mafuyu/home/config/shell.nix
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
shellAliases = {
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
|
||||
ls = "eza --icons=always";
|
||||
ll = "eza --icons=always -l";
|
||||
la = "eza --icons=always -a";
|
||||
lla = "eza --icons=always -la";
|
||||
|
||||
rebuild = "nr";
|
||||
update = "nix flake update";
|
||||
clean = "sudo nix-collect-garbage -d";
|
||||
};
|
||||
|
||||
interactiveShellInit = ''
|
||||
set -g fish_greeting ""
|
||||
set -g fish_color_command blue
|
||||
set -g fish_color_error red
|
||||
set -g fish_color_param cyan
|
||||
'';
|
||||
};
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
format = "❄️ $directory:$character";
|
||||
add_newline = false;
|
||||
# username = {
|
||||
# style_user = "purple";
|
||||
# style_root = "purple";
|
||||
# format = "[$user]($style)";
|
||||
# show_always = true;
|
||||
# };
|
||||
# hostname = {
|
||||
# style = "green";
|
||||
# format = "[$hostname]($style)";
|
||||
# ssh_only = false;
|
||||
# };
|
||||
directory = {
|
||||
style = "fg:#fbb6c4";
|
||||
format = "[$path]($style)";
|
||||
truncation_length = 3;
|
||||
};
|
||||
character = {
|
||||
success_symbol = " 💕";
|
||||
error_symbol = " ⚠️";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
44
hosts/machine/mafuyu/home/default.nix
Normal file
44
hosts/machine/mafuyu/home/default.nix
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
xdg.enable = true;
|
||||
|
||||
home.stateVersion = "25.05";
|
||||
home.username = "imnyang";
|
||||
home.homeDirectory = "/home/imnyang";
|
||||
home.packages = import ./packages.nix { inherit pkgs inputs; };
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
VISUAL = "nvim";
|
||||
};
|
||||
|
||||
xdg.configFile."fontconfig/conf.d/10-hm-fonts.conf".force = true;
|
||||
|
||||
programs.git = {
|
||||
enable = true;
|
||||
settings = {
|
||||
user = {
|
||||
name = "imnyang";
|
||||
email = "imnyang@pm.me";
|
||||
};
|
||||
commit.gpgsign = false;
|
||||
init.defaultBranch = "main";
|
||||
pull.rebase = false;
|
||||
};
|
||||
};
|
||||
|
||||
imports = [
|
||||
"${inputs.self}/modules/home/firefox.nix"
|
||||
"${inputs.self}/modules/home/neovim.nix"
|
||||
"${inputs.self}/modules/home/ghostty.nix"
|
||||
"${inputs.self}/modules/home/zed.nix"
|
||||
"${inputs.self}/modules/home/discord/linux.nix"
|
||||
./config/shell.nix
|
||||
./config/plasma.nix
|
||||
];
|
||||
}
|
||||
7
hosts/machine/mafuyu/home/packages.nix
Normal file
7
hosts/machine/mafuyu/home/packages.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{ pkgs, inputs }:
|
||||
with pkgs;
|
||||
[
|
||||
pjsk-cursor.n25.ani
|
||||
codex
|
||||
inputs.codex-app.packages.${stdenv.buildPlatform.system}.codex-desktop
|
||||
]
|
||||
55
hosts/machine/mizuki/configuration.nix
Normal file
55
hosts/machine/mizuki/configuration.nix
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
{ pkgs, inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
|
||||
"${inputs.self}/modules/nixos/base"
|
||||
"${inputs.self}/modules/nixos/features/boot.nix"
|
||||
"${inputs.self}/modules/nixos/features/fonts.nix"
|
||||
"${inputs.self}/modules/nixos/features/packages.nix"
|
||||
"${inputs.self}/modules/nixos/features/plasma.nix"
|
||||
"${inputs.self}/modules/nixos/features/sound.nix"
|
||||
"${inputs.self}/modules/nixos/features/catppuccin.nix"
|
||||
"${inputs.self}/modules/nixos/features/figma-agent.nix"
|
||||
"${inputs.self}/modules/nixos/features/cockpit.nix"
|
||||
"${inputs.self}/modules/nixos/features/bluetooth.nix"
|
||||
"${inputs.self}/modules/nixos/features/graphics.nix"
|
||||
"${inputs.self}/modules/nixos/features/ssh.nix"
|
||||
"${inputs.self}/modules/nixos/features/virtualisation.nix"
|
||||
"${inputs.self}/modules/nixos/features/steam.nix"
|
||||
"${inputs.self}/modules/nixos/features/sunshine.nix"
|
||||
];
|
||||
|
||||
networking = {
|
||||
hostName = "mizuki";
|
||||
networkmanager.enable = true;
|
||||
firewall.enable = false;
|
||||
interfaces = {
|
||||
enp3s0 = {
|
||||
wakeOnLan.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.caddy = {
|
||||
enable = true;
|
||||
virtualHosts."http://broadcast.epc.mizuki.arpa".extraConfig = ''
|
||||
@preflight method OPTIONS
|
||||
|
||||
header {
|
||||
Access-Control-Allow-Origin *
|
||||
Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS"
|
||||
Access-Control-Allow-Headers *
|
||||
}
|
||||
|
||||
respond @preflight "" 204
|
||||
|
||||
reverse_proxy 127.0.0.1:6769
|
||||
'';
|
||||
};
|
||||
|
||||
services.printing.enable = true;
|
||||
services.flatpak.enable = true;
|
||||
|
||||
system.stateVersion = "26.05";
|
||||
}
|
||||
41
hosts/machine/mizuki/default.nix
Normal file
41
hosts/machine/mizuki/default.nix
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
inputs,
|
||||
overlays,
|
||||
}:
|
||||
let
|
||||
inherit (inputs)
|
||||
nixpkgs
|
||||
home-manager
|
||||
catppuccin
|
||||
nix-flatpak
|
||||
plasma-manager
|
||||
spicetify-nix
|
||||
vicinae
|
||||
;
|
||||
in
|
||||
nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
./hardware-configuration.nix
|
||||
./configuration.nix
|
||||
catppuccin.nixosModules.catppuccin
|
||||
nix-flatpak.nixosModules.nix-flatpak
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.backupFileExtension = "backup";
|
||||
home-manager.sharedModules = [
|
||||
plasma-manager.homeModules.plasma-manager
|
||||
spicetify-nix.homeManagerModules.default
|
||||
vicinae.homeManagerModules.default
|
||||
];
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
home-manager.users.imnyang = import ./home;
|
||||
}
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
inherit overlays;
|
||||
};
|
||||
}
|
||||
91
hosts/machine/mizuki/hardware-configuration.nix
Normal file
91
hosts/machine/mizuki/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
# 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"
|
||||
"ahci"
|
||||
"nvme"
|
||||
"usbhid"
|
||||
"sd_mod"
|
||||
];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.kernelParams = [ "nvidia.NV_temporaryFilePath=/var/tmp" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
boot.extraModprobeConfig = ''
|
||||
options nvidia NVreg_PreserveVideoMemoryAllocations=1
|
||||
'';
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/mapper/luks-f103ab07-586f-4bfe-b8e9-cdee9d504a0a";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
boot.initrd.luks.devices."luks-f103ab07-586f-4bfe-b8e9-cdee9d504a0a".device = "/dev/disk/by-uuid/f103ab07-586f-4bfe-b8e9-cdee9d504a0a";
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/C9F2-8CD3";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0077" "dmask=0077" ];
|
||||
};
|
||||
|
||||
fileSystems."/data" = {
|
||||
device = "/dev/disk/by-uuid/0fa840c5-07ad-46b5-a0e8-0ed958d1bb7a";
|
||||
fsType = "ext4";
|
||||
options = [
|
||||
"defaults"
|
||||
"nofail"
|
||||
];
|
||||
};
|
||||
|
||||
swapDevices = [
|
||||
{
|
||||
device = "/swapfile";
|
||||
size = 32 * 1024;
|
||||
}
|
||||
];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
hardware.nvidia = {
|
||||
modesetting.enable = true;
|
||||
powerManagement.enable = true;
|
||||
powerManagement.finegrained = false; # 이슈 있으면 비활하기
|
||||
|
||||
open = false;
|
||||
nvidiaSettings = true;
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
};
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
libva-vdpau-driver
|
||||
libvdpau-va-gl
|
||||
vulkan-loader
|
||||
nvidia-vaapi-driver
|
||||
vulkan-validation-layers
|
||||
vulkan-extension-layer
|
||||
];
|
||||
extraPackages32 = with pkgs.pkgsi686Linux; [
|
||||
libva-vdpau-driver
|
||||
libvdpau-va-gl
|
||||
];
|
||||
};
|
||||
}
|
||||
16
hosts/machine/mizuki/home/config/plasma.nix
Normal file
16
hosts/machine/mizuki/home/config/plasma.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{ inputs, ... }:
|
||||
let
|
||||
assets = "${inputs.self}/assets";
|
||||
in
|
||||
{
|
||||
imports = [ "${inputs.self}/modules/home/plasma.nix" ];
|
||||
services.kdeconnect.enable = true;
|
||||
|
||||
programs.plasma.workspace.cursor = {
|
||||
theme = "pjsk-cursor-n25-mizuki-ani";
|
||||
};
|
||||
|
||||
programs.plasma.workspace.wallpaper = "${assets}/wallpaper/wallpaper1.jpg";
|
||||
|
||||
programs.plasma.kscreenlocker.appearance.wallpaper = "${assets}/wallpaper/wallpaper3.png";
|
||||
}
|
||||
54
hosts/machine/mizuki/home/config/shell.nix
Normal file
54
hosts/machine/mizuki/home/config/shell.nix
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
shellAliases = {
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
|
||||
ls = "eza --icons=always";
|
||||
ll = "eza --icons=always -l";
|
||||
la = "eza --icons=always -a";
|
||||
lla = "eza --icons=always -la";
|
||||
|
||||
rebuild = "nr";
|
||||
update = "nix flake update";
|
||||
clean = "sudo nix-collect-garbage -d";
|
||||
};
|
||||
|
||||
interactiveShellInit = ''
|
||||
set -g fish_greeting ""
|
||||
set -g fish_color_command blue
|
||||
set -g fish_color_error red
|
||||
set -g fish_color_param cyan
|
||||
'';
|
||||
};
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
format = "🎀 $directory:$character";
|
||||
add_newline = false;
|
||||
# username = {
|
||||
# style_user = "purple";
|
||||
# style_root = "purple";
|
||||
# format = "[$user]($style)";
|
||||
# show_always = true;
|
||||
# };
|
||||
# hostname = {
|
||||
# style = "green";
|
||||
# format = "[$hostname]($style)";
|
||||
# ssh_only = false;
|
||||
# };
|
||||
directory = {
|
||||
style = "fg:#fbb6c4";
|
||||
format = "[$path]($style)";
|
||||
truncation_length = 3;
|
||||
};
|
||||
character = {
|
||||
success_symbol = " 💕";
|
||||
error_symbol = " ⚠️";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
61
hosts/machine/mizuki/home/default.nix
Normal file
61
hosts/machine/mizuki/home/default.nix
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
xdg.enable = true;
|
||||
# gtk.enable = true;
|
||||
|
||||
home.stateVersion = "25.05";
|
||||
home.username = "imnyang";
|
||||
home.homeDirectory = "/home/imnyang";
|
||||
home.packages = import ./packages.nix { inherit pkgs inputs; };
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
VISUAL = "nvim";
|
||||
};
|
||||
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
matchBlocks = {
|
||||
"*" = {
|
||||
forwardAgent = false;
|
||||
identityAgent = "~/.1password/agent.sock";
|
||||
setEnv = {
|
||||
TERM = "xterm-256color";
|
||||
};
|
||||
extraOptions = {
|
||||
ServerAliveInterval = "0";
|
||||
ServerAliveCountMax = "3";
|
||||
Compression = "no";
|
||||
AddKeysToAgent = "no";
|
||||
HashKnownHosts = "no";
|
||||
UserKnownHostsFile = "~/.ssh/known_hosts";
|
||||
ControlMaster = "no";
|
||||
ControlPath = "~/.ssh/master-%r@%n:%p";
|
||||
ControlPersist = "no";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
xdg.configFile."fontconfig/conf.d/10-hm-fonts.conf".force = true;
|
||||
|
||||
imports = [
|
||||
"${inputs.self}/modules/home/git.nix"
|
||||
"${inputs.self}/modules/home/neovim.nix"
|
||||
"${inputs.self}/modules/home/spicetify.nix"
|
||||
"${inputs.self}/modules/home/ghostty.nix"
|
||||
"${inputs.self}/modules/home/zed.nix"
|
||||
"${inputs.self}/modules/home/vicinae.nix"
|
||||
./config/shell.nix
|
||||
./config/plasma.nix
|
||||
"${inputs.self}/modules/home/discord/linux.nix"
|
||||
"${inputs.self}/modules/home/obs-studio.nix"
|
||||
"${inputs.self}/modules/home/vscode.nix"
|
||||
"${inputs.self}/modules/home/ciscopackettracer.nix"
|
||||
];
|
||||
}
|
||||
16
hosts/machine/mizuki/home/packages.nix
Normal file
16
hosts/machine/mizuki/home/packages.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{ pkgs, inputs }:
|
||||
with pkgs;
|
||||
(import ../../../../modules/home/packages.nix { inherit pkgs inputs; })
|
||||
++ [
|
||||
# tail-tray
|
||||
kdePackages.kcolorchooser
|
||||
fastfetch
|
||||
android-studio
|
||||
lmstudio
|
||||
|
||||
# dotnet-runtime
|
||||
dotnet-sdk
|
||||
jetbrains.rider
|
||||
# waterfox-bin
|
||||
# inputs.waterfox.packages.${pkgs.system}.waterfox
|
||||
]
|
||||
21
hosts/machine/ribbon/configuration.nix
Normal file
21
hosts/machine/ribbon/configuration.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{ pkgs, inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
"${inputs.self}/modules/nixos/base"
|
||||
"${inputs.self}/modules/nixos/features/ssh.nix"
|
||||
];
|
||||
|
||||
wsl.enable = true;
|
||||
wsl.defaultUser = "imnyang";
|
||||
|
||||
networking = {
|
||||
hostName = "ribbon";
|
||||
firewall.enable = false;
|
||||
};
|
||||
|
||||
users.users.imnyang.openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOHP3Z+AYrRh9f8TYyqChKfeyNm3lOe0F75AwRHTTaxD imnyang@mizuki"
|
||||
];
|
||||
|
||||
system.stateVersion = "25.11";
|
||||
}
|
||||
31
hosts/machine/ribbon/default.nix
Normal file
31
hosts/machine/ribbon/default.nix
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
inputs,
|
||||
overlays,
|
||||
}:
|
||||
let
|
||||
inherit (inputs)
|
||||
nixpkgs
|
||||
nixos-wsl
|
||||
home-manager
|
||||
;
|
||||
in
|
||||
nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
nixos-wsl.nixosModules.default
|
||||
./configuration.nix
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.backupFileExtension = "backup";
|
||||
home-manager.sharedModules = [];
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
home-manager.users.imnyang = import ./home/home.nix;
|
||||
}
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
inherit overlays;
|
||||
};
|
||||
}
|
||||
57
hosts/machine/ribbon/home/config/shell.nix
Normal file
57
hosts/machine/ribbon/home/config/shell.nix
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
shellAliases = {
|
||||
# 디렉토리 네비게이션
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
|
||||
# ls 별칭
|
||||
ls = "eza --icons=always";
|
||||
ll = "eza --icons=always -l";
|
||||
la = "eza --icons=always -a";
|
||||
lla = "eza --icons=always -la";
|
||||
|
||||
# NixOS 관련
|
||||
rebuild = "nr";
|
||||
update = "nix flake update";
|
||||
clean = "sudo nix-collect-garbage -d";
|
||||
};
|
||||
|
||||
interactiveShellInit = ''
|
||||
set -g fish_greeting ""
|
||||
set -g fish_color_command blue
|
||||
set -g fish_color_error red
|
||||
set -g fish_color_param cyan
|
||||
'';
|
||||
};
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
format = "$username@$hostname:$directory$character";
|
||||
add_newline = false;
|
||||
username = {
|
||||
style_user = "purple";
|
||||
style_root = "purple";
|
||||
format = "[$user]($style)";
|
||||
show_always = true;
|
||||
};
|
||||
hostname = {
|
||||
style = "green";
|
||||
format = "[$hostname]($style)";
|
||||
ssh_only = false;
|
||||
};
|
||||
directory = {
|
||||
style = "blue";
|
||||
format = "[$path]($style)";
|
||||
truncation_length = 3;
|
||||
};
|
||||
character = {
|
||||
success_symbol = " >";
|
||||
error_symbol = " >";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
35
hosts/machine/ribbon/home/home.nix
Normal file
35
hosts/machine/ribbon/home/home.nix
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
home.stateVersion = "25.11";
|
||||
home.username = "imnyang";
|
||||
home.homeDirectory = "/home/imnyang";
|
||||
home.packages = import ./packages.nix { inherit pkgs inputs; };
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
VISUAL = "nvim";
|
||||
};
|
||||
|
||||
programs.git = {
|
||||
enable = true;
|
||||
settings = {
|
||||
user = {
|
||||
name = "imnyang";
|
||||
email = "imnyang@pm.me";
|
||||
};
|
||||
commit.gpgsign = false;
|
||||
init.defaultBranch = "main";
|
||||
pull.rebase = false;
|
||||
};
|
||||
};
|
||||
|
||||
imports = [
|
||||
"${inputs.self}/modules/home/neovim.nix"
|
||||
./config/shell.nix
|
||||
];
|
||||
}
|
||||
10
hosts/machine/ribbon/home/packages.nix
Normal file
10
hosts/machine/ribbon/home/packages.nix
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{ pkgs, inputs }:
|
||||
let
|
||||
nr = import "${inputs.self}/modules/nixos/features/packages/nr.nix" { inherit pkgs; };
|
||||
nrr = import "${inputs.self}/modules/nixos/features/packages/nrr.nix" { inherit pkgs; };
|
||||
in
|
||||
with pkgs;
|
||||
[
|
||||
nr
|
||||
nrr
|
||||
]
|
||||
7
hosts/server/hikari/default/.sops.yaml
Normal file
7
hosts/server/hikari/default/.sops.yaml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
creation_rules:
|
||||
- path_regex: secrets/.*\.ya?ml$
|
||||
age:
|
||||
- age1mgels4hjl7l07gcnt72g86kvhrvd82fha9kuvlp46mpks7unrpmqvy959u # mizuki
|
||||
- age1dcvh6q9953es9fvt8rq8rdgcktlt64asn2tf2y3vmyz0gntxzynqg2xgzk # hako
|
||||
- age1wnxeqyzqsnylm4vdgzrlyu7k4yev82zuru6nzy72hwvu6htde4gq9wc5vu # hikari
|
||||
- age1hlld327xfhm44hns9l9j6h4csrl5cl50h2qkhpl3969awgl665fsnxd3zc # kanade
|
||||
55
hosts/server/hikari/default/configuration.nix
Normal file
55
hosts/server/hikari/default/configuration.nix
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
{ pkgs, inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
"${inputs.self}/modules/nixos/base"
|
||||
"${inputs.self}/modules/nixos/features/cockpit.nix"
|
||||
"${inputs.self}/modules/nixos/features/boot.nix"
|
||||
"${inputs.self}/modules/nixos/features/ssh.nix"
|
||||
"${inputs.self}/modules/nixos/features/podman.nix"
|
||||
|
||||
./services/rustfs.nix
|
||||
./services/nextcloud.nix
|
||||
];
|
||||
|
||||
# 1. 크론 설정
|
||||
services.cron = {
|
||||
enable = true;
|
||||
systemCronJobs = [
|
||||
"0 1 * * * imnyang printf '\\n%s : ' \"$(date)\" >> /home/imnyang/codelounge.log && /home/imnyang/codelounge.sh >> /home/imnyang/codelounge.log"
|
||||
];
|
||||
};
|
||||
|
||||
services.qemuGuest.enable = true;
|
||||
|
||||
# 2. 사용자 SSH 키 등록
|
||||
users.users.imnyang.openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOHP3Z+AYrRh9f8TYyqChKfeyNm3lOe0F75AwRHTTaxD imnyang@kazusa"
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
eza
|
||||
neovim
|
||||
nil
|
||||
nixd
|
||||
];
|
||||
|
||||
programs.git.config = {
|
||||
safe.directory = "*";
|
||||
};
|
||||
|
||||
nix.settings.require-sigs = false;
|
||||
|
||||
networking = {
|
||||
hostName = "hikari";
|
||||
networkmanager.enable = true;
|
||||
firewall.enable = false;
|
||||
bridges.br0 = {
|
||||
interfaces = [
|
||||
"eno1"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "26.05";
|
||||
}
|
||||
33
hosts/server/hikari/default/default.nix
Normal file
33
hosts/server/hikari/default/default.nix
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
inputs,
|
||||
overlays,
|
||||
}:
|
||||
let
|
||||
inherit (inputs)
|
||||
nixpkgs
|
||||
home-manager
|
||||
quadlet-nix
|
||||
sops-nix
|
||||
;
|
||||
in
|
||||
nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
sops-nix.nixosModules.sops
|
||||
home-manager.nixosModules.home-manager
|
||||
inputs.rustfs.nixosModules.rustfs
|
||||
quadlet-nix.nixosModules.quadlet
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
home-manager.users.imnyang = import ./home.nix;
|
||||
}
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
inherit overlays;
|
||||
};
|
||||
}
|
||||
65
hosts/server/hikari/default/hardware-configuration.nix
Normal file
65
hosts/server/hikari/default/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
# Do not modify this file! It was generated by nixos-generate-config
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to configuration.nix instead.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
modulesPath,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
imports = [
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [
|
||||
"nvme"
|
||||
"xhci_pci"
|
||||
"ahci"
|
||||
"usb_storage"
|
||||
"usbhid"
|
||||
"uas"
|
||||
"sd_mod"
|
||||
];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/mapper/luks-32ac59f9-fa04-4ec7-a7a2-9b6821c19e35";
|
||||
fsType = "ext4";
|
||||
};
|
||||
fileSystems."/".neededForBoot = true;
|
||||
|
||||
boot.initrd.luks.devices."luks-32ac59f9-fa04-4ec7-a7a2-9b6821c19e35" = {
|
||||
device = "/dev/disk/by-uuid/32ac59f9-fa04-4ec7-a7a2-9b6821c19e35";
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/ED22-EDE6";
|
||||
fsType = "vfat";
|
||||
options = [
|
||||
"fmask=0077"
|
||||
"dmask=0077"
|
||||
];
|
||||
};
|
||||
|
||||
fileSystems."/mnt/snow" = {
|
||||
device = "/dev/disk/by-uuid/68ecc71d-66d7-4900-9ac2-1ddde0d607a8";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/mnt/rain" = {
|
||||
device = "/dev/disk/by-uuid/311b9c03-eb92-42f1-824b-d1a997916abb";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
hardware.ksm.enable = true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
66
hosts/server/hikari/default/home.nix
Normal file
66
hosts/server/hikari/default/home.nix
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
nr = import "${inputs.self}/modules/nixos/features/packages/nr.nix" { inherit pkgs; };
|
||||
nrr = import "${inputs.self}/modules/nixos/features/packages/nrr.nix" { inherit pkgs; };
|
||||
in
|
||||
{
|
||||
home.stateVersion = "26.05";
|
||||
home.username = "imnyang";
|
||||
home.homeDirectory = "/home/imnyang";
|
||||
|
||||
home.packages = [
|
||||
nr
|
||||
nrr
|
||||
];
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nano";
|
||||
VISUAL = "nano";
|
||||
};
|
||||
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
shellAliases = {
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
|
||||
ls = "eza";
|
||||
ll = "eza -l";
|
||||
la = "eza -a";
|
||||
lla = "eza -la";
|
||||
|
||||
rebuild = "sudo nixos-rebuild switch --flake .#hako";
|
||||
update = "nix flake update";
|
||||
clean = "sudo nix-collect-garbage -d";
|
||||
};
|
||||
|
||||
interactiveShellInit = ''
|
||||
set -g fish_greeting ""
|
||||
set -g fish_color_command blue
|
||||
set -g fish_color_error red
|
||||
set -g fish_color_param cyan
|
||||
'';
|
||||
|
||||
functions = {
|
||||
fish_prompt = ''
|
||||
set_color purple
|
||||
echo -n (whoami)
|
||||
set_color normal
|
||||
echo -n "@"
|
||||
set_color green
|
||||
echo -n (hostname)
|
||||
set_color normal
|
||||
echo -n ":"
|
||||
set_color blue
|
||||
echo -n (prompt_pwd)
|
||||
set_color normal
|
||||
echo -n " > "
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
45
hosts/server/hikari/default/secrets/rustfs.yaml
Normal file
45
hosts/server/hikari/default/secrets/rustfs.yaml
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
rustfs:
|
||||
access-key: ENC[AES256_GCM,data:Cn7OLVdATw==,iv:D4SufuFFUMcX+yvVSoEQewjRKuYn2lTs1q6AD4mxUv4=,tag:ZW39Ss9aH0Yex1jyf29dFA==,type:str]
|
||||
secret-key: ENC[AES256_GCM,data:cGvzwMB8GImZ7gqNzQ==,iv:R8zKJ7S7pZLvDR0+4NKoq1HGK75XGJU+kR7OZr5By20=,tag:dos2R8yxuXBMkh/0NkPMag==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuS1FVMkkvTm9iYzFjU0NB
|
||||
UFRxRCsxK3FqYVVweTRNcktvOGl6MDdwRmljCllmaFVCZ2hmYmJtdjBqcDlLZTZk
|
||||
SVl5SE05YnEvK3hkdEVYT3E2WGM5RzgKLS0tIHZlTEtwZmZZRTVWdVJxL1pGRlBt
|
||||
ZEpCT3JuMXNtN1N2OGZpVFZPYm5HK1UKyGlt3NFaloUMJRNeRVFi8LCSAg6vXBMu
|
||||
RJbfkCJBrzpHTPxNOKeFgsrgWt3FEmSSNN8180o4jymPyXhHqqOTEw==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1mgels4hjl7l07gcnt72g86kvhrvd82fha9kuvlp46mpks7unrpmqvy959u
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFUHlOUExVb0Z2U3FZUXgr
|
||||
UVc4b0VBZXpxQm11eVN5UTF6MXNnZVBmV2hVCkxXRnFTY1IxWmI2dlJDS0kxU1lx
|
||||
Rmd3QXZwTWhMRG1ncVhPM1FCK1RkZnMKLS0tIHdZR2VwRzB6UFQzbEpLalhJdk5Z
|
||||
ZElITjd3U2laaUVIZklRQVJubmcwNXcK7mSlmQF9tG5sPsCxjTXb3qhRvny2rVbS
|
||||
txx0i7WXyzNbzL/FC6T7vPhsmZMEt0aAQpNOPAF4mayr4zfL7X1QsA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1dcvh6q9953es9fvt8rq8rdgcktlt64asn2tf2y3vmyz0gntxzynqg2xgzk
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJQnFQR0ZUSEZRbzQ5V01j
|
||||
emZldE9tc2MwM1VSZzRGbGhvaHVTZm43elZnCk14MitpU0hRVzlvK1VSQktmYlFS
|
||||
bWswd29nTUMycWpoVXkxbGl5TDZjN2MKLS0tIGhOcUw4T1hEdlU3bzY1TjNLcFlq
|
||||
YjhTK3A2UVlLODZwa3cra0o5bEJ5QTQKgS9sFXhgqWmdqXRpfsN7g9SgFByVUhVq
|
||||
L0TTu/5PUkAt88KdUQlFUsm1PgaFnfJWPqfkIclmW+RJHaO0fQWBBQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1wnxeqyzqsnylm4vdgzrlyu7k4yev82zuru6nzy72hwvu6htde4gq9wc5vu
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQb3E4K1d4NHJ2a1kwR3h5
|
||||
RWt4T0ppcTVFWjU3NUdPU1krejBqZjZkV0M4Ci9iYUdxd3NDOUlwZ1p2ODJOY1dk
|
||||
SzE2MWZ5R2xXRFV1bVFpRzhEOWZJV2sKLS0tIEFDRTNnRmZMOVIxeGFGcmQ2aWhP
|
||||
dTJYbEhlcCt2ZURReVlZWWpSQndiVXcKw+3Y9kIRgCdQGcpl++4llH8cAeQyhT/E
|
||||
I3Pxi5GXMRMEgGGKom46WT8UzwXWT3tlCYQpPEmFp6OiJeuxUtU2mg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1hlld327xfhm44hns9l9j6h4csrl5cl50h2qkhpl3969awgl665fsnxd3zc
|
||||
lastmodified: "2026-06-09T01:25:36Z"
|
||||
mac: ENC[AES256_GCM,data:+I6s5nI7FKxolC3dVUToBFU4jULtTjCouKqR+VLT9XNUeZTin258mi0kD5fDhDWpKlC3pEzZ1lTvSOkPb3JX73fvHYjCKbchaW36HgEZi/QF7pQIaZZQUMQZ8ga5KpeUWOvRhJPdbZ/QwKB3+nCAJv7lDMpSLMEDHV2im9sT2e4=,iv:8gMmUef18qK/KIAFojyzVG/n/hOyjVy03aX05/dNukU=,tag:uqn3NSsSDsuyWfkrXvAW1Q==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.13.1
|
||||
133
hosts/server/hikari/default/services/nextcloud.nix
Normal file
133
hosts/server/hikari/default/services/nextcloud.nix
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
60300
|
||||
9980
|
||||
];
|
||||
|
||||
virtualisation.quadlet = {
|
||||
networks.nextcloud = { };
|
||||
|
||||
containers = {
|
||||
nextcloud-db = {
|
||||
containerConfig = {
|
||||
image = "postgres:17";
|
||||
networks = [ "nextcloud" ];
|
||||
|
||||
volumes = [
|
||||
"/data/nextcloud/db:/var/lib/postgresql/data:Z"
|
||||
];
|
||||
|
||||
environmentFiles = [
|
||||
"/data/nextcloud/db.env"
|
||||
];
|
||||
|
||||
exec = "postgres -c listen_addresses='*' -c unix_socket_directories=''";
|
||||
};
|
||||
|
||||
serviceConfig.Restart = "always";
|
||||
};
|
||||
|
||||
nextcloud-redis = {
|
||||
containerConfig = {
|
||||
image = "redis:alpine";
|
||||
networks = [ "nextcloud" ];
|
||||
};
|
||||
|
||||
serviceConfig.Restart = "always";
|
||||
};
|
||||
|
||||
nextcloud-app = {
|
||||
containerConfig = {
|
||||
image = "nextcloud:apache";
|
||||
|
||||
publishPorts = [ "60300:80" ];
|
||||
|
||||
networks = [ "nextcloud" ];
|
||||
|
||||
volumes = [
|
||||
"/mnt/snow/Docker/nextcloud/data:/var/www/html:z"
|
||||
];
|
||||
|
||||
# environments로 변경 및 attrset 형식으로 정의
|
||||
environments = {
|
||||
POSTGRES_HOST = "nextcloud-db";
|
||||
REDIS_HOST = "nextcloud-redis";
|
||||
NEXTCLOUD_OVERWRITEPROTOCOL = "https";
|
||||
};
|
||||
|
||||
environmentFiles = [
|
||||
"/data/nextcloud/db.env"
|
||||
];
|
||||
};
|
||||
|
||||
unitConfig = {
|
||||
Requires = [
|
||||
"nextcloud-db.service"
|
||||
"nextcloud-redis.service"
|
||||
];
|
||||
|
||||
After = [
|
||||
"nextcloud-db.service"
|
||||
"nextcloud-redis.service"
|
||||
];
|
||||
};
|
||||
|
||||
serviceConfig.Restart = "always";
|
||||
};
|
||||
|
||||
nextcloud-cron = {
|
||||
containerConfig = {
|
||||
image = "nextcloud:apache";
|
||||
|
||||
networks = [ "nextcloud" ];
|
||||
|
||||
volumes = [
|
||||
"/mnt/snow/Docker/nextcloud/data:/var/www/html:z"
|
||||
];
|
||||
|
||||
exec = "/cron.sh";
|
||||
};
|
||||
|
||||
unitConfig = {
|
||||
Requires = [
|
||||
"nextcloud-db.service"
|
||||
"nextcloud-redis.service"
|
||||
];
|
||||
|
||||
After = [
|
||||
"nextcloud-db.service"
|
||||
"nextcloud-redis.service"
|
||||
];
|
||||
};
|
||||
|
||||
serviceConfig.Restart = "always";
|
||||
};
|
||||
|
||||
collabora = {
|
||||
containerConfig = {
|
||||
image = "collabora/code:latest";
|
||||
|
||||
hostname = "collabora";
|
||||
|
||||
publishPorts = [ "9980:9980" ];
|
||||
|
||||
addCapabilities = [ "MKNOD" ];
|
||||
|
||||
podmanArgs = [
|
||||
"--privileged"
|
||||
"--tty"
|
||||
];
|
||||
|
||||
# environments로 변경 및 attrset 형식으로 정의
|
||||
environments = {
|
||||
extra_params = "--o:ssl.enable=false --o:ssl.termination=true";
|
||||
};
|
||||
};
|
||||
|
||||
serviceConfig.Restart = "always";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
38
hosts/server/hikari/default/services/rustfs.nix
Normal file
38
hosts/server/hikari/default/services/rustfs.nix
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
# sops.secrets = {
|
||||
# "rustfs/access-key" = {
|
||||
# sopsFile = ../secrets/rustfs.yaml;
|
||||
# owner = config.services.rustfs.user;
|
||||
# group = config.services.rustfs.group;
|
||||
# mode = "0400";
|
||||
# restartUnits = [ "rustfs.service" ];
|
||||
# };
|
||||
|
||||
# "rustfs/secret-key" = {
|
||||
# sopsFile = ../secrets/rustfs.yaml;
|
||||
# owner = config.services.rustfs.user;
|
||||
# group = config.services.rustfs.group;
|
||||
# mode = "0400";
|
||||
# restartUnits = [ "rustfs.service" ];
|
||||
# };
|
||||
# };
|
||||
|
||||
services.rustfs = {
|
||||
enable = true;
|
||||
package = inputs.rustfs.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
||||
|
||||
accessKeyFile = "/etc/secrets/rustfs-access-key";
|
||||
secretKeyFile = "/etc/secrets/rustfs-secret-key";
|
||||
|
||||
volumes = "/mnt/snow/rustfs";
|
||||
address = ":9000";
|
||||
consoleAddress = ":9001";
|
||||
consoleEnable = true;
|
||||
};
|
||||
}
|
||||
5
hosts/server/hikari/hako/.sops.yaml
Normal file
5
hosts/server/hikari/hako/.sops.yaml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
creation_rules:
|
||||
- path_regex: secrets/.*\.ya?ml$
|
||||
age:
|
||||
- age1mgels4hjl7l07gcnt72g86kvhrvd82fha9kuvlp46mpks7unrpmqvy959u # mizuki
|
||||
- age1dcvh6q9953es9fvt8rq8rdgcktlt64asn2tf2y3vmyz0gntxzynqg2xgzk # hako
|
||||
43
hosts/server/hikari/hako/configuration.nix
Normal file
43
hosts/server/hikari/hako/configuration.nix
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{ pkgs, inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
"${inputs.self}/modules/nixos/base"
|
||||
"${inputs.self}/modules/nixos/features/boot.nix"
|
||||
"${inputs.self}/modules/nixos/features/ssh.nix"
|
||||
"${inputs.self}/modules/nixos/features/docker.nix"
|
||||
];
|
||||
|
||||
# 1. 크론 설정
|
||||
services.cron = {
|
||||
enable = true;
|
||||
systemCronJobs = [
|
||||
"0 1 * * * imnyang printf '\\n%s : ' \"$(date)\" >> /home/imnyang/codelounge.log && /home/imnyang/codelounge.sh >> /home/imnyang/codelounge.log"
|
||||
];
|
||||
};
|
||||
|
||||
services.qemuGuest.enable = true;
|
||||
|
||||
# 2. 사용자 SSH 키 등록
|
||||
users.users.imnyang.openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOHP3Z+AYrRh9f8TYyqChKfeyNm3lOe0F75AwRHTTaxD imnyang@kazusa"
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
eza
|
||||
neovim
|
||||
nil
|
||||
nixd
|
||||
];
|
||||
|
||||
programs.git.config = {
|
||||
safe.directory = "*";
|
||||
};
|
||||
|
||||
nix.settings.require-sigs = false;
|
||||
|
||||
networking.firewall.enable = false;
|
||||
|
||||
networking.hostName = "hako";
|
||||
system.stateVersion = "26.05";
|
||||
}
|
||||
32
hosts/server/hikari/hako/default.nix
Normal file
32
hosts/server/hikari/hako/default.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
inputs,
|
||||
overlays,
|
||||
}:
|
||||
let
|
||||
inherit (inputs) nixpkgs home-manager sops-nix;
|
||||
in
|
||||
nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
sops-nix.nixosModules.sops
|
||||
./services/forgejo.nix
|
||||
./services/immich.nix
|
||||
./services/attic.nix
|
||||
./services/postgresql.nix
|
||||
./services/nc.nix
|
||||
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
home-manager.users.imnyang = import ./home.nix;
|
||||
}
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
inherit overlays;
|
||||
};
|
||||
}
|
||||
51
hosts/server/hikari/hako/hardware-configuration.nix
Normal file
51
hosts/server/hikari/hako/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# Do not modify this file! It was generated by nixos-generate-config
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to configuration.nix instead.
|
||||
{ lib, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
(modulesPath + "/profiles/qemu-guest.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [
|
||||
"uhci_hcd"
|
||||
"ehci_pci"
|
||||
"ahci"
|
||||
"virtio_pci"
|
||||
"virtio_scsi"
|
||||
"sd_mod"
|
||||
"sr_mod"
|
||||
];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/d65b2c3a-c630-4a07-bcf3-ec1b728129c0";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/67DC-8A41";
|
||||
fsType = "vfat";
|
||||
options = [
|
||||
"fmask=0077"
|
||||
"dmask=0077"
|
||||
];
|
||||
};
|
||||
|
||||
fileSystems."/mnt/data" = {
|
||||
device = "/dev/disk/by-uuid/edc0420b-8bec-438d-856d-bb345238e735";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/mnt/attic" = {
|
||||
device = "/dev/disk/by-uuid/f45e0247-d2eb-4150-8116-e8d257c01aac";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
||||
66
hosts/server/hikari/hako/home.nix
Normal file
66
hosts/server/hikari/hako/home.nix
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
nr = import "${inputs.self}/modules/nixos/features/packages/nr.nix" { inherit pkgs; };
|
||||
nrr = import "${inputs.self}/modules/nixos/features/packages/nrr.nix" { inherit pkgs; };
|
||||
in
|
||||
{
|
||||
home.stateVersion = "26.05";
|
||||
home.username = "imnyang";
|
||||
home.homeDirectory = "/home/imnyang";
|
||||
|
||||
home.packages = [
|
||||
nr
|
||||
nrr
|
||||
];
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nano";
|
||||
VISUAL = "nano";
|
||||
};
|
||||
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
shellAliases = {
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
|
||||
ls = "eza";
|
||||
ll = "eza -l";
|
||||
la = "eza -a";
|
||||
lla = "eza -la";
|
||||
|
||||
rebuild = "sudo nixos-rebuild switch --flake .#hako";
|
||||
update = "nix flake update";
|
||||
clean = "sudo nix-collect-garbage -d";
|
||||
};
|
||||
|
||||
interactiveShellInit = ''
|
||||
set -g fish_greeting ""
|
||||
set -g fish_color_command blue
|
||||
set -g fish_color_error red
|
||||
set -g fish_color_param cyan
|
||||
'';
|
||||
|
||||
functions = {
|
||||
fish_prompt = ''
|
||||
set_color purple
|
||||
echo -n (whoami)
|
||||
set_color normal
|
||||
echo -n "@"
|
||||
set_color green
|
||||
echo -n (hostname)
|
||||
set_color normal
|
||||
echo -n ":"
|
||||
set_color blue
|
||||
echo -n (prompt_pwd)
|
||||
set_color normal
|
||||
echo -n " > "
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
29
hosts/server/hikari/hako/secrets/forgejo.yaml
Normal file
29
hosts/server/hikari/hako/secrets/forgejo.yaml
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
forgejo:
|
||||
server_lfs_jwt_secret: ENC[AES256_GCM,data:mBK+mUvGTlSPLEifBahWuKMWMAlMNXmgA5jdGl+RElA4+msogvHB1g7V1g==,iv:YDc7ZgDPP0st0hYLJGbsapkVAG2L372AXFGwax9y+hc=,tag:4rfv0tfvgk/octiBkFnD6Q==,type:str]
|
||||
security_internal_token: ENC[AES256_GCM,data:zmEnyWTmZrcUQTu7zu/QaVGzMzNvzkWYpRsCygD/SKzQe+kHG/FGr8rPwUQGIoUvdc2FcAykfsFZtnBwDgIeEonG+jdGYF41yIrh18hAXG00jn+K5fhq9x2IAGJz6qtvM7usiw2aCLLF,iv:DkkKZl9KKbtOKk1OHxoQmBMhN91NGHKAijcaJVxHXgM=,tag:FJkWGty/yAUJQaZB6RNcuQ==,type:str]
|
||||
oauth2_jwt_secret: ENC[AES256_GCM,data:SpTNvHaxR1Ai8hdoTVcl3HVm5ZwA4oNoXUD5Cw8J5cy63ZLOZMX6tCBLCg==,iv:cm0uqiaizsEqPWD6b1cusME6LGXhSEhmd2bcdf/kxUM=,tag:iYpIDsIRd6ahJdL2RgjPTw==,type:str]
|
||||
mailer_passwd: ENC[AES256_GCM,data:FXQN7xvjtR2MJGp/DkiF6jyglztjZ7vKxmHB7YWux0E=,iv:G5DSbqeKykq1HjQfWwHdLeS3bHkCbjsgH57Nfaaev84=,tag:8Q1RC3f8wNjUPm1nL+J4IQ==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDQ1hzM3BEUEdqaUlnckhK
|
||||
VXhHSzI1SmxBUCsxbU1FZmZhTkppa2xCbzNnCjhjc05oTFdnbjByR0N6eklpZTVh
|
||||
dXNid290ZWRqNStKdkhiczdaQ1FaZlUKLS0tIEkvRmN5UTQ0dXBRRDB3YkR5UklL
|
||||
OUh4NVZER0FOcGtZMksrdzk2c2ZHVHcKgkrUSWjK2+44+svbVSzHn31QPieTtXb2
|
||||
7/A689V4CgGO+eoECxaKepEbWmXb2iCuLa2fNhUQIv1veKq/ga1aNA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1mgels4hjl7l07gcnt72g86kvhrvd82fha9kuvlp46mpks7unrpmqvy959u
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVbjNtWjBRVFFEdGdKbXBC
|
||||
RWo1UngvVEpqNW92MGlHZHI4dG9pWGdaS1VNCjhzakYyNUwzaWM3WjY4cHNvUW9t
|
||||
N3hsTlpkV3BEQXZSSGh4MGlKVkNuWDAKLS0tIGFDcFNuQlBnaFN6SWs2K1dDVlVW
|
||||
M1Z4VFdsWlhOTEZxR256a0xqa1dVcUkKrL52dR1o186VXcxp3ap5cyZUh5pjgQPC
|
||||
TmBnn6qSneJHztKUBTz5PBsesdDrNX4m/UYahb7feRO70dQvGxeo0A==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1dcvh6q9953es9fvt8rq8rdgcktlt64asn2tf2y3vmyz0gntxzynqg2xgzk
|
||||
lastmodified: "2026-05-25T05:46:33Z"
|
||||
mac: ENC[AES256_GCM,data:GY6EpM2BwOHFHtOGuQ6qHepH94xhEMnQDxshl+aGhIVGCi+34YW6WjFtBcFFLcmxSuMbEx8w2jK0T6PE7cyAwnphkz/G0qx2AAn836SN0wlfyY3Ni1czcdcuc9s2QdlBc9VhVU8s70fnso2tZxQsyM5wplgparJAJfxNycLFr9g=,iv:sHxJZm6waB+PW76rs6H26ffelsty1KAQFzwgbLv7Qls=,tag:Ofir+9DXvlSU/RtG4ivNCQ==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.13.1
|
||||
28
hosts/server/hikari/hako/secrets/immich.yaml
Normal file
28
hosts/server/hikari/hako/secrets/immich.yaml
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
immich:
|
||||
oauth2:
|
||||
client-id: ENC[AES256_GCM,data:HY69lAGt3g7JqRG1EzmWXZpSCGSPwm2vqdIU2RkhXdon3C4JeXb9fw==,iv:Ew2r4kOx6cP2uZD6btyPmFpT0SOkJFM2WeT/fq6zaLc=,tag:aZimoy63KoR2hwRQUOGPRw==,type:str]
|
||||
client-secret: ENC[AES256_GCM,data:U9YE9DnsNbLU2bTZWRWjEWFCCl0b2GS7IWfg2ooGrbmSi/A9DFzGSxvUdJQHKVbsX3bFCDd55citwJRVUQDiFSNSX78npQSzRJ8Jj9VSYOmHsO376I/Wm8sLQfvApcvltwaNV1rzfQyKGaBqGkFb58AbG55h/6bObqWWOl6+g5I=,iv:/odWOJedazBbMYsNwNVLPbBdAJb8f73brz+PUpaNwDg=,tag:VdY5zAHbPkYBRrmZyGSSTg==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJOXo0RkpUekJZN3lhaU1S
|
||||
ZWNDaUdud0EzbUhIbU9lYVRyQ3pQazRrMlZRCjdPMDZDNVpST3p2VHJ0Tmg2WUZP
|
||||
eWF4R0dBaW1zRmJNdjVaVWV3UjgvL2MKLS0tIFJQQ1pMQzB5aU9wNmYxYktJdHU5
|
||||
NWV6Q0NuWUwrMTZ5RE9PV3ZVMTkvK00KJaPJojaZGx8NNfgxO4Q6AUbbCRGxEHAz
|
||||
QX4zycDizXnL3kWmF1T66Cew6EuhHZSl5ZYFYUilHjq8r0lx2RuCOg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1mgels4hjl7l07gcnt72g86kvhrvd82fha9kuvlp46mpks7unrpmqvy959u
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvTjFKQlZVUCtNLzUzUGRO
|
||||
TjlDYjQ3dmxEd0ZUcGZpTk5wU3kzWXVpRUY4CnI1bjBubU91dWJmSjlUOFlyYkNm
|
||||
MkxIZTZ5SmFuT1ZqT3dkYVZQcmFWZk0KLS0tIGhPYzZpNEkwcTJzQUpwdndNNmlN
|
||||
a05vWkZLeEpmaWpka1Z6RXRUdFRRZ3cKQBfF4IYpt5RO9+XmooTI58cSmkqwnQmN
|
||||
aSt73yBzGVPJulggcYuDsy/k8lfPhPseKVvuR8p/jzwKG6iNGNm86g==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1dcvh6q9953es9fvt8rq8rdgcktlt64asn2tf2y3vmyz0gntxzynqg2xgzk
|
||||
lastmodified: "2026-04-02T15:08:04Z"
|
||||
mac: ENC[AES256_GCM,data:uDCTiO0f3Ogj+dMNGoFIPptCBgLbN0goh/KDiLqCJXvLVkNCqpJYK0V46CmwQnSNyrth2jEQhnx0TBF2JSKfyU+UNpgC9zcLsuUznYQiBl+s2cT2nbApcLgJBSxWcvCpEEGqUp71jw8ajaUwjaLGdHePNsn4K3rAOL0j1Yythxo=,iv:bx3ctA+6hEeq0BHJqf4BQBJhihh3uGlS7NwalmXJgXg=,tag:sM4wAT0qfUZMI7gE0b++3g==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.12.2
|
||||
26
hosts/server/hikari/hako/secrets/nc.yaml
Normal file
26
hosts/server/hikari/hako/secrets/nc.yaml
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
google:
|
||||
api-key: ENC[AES256_GCM,data:1BdTd7JyoeZ/U/6kWKAcgYeRokjR/mD0OLrmJrp7fXTE6rI4YT/RdQZauAA+xiGLBELdVCo=,iv:s9ms0pr7iwQW7HxhlpQSHCRc9pWlbnY3MH6iKxnoFYg=,tag:uWTmkMWikoFVGCeyG6fOrQ==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0U1FuMjg4Q0llaU1yUCtX
|
||||
SG5aUnVoUGRaRG9WSGNKQlFmNFdtS1JOdDFVCjlDbHVnUWlCWWtQcXJjSExTL3JT
|
||||
cHM3RTRNK1BVZzdXZ1g0bFdYcnltU2cKLS0tIHpHQmRqTndLNUJWYnR4TVVHOGJ0
|
||||
ZExCNlphODcrbGdxa0tYNGxQS1lJNDQKes+ZdaWVPmAHxsomvBhGSha58T0vOTvN
|
||||
T14s3k+nAtyOq0oJ71AuzZVsWS/1ubMFvtOAnVTsCae1BZ5AAGTU0A==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1mgels4hjl7l07gcnt72g86kvhrvd82fha9kuvlp46mpks7unrpmqvy959u
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMQXNaR0dldTBMa3YrK1ZE
|
||||
K1NhclpZblJzdVFGU1hLVHRtSFR1bmhBeFZjCmRyNXNRVGxrYUZEWGpQR2gycHd2
|
||||
TGJUVmpVTjcvaFBtZFpBTjNqVHVTcHMKLS0tIDUrYVI4LytnN0tCM3RZdzMwekFi
|
||||
NnJkRGc5VUd3WUNXODRLZ2dkbWZ0QlUKPkU0P/fuGIVRwGgdwkxxEoeXTM7BBL7m
|
||||
29fTZi7bgVajYoaA52CIjGFYnzt6phqlvjMC6PFlGG23ifaYEKlgQQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1dcvh6q9953es9fvt8rq8rdgcktlt64asn2tf2y3vmyz0gntxzynqg2xgzk
|
||||
lastmodified: "2026-06-25T09:28:44Z"
|
||||
mac: ENC[AES256_GCM,data:uZWZQ4u5gqfTnNp9uVqfXOqwAgaTL4hT5a/A5d+o0D6MCpM/f80hnaWBynFryI1NlPUFjQ6gyGBTFxkEeUnhB/pQit6XBE0Ex0F+UKy5U8QAcPhN2/5if/Upd9l3yiLaul+kH49FkkHwRhpA++GXFUr66stsHYPMFXM2vQAJQgQ=,iv:AwE69cX+jmrUz/pJqAIsS9Vhl2rd947xAViQYz6gkSA=,tag:qg4jpYHTYjBkt9vfER+YkA==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.13.1
|
||||
21
hosts/server/hikari/hako/services/attic.nix
Normal file
21
hosts/server/hikari/hako/services/attic.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
services.atticd = {
|
||||
enable = true;
|
||||
|
||||
# Replace with absolute path to your environment file
|
||||
environmentFile = "/etc/atticd.env";
|
||||
|
||||
settings = {
|
||||
listen = "[::]:8080";
|
||||
|
||||
jwt = { };
|
||||
|
||||
database.url = "postgresql:///attic";
|
||||
|
||||
storage = {
|
||||
type = "local";
|
||||
path = "/mnt/attic";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
130
hosts/server/hikari/hako/services/forgejo.nix
Normal file
130
hosts/server/hikari/hako/services/forgejo.nix
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
sops = {
|
||||
defaultSopsFile = ../secrets/forgejo.yaml;
|
||||
validateSopsFiles = false;
|
||||
age = {
|
||||
keyFile = "/var/lib/sops-nix/key.txt";
|
||||
generateKey = true;
|
||||
};
|
||||
secrets = {
|
||||
"forgejo/server_lfs_jwt_secret" = {
|
||||
owner = "forgejo";
|
||||
group = "forgejo";
|
||||
restartUnits = [ "forgejo.service" ];
|
||||
};
|
||||
"forgejo/security_internal_token" = {
|
||||
owner = "forgejo";
|
||||
group = "forgejo";
|
||||
restartUnits = [ "forgejo.service" ];
|
||||
};
|
||||
"forgejo/oauth2_jwt_secret" = {
|
||||
owner = "forgejo";
|
||||
group = "forgejo";
|
||||
restartUnits = [ "forgejo.service" ];
|
||||
};
|
||||
"forgejo/mailer_passwd" = {
|
||||
owner = "forgejo";
|
||||
group = "forgejo";
|
||||
restartUnits = [ "forgejo.service" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.forgejo = {
|
||||
enable = true;
|
||||
package = pkgs.forgejo;
|
||||
|
||||
database = {
|
||||
type = "postgres";
|
||||
createDatabase = true;
|
||||
host = "/run/postgresql/";
|
||||
name = "forgejo";
|
||||
user = "forgejo";
|
||||
};
|
||||
|
||||
settings = {
|
||||
DEFAULT = {
|
||||
APP_NAME = "git.mizuki.guru";
|
||||
APP_SLOGAN = "with 🎀";
|
||||
RUN_MODE = "prod";
|
||||
};
|
||||
|
||||
federation = {
|
||||
ENABLED = true;
|
||||
};
|
||||
|
||||
server = {
|
||||
DOMAIN = "git.mizuki.guru";
|
||||
SSH_DOMAIN = "mizuki.guru";
|
||||
HTTP_PORT = 3000;
|
||||
ROOT_URL = "https://git.mizuki.guru/";
|
||||
DISABLE_SSH = false;
|
||||
SSH_PORT = 22;
|
||||
LFS_START_SERVER = true;
|
||||
OFFLINE_MODE = false;
|
||||
};
|
||||
|
||||
security = {
|
||||
INSTALL_LOCK = true;
|
||||
PASSWORD_HASH_ALGO = "pbkdf2_hi";
|
||||
};
|
||||
|
||||
service = {
|
||||
REGISTER_EMAIL_CONFIRM = true;
|
||||
ENABLE_NOTIFY_MAIL = true;
|
||||
DISABLE_REGISTRATION = false;
|
||||
ALLOW_ONLY_EXTERNAL_REGISTRATION = true;
|
||||
ENABLE_CAPTCHA = false;
|
||||
REQUIRE_SIGNIN_VIEW = false;
|
||||
DEFAULT_KEEP_EMAIL_PRIVATE = false;
|
||||
DEFAULT_ALLOW_CREATE_ORGANIZATION = true;
|
||||
DEFAULT_ENABLE_TIMETRACKING = true;
|
||||
NO_REPLY_ADDRESS = "noreply.relay.imnya.ng";
|
||||
};
|
||||
|
||||
mailer = {
|
||||
ENABLED = true;
|
||||
SMTP_ADDR = "mail.mizuki.guru";
|
||||
SMTP_PORT = 587;
|
||||
FROM = "systemmail@mizuki.guru";
|
||||
USER = "systemmail@mizuki.guru";
|
||||
};
|
||||
|
||||
oauth2 = {
|
||||
ENABLED = true;
|
||||
};
|
||||
|
||||
actions = {
|
||||
ENABLED = true;
|
||||
};
|
||||
|
||||
ui = {
|
||||
THEMES = "dark,light,auto,forgejo-auto,forgejo-light,forgejo-dark";
|
||||
DEFAULT_THEME = "auto";
|
||||
};
|
||||
|
||||
repository = {
|
||||
ROOT = "/var/lib/forgejo/repositories";
|
||||
};
|
||||
"repository.pull-request".DEFAULT_MERGE_STYLE = "merge";
|
||||
"repository.signing".DEFAULT_TRUST_MODEL = "committer";
|
||||
"cron.update_checker".ENABLED = true;
|
||||
session.PROVIDER = "file";
|
||||
oauth2_client.ENABLE_AUTO_REGISTRATION = true;
|
||||
};
|
||||
|
||||
secrets = {
|
||||
server.LFS_JWT_SECRET = lib.mkForce config.sops.secrets."forgejo/server_lfs_jwt_secret".path;
|
||||
security.INTERNAL_TOKEN = lib.mkForce config.sops.secrets."forgejo/security_internal_token".path;
|
||||
oauth2.JWT_SECRET = lib.mkForce config.sops.secrets."forgejo/oauth2_jwt_secret".path;
|
||||
mailer.PASSWD = lib.mkForce config.sops.secrets."forgejo/mailer_passwd".path;
|
||||
};
|
||||
};
|
||||
}
|
||||
37
hosts/server/hikari/hako/services/immich.nix
Normal file
37
hosts/server/hikari/hako/services/immich.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{ config, ... }:
|
||||
let
|
||||
immichSecret = key: {
|
||||
sopsFile = ../secrets/immich.yaml;
|
||||
inherit key;
|
||||
owner = "immich";
|
||||
};
|
||||
in
|
||||
{
|
||||
sops.secrets."immich/oauth2/client-id" = immichSecret "immich/oauth2/client-id";
|
||||
sops.secrets."immich/oauth2/client-secret" = immichSecret "immich/oauth2/client-secret";
|
||||
|
||||
services.immich = {
|
||||
enable = true;
|
||||
host = "0.0.0.0";
|
||||
port = 10040;
|
||||
|
||||
mediaLocation = "/mnt/data/immich/media";
|
||||
openFirewall = true;
|
||||
machine-learning.enable = false;
|
||||
|
||||
settings = {
|
||||
server.externalDomain = "https://i.mizuki.guru";
|
||||
machineLearning = {
|
||||
enabled = false;
|
||||
};
|
||||
oauth = {
|
||||
enabled = true;
|
||||
issuerUrl = "https://auth.mizuki.guru/application/o/immich/.well-known/openid-configuration";
|
||||
clientId._secret = config.sops.secrets."immich/oauth2/client-id".path;
|
||||
clientSecret._secret = config.sops.secrets."immich/oauth2/client-secret".path;
|
||||
scope = "openid email profile";
|
||||
buttonText = "Login with mizuki";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
63
hosts/server/hikari/hako/services/nc.nix
Normal file
63
hosts/server/hikari/hako/services/nc.nix
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
ncSecret = key: {
|
||||
sopsFile = ../secrets/nc.yaml;
|
||||
inherit key;
|
||||
owner = "mizuki-nc";
|
||||
group = "mizuki-nc";
|
||||
mode = "0400";
|
||||
};
|
||||
in
|
||||
{
|
||||
users.users.mizuki-nc = {
|
||||
isSystemUser = true;
|
||||
group = "mizuki-nc";
|
||||
};
|
||||
|
||||
users.groups.mizuki-nc = { };
|
||||
|
||||
sops.secrets."google/api-key" = ncSecret "google/api-key";
|
||||
|
||||
systemd.services.mizuki-nc = {
|
||||
description = "mizuki.guru";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
preStart = ''
|
||||
set -eu
|
||||
umask 077
|
||||
|
||||
rm -f /var/lib/mizuki-nc/config.toml
|
||||
|
||||
cat > /tmp/mizuki-nc-config.toml <<EOF
|
||||
[google]
|
||||
api-key = "$(cat ${config.sops.secrets."google/api-key".path})"
|
||||
EOF
|
||||
|
||||
install -o mizuki-nc -g mizuki-nc -m 0400 \
|
||||
/tmp/mizuki-nc-config.toml \
|
||||
/var/lib/mizuki-nc/config.toml
|
||||
|
||||
rm -f /tmp/mizuki-nc-config.toml
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
User = "mizuki-nc";
|
||||
Group = "mizuki-nc";
|
||||
|
||||
StateDirectory = "mizuki-nc";
|
||||
StateDirectoryMode = "0750";
|
||||
WorkingDirectory = "/var/lib/mizuki-nc";
|
||||
|
||||
ExecStart = "${inputs.mizuki-nc.packages.${pkgs.system}.default}/bin/mizuki-nc";
|
||||
|
||||
Restart = "always";
|
||||
RestartSec = 3;
|
||||
};
|
||||
};
|
||||
}
|
||||
16
hosts/server/hikari/hako/services/postgresql.nix
Normal file
16
hosts/server/hikari/hako/services/postgresql.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{ pkgs, ... }: {
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
package = pkgs.postgresql_17.withPackages (ps: with ps; [
|
||||
pgvector
|
||||
vectorchord
|
||||
]);
|
||||
ensureDatabases = [ "attic" "atticd" ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = "atticd";
|
||||
ensureDBOwnership = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
6
hosts/server/kazusa/.sops.yaml
Normal file
6
hosts/server/kazusa/.sops.yaml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
creation_rules:
|
||||
- path_regex: secrets/.*\.ya?ml$
|
||||
age:
|
||||
- age1mgels4hjl7l07gcnt72g86kvhrvd82fha9kuvlp46mpks7unrpmqvy959u # mizuki
|
||||
- age1dcvh6q9953es9fvt8rq8rdgcktlt64asn2tf2y3vmyz0gntxzynqg2xgzk # hako
|
||||
- age1hlsu7fdwwfm93rjt686j9cdy5klefwdus9jdxt5e0vaqh8c2la9qu5utns # kazusa
|
||||
103
hosts/server/kazusa/configuration.nix
Normal file
103
hosts/server/kazusa/configuration.nix
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
"${inputs.self}/modules/nixos/base"
|
||||
"${inputs.self}/modules/nixos/features/boot.nix"
|
||||
"${inputs.self}/modules/nixos/features/ssh.nix"
|
||||
"${inputs.self}/modules/nixos/features/docker.nix"
|
||||
./services/mailserver.nix
|
||||
./services/caddy.nix
|
||||
];
|
||||
|
||||
# Override shared boot.nix for Legacy BIOS
|
||||
boot.loader.grub.enableCryptodisk = lib.mkForce false;
|
||||
|
||||
services.netbird.enable = true;
|
||||
|
||||
users.users.imnyang.openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOHP3Z+AYrRh9f8TYyqChKfeyNm3lOe0F75AwRHTTaxD imnyang@kazusa"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIrpjEYOBx7LTGb7QsPrmPBboqyTUNm/e+4+yqWruljv imnyang@natsu"
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
eza
|
||||
neovim
|
||||
nil
|
||||
nixd
|
||||
bun
|
||||
];
|
||||
|
||||
boot.kernel.sysctl = {
|
||||
"net.ipv4.ip_forward" = 1;
|
||||
"net.ipv6.conf.all.forwarding" = 1;
|
||||
};
|
||||
|
||||
programs.git.config = {
|
||||
safe.directory = "*";
|
||||
};
|
||||
|
||||
networking = {
|
||||
hostName = "kazusa";
|
||||
domain = "icn.mizuki.guru";
|
||||
nameservers = [
|
||||
"1.1.1.1"
|
||||
"1.0.0.1"
|
||||
"9.9.9.9"
|
||||
"149.112.112.112"
|
||||
];
|
||||
useDHCP = false;
|
||||
dhcpcd.enable = false;
|
||||
interfaces.ens18 = {
|
||||
ipv4.addresses = [
|
||||
{
|
||||
address = "82.21.82.30";
|
||||
prefixLength = 24;
|
||||
}
|
||||
];
|
||||
};
|
||||
defaultGateway = {
|
||||
address = "82.21.82.1";
|
||||
interface = "ens18";
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
22
|
||||
80
|
||||
443
|
||||
];
|
||||
|
||||
systemd.services.gnaynmi = {
|
||||
description = "discord bot";
|
||||
after = [ "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = "imnyang";
|
||||
WorkingDirectory = "/home/imnyang/gnaynmi";
|
||||
EnvironmentFile = "/home/imnyang/gnaynmi/.env";
|
||||
ExecStart = "${pkgs.bun}/bin/bun run src/index.ts";
|
||||
Restart = "always";
|
||||
RestartSec = 5;
|
||||
};
|
||||
|
||||
path = [
|
||||
pkgs.bun
|
||||
pkgs.stdenv.cc.cc.lib
|
||||
];
|
||||
environment = {
|
||||
LD_LIBRARY_PATH = "${pkgs.stdenv.cc.cc.lib}/lib";
|
||||
};
|
||||
};
|
||||
|
||||
services.qemuGuest.enable = true;
|
||||
|
||||
system.stateVersion = "26.05";
|
||||
}
|
||||
26
hosts/server/kazusa/default.nix
Normal file
26
hosts/server/kazusa/default.nix
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
inputs,
|
||||
overlays,
|
||||
}:
|
||||
let
|
||||
inherit (inputs) nixpkgs home-manager sops-nix;
|
||||
in
|
||||
nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
sops-nix.nixosModules.sops
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
home-manager.users.imnyang = import ./home;
|
||||
}
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
inherit overlays;
|
||||
};
|
||||
}
|
||||
45
hosts/server/kazusa/hardware-configuration.nix
Normal file
45
hosts/server/kazusa/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
# 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 = [
|
||||
"uhci_hcd"
|
||||
"ehci_pci"
|
||||
"ahci"
|
||||
"sd_mod"
|
||||
"sr_mod"
|
||||
];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/bfc62982-b6e4-43b9-99d7-951e7bcb1b31";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/0BA0-4E1A";
|
||||
fsType = "vfat";
|
||||
options = [
|
||||
"fmask=0077"
|
||||
"dmask=0077"
|
||||
];
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
||||
77
hosts/server/kazusa/home/default.nix
Normal file
77
hosts/server/kazusa/home/default.nix
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
nr = import "${inputs.self}/modules/nixos/features/packages/nr.nix" { inherit pkgs; };
|
||||
nrr = import "${inputs.self}/modules/nixos/features/packages/nrr.nix" { inherit pkgs; };
|
||||
in
|
||||
{
|
||||
home.stateVersion = "26.05";
|
||||
home.username = "imnyang";
|
||||
home.homeDirectory = "/home/imnyang";
|
||||
|
||||
home.packages = [
|
||||
nr
|
||||
nrr
|
||||
];
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
VISUAL = "nvim";
|
||||
};
|
||||
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
shellAliases = {
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
|
||||
ls = "eza";
|
||||
ll = "eza -l";
|
||||
la = "eza -a";
|
||||
lla = "eza -la";
|
||||
|
||||
rebuild = "sudo nixos-rebuild switch --flake .#natsu";
|
||||
update = "nix flake update";
|
||||
clean = "sudo nix-collect-garbage -d";
|
||||
};
|
||||
interactiveShellInit = ''
|
||||
set -g fish_greeting ""
|
||||
set -g fish_color_command blue
|
||||
set -g fish_color_error red
|
||||
set -g fish_color_param cyan
|
||||
'';
|
||||
};
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
format = "$username@$hostname:$directory$character";
|
||||
add_newline = false;
|
||||
username = {
|
||||
style_user = "purple";
|
||||
style_root = "purple";
|
||||
format = "[$user]($style)";
|
||||
show_always = true;
|
||||
};
|
||||
hostname = {
|
||||
style = "green";
|
||||
format = "[$hostname]($style)";
|
||||
ssh_only = false;
|
||||
};
|
||||
directory = {
|
||||
style = "blue";
|
||||
format = "[$path]($style)";
|
||||
truncation_length = 3;
|
||||
};
|
||||
character = {
|
||||
success_symbol = " >";
|
||||
error_symbol = " >";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
37
hosts/server/kazusa/secrets/mailserver.yaml
Normal file
37
hosts/server/kazusa/secrets/mailserver.yaml
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
mailserver:
|
||||
oauth:
|
||||
client-id: ENC[AES256_GCM,data:oO2l88K/Tv0EMXQ/8KHpmWspYSKUENboPrWJHhbsrgR9HU9B1xXbnw==,iv:hhXZjZwAcx2KDaiMekv3lO6oFO6p/q4PpiN5R0jUBFs=,tag:fm3ykAcO2jU0JkSFZiQ15Q==,type:str]
|
||||
client-secret: ENC[AES256_GCM,data:b+yUxUCqa8hXbUxMY2GqNMsEf0nG1Mpx36s98WIgSZEWVoLNvjQmPQDJpjP9/ESWqHP4ygc2KLFU+JpG+P0pNw==,iv:7gfq/sK2TtPXIC2ghYt7bYqg6gcXTtU4OAACITbbt5g=,tag:NB3EtaUEqK0VjVsEFLC/uQ==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSVXNQTzcydW1aaUhPWVNU
|
||||
ME45VlF2a0tMOXM1Y05NQkphS3Mxd1BzNjJBCkoyT21XNnNyN3l2N3dUendabVRX
|
||||
UU1BNWNYaEJuc0xhM2dCUDBrOFc2UnMKLS0tIGJlUUcxa0lLdGpDc3oyOC9Yc2hu
|
||||
US83Q3hCNFRPeWtRckEza2l6eTk3Mm8K4U+9Xv+ygFAaV2avf8AoK9+P5w1Ni8PR
|
||||
+msTgvLI3x8pXA2nYXq6s/yRwXwtbe+cLg0js7zWf6QCFdKFzqoQNw==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1mgels4hjl7l07gcnt72g86kvhrvd82fha9kuvlp46mpks7unrpmqvy959u
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKQ1krS3A2b1IwZ3RPemhn
|
||||
R0tiYVpJOEVHeGI3ZitxMVpBWHFNUlNrMkNFCnUzTHBDUGVPTXh3WGhrdmJJSDl3
|
||||
T0RPalZFTGlpRkhPOW5tcmJuZHNQdlEKLS0tIE9lY0pIRWIwYkJHd1JocWpUY2c3
|
||||
elkvcUJsT1UwRHV4SDRMS2w0R3Y0WjgKb0vtH0Ta2WyhBuusOYds25ikZ4FEG415
|
||||
EbSGxQQo84gBg5nfY0W+JnOttJpGUAnxf5kQYYR3rVSxwPc0J7YJJg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1dcvh6q9953es9fvt8rq8rdgcktlt64asn2tf2y3vmyz0gntxzynqg2xgzk
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCNHFKcTRzV2hSa1Eybnk2
|
||||
cjRZdXRwSFBLLzRRRnpGcFp5Z042UUlVL3djCjhJTWJMbklxTWhzOWQ2NmxyMUJm
|
||||
T0QxUTZTNzRGUnlaY3FhWlk2bkhSb2MKLS0tIDd4MWhhK2JNeGFQTE1zSVE2Zmt3
|
||||
TVp2NlJqMWtzY3JJSU5ITlNoR3VSalUKFxw0yQLsHNeR28Nfa8w9SMW7gT94vAZ0
|
||||
y4hREV9XkRpoqoAFcc32TLcp9jdZE0Mh74tuyXDEtbHubWT7z9umhA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1hlsu7fdwwfm93rjt686j9cdy5klefwdus9jdxt5e0vaqh8c2la9qu5utns
|
||||
lastmodified: "2026-05-24T20:07:18Z"
|
||||
mac: ENC[AES256_GCM,data:7V/0fPY/c0nS3DjvDoBTq7wcvAZ/aFUMM/A6bo90U90tmtVIn9Iu8aeYdxbQeHJLzlAKb1oiRNmcKPmlrAI7AT9eaLX52JYZhYcDsLrHzoWo2tRBP4ZEvgvs2bZfqPfzvrdk4mCJ21WWYGLO4lm8i5V4ZDYMb3ezA/h132cpFfs=,iv:0sdfZ5W8KHp92u3HfCZUZexFoomugzbhatatcsdrucs=,tag:nV3OjlNl/ufROREDuE4WVw==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.13.1
|
||||
48
hosts/server/kazusa/services/caddy.nix
Normal file
48
hosts/server/kazusa/services/caddy.nix
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
services.caddy = {
|
||||
enable = true;
|
||||
# globalConfig = ''
|
||||
# servers {
|
||||
# trusted_proxies static cloudflare
|
||||
# }
|
||||
# '';
|
||||
virtualHosts."http://kazusa.icn.mizuki.guru".extraConfig = ''
|
||||
respond "우응" 200
|
||||
'';
|
||||
virtualHosts."designmerge.co.kr".extraConfig = ''
|
||||
reverse_proxy 127.0.0.1:1108
|
||||
'';
|
||||
virtualHosts."plutos.dazzle.st".extraConfig = ''
|
||||
reverse_proxy epc.hikari.mizuki.arpa:3000
|
||||
'';
|
||||
virtualHosts."kurumi.dazzle.st".extraConfig = ''
|
||||
respond 204
|
||||
'';
|
||||
virtualHosts."pluto.dazzle.st".extraConfig = ''
|
||||
respond 204
|
||||
'';
|
||||
virtualHosts."note.dazzle.st".extraConfig = ''
|
||||
respond 204
|
||||
'';
|
||||
virtualHosts."report.dazzle.st".extraConfig = ''
|
||||
respond 204
|
||||
'';
|
||||
|
||||
package = pkgs.caddy.withPlugins {
|
||||
plugins = [
|
||||
"github.com/caddy-dns/cloudflare@v0.2.2"
|
||||
"github.com/aksdb/caddy-cgi/v2@v2.2.6"
|
||||
"github.com/shift72/caddy-geo-ip@v0.6.0"
|
||||
"github.com/lolPants/caddy-requestid@v1.1.2"
|
||||
"github.com/WeidiDeng/caddy-cloudflare-ip@v0.0.0-20231130002422-f53b62aa13cb"
|
||||
"github.com/caddyserver/ntlm-transport@v0.1.2"
|
||||
"github.com/ueffel/caddy-brotli@v1.6.0"
|
||||
"github.com/RussellLuo/caddy-ext/ratelimit@v0.3.0"
|
||||
"github.com/neodyme-labs/user_agent_parse@v0.0.1"
|
||||
];
|
||||
hash = "sha256-n0LkDBE3JB3zrGYND0EGrKXC+CT0SzRiIjj0QXNZZ8k=";
|
||||
};
|
||||
};
|
||||
}
|
||||
201
hosts/server/kazusa/services/mailserver.nix
Normal file
201
hosts/server/kazusa/services/mailserver.nix
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
mailSecret = key: {
|
||||
sopsFile = ../secrets/mailserver.yaml;
|
||||
inherit key;
|
||||
owner = "nginx";
|
||||
group = "nginx";
|
||||
mode = "0440";
|
||||
restartUnits = [
|
||||
"phpfpm-roundcube.service"
|
||||
"dovecot.service"
|
||||
];
|
||||
};
|
||||
|
||||
clientIdSecret = config.sops.secrets."mailserver/oauth/client-id".path;
|
||||
clientSecret = config.sops.secrets."mailserver/oauth/client-secret".path;
|
||||
in
|
||||
{
|
||||
sops.secrets."mailserver/oauth/client-id" = mailSecret "mailserver/oauth/client-id";
|
||||
|
||||
sops.secrets."mailserver/oauth/client-secret" = mailSecret "mailserver/oauth/client-secret";
|
||||
|
||||
imports = [
|
||||
(builtins.fetchTarball {
|
||||
url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/51726d7b7fd94aa69829fd42749a803914cbf3b7/nixos-mailserver-51726d7b7fd94aa69829fd42749a803914cbf3b7.tar.gz";
|
||||
sha256 = "0449ssnpwbgfv0cyddzb8s6g641gy5xh1hd3shg32x8pv0a5qy3a";
|
||||
})
|
||||
];
|
||||
|
||||
security.acme.acceptTerms = false;
|
||||
|
||||
services.roundcube = {
|
||||
enable = true;
|
||||
hostName = "mail.mizuki.guru";
|
||||
|
||||
package = pkgs.roundcube.withPlugins (
|
||||
plugins: with plugins; [
|
||||
persistent_login
|
||||
]
|
||||
);
|
||||
|
||||
plugins = [
|
||||
"persistent_login"
|
||||
"managesieve"
|
||||
];
|
||||
|
||||
dicts = with pkgs.aspellDicts; [
|
||||
en
|
||||
];
|
||||
|
||||
maxAttachmentSize = config.mailserver.messageSizeLimit / 1024 / 1024;
|
||||
|
||||
extraConfig = ''
|
||||
$_SERVER['HTTPS'] = 'on';
|
||||
$_SERVER['SERVER_PORT'] = 443;
|
||||
$_SERVER['HTTP_X_FORWARDED_PORT'] = 443;
|
||||
$_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https';
|
||||
$_SERVER['HTTP_HOST'] = 'mail.mizuki.guru';
|
||||
|
||||
$config['proxy_ips'] = '127.0.0.1';
|
||||
|
||||
$config['imap_host'] = "ssl://${config.mailserver.fqdn}";
|
||||
$config['smtp_host'] = "ssl://${config.mailserver.fqdn}";
|
||||
$config['smtp_user'] = "%u";
|
||||
$config['smtp_pass'] = "%p";
|
||||
|
||||
$config['managesieve_host'] = "tls://${config.mailserver.fqdn}";
|
||||
$config['managesieve_port'] = 4190;
|
||||
$config['managesieve_usetls'] = true;
|
||||
|
||||
$config['oauth_provider'] = 'generic';
|
||||
$config['oauth_provider_name'] = 'authentik';
|
||||
|
||||
$config['oauth_client_id'] =
|
||||
trim(file_get_contents('${clientIdSecret}'));
|
||||
|
||||
$config['oauth_client_secret'] =
|
||||
trim(file_get_contents('${clientSecret}'));
|
||||
|
||||
$config['oauth_auth_uri'] =
|
||||
'https://auth.mizuki.guru/application/o/authorize/';
|
||||
|
||||
$config['oauth_token_uri'] =
|
||||
'https://auth.mizuki.guru/application/o/token/';
|
||||
|
||||
$config['oauth_identity_uri'] =
|
||||
'https://auth.mizuki.guru/application/o/userinfo/';
|
||||
|
||||
$config['oauth_scope'] =
|
||||
"email openid dovecotprofile offline_access";
|
||||
|
||||
$config['oauth_auth_parameters'] = [];
|
||||
$config['oauth_identity_fields'] = ['email'];
|
||||
'';
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts.${config.services.roundcube.hostName} = {
|
||||
forceSSL = false;
|
||||
enableACME = false;
|
||||
|
||||
listen = [
|
||||
{
|
||||
addr = "127.0.0.1";
|
||||
port = 5656;
|
||||
}
|
||||
];
|
||||
|
||||
extraConfig = ''
|
||||
set_real_ip_from 127.0.0.1;
|
||||
real_ip_header X-Forwarded-For;
|
||||
real_ip_recursive on;
|
||||
'';
|
||||
};
|
||||
|
||||
services.caddy = {
|
||||
enable = true;
|
||||
|
||||
virtualHosts."mail.mizuki.guru" = {
|
||||
extraConfig = ''
|
||||
reverse_proxy localhost:5656
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
services.dovecot2.settings = {
|
||||
auth_mechanisms = lib.mkForce [
|
||||
"plain"
|
||||
"login"
|
||||
"xoauth2"
|
||||
"oauthbearer"
|
||||
];
|
||||
|
||||
oauth2_tokeninfo_url = "https://auth.mizuki.guru/application/o/userinfo/?access_token=";
|
||||
|
||||
# 주의:
|
||||
# 여기는 아직 secret '값'이 아니라 secret '경로'가 들어감.
|
||||
# Dovecot이 URL 안에서 file_get_contents 같은 처리를 안 하므로
|
||||
# 이 방식은 제대로 동작하지 않을 가능성이 큼.
|
||||
oauth2_introspection_url = "https://auth.mizuki.guru/application/o/introspect/";
|
||||
|
||||
oauth2_introspection_mode = "post";
|
||||
oauth2_force_introspection = "yes";
|
||||
oauth2_active_attribute = "active";
|
||||
oauth2_active_value = "true";
|
||||
oauth2_username_attribute = "email";
|
||||
};
|
||||
|
||||
users.users.dovecot = {
|
||||
isSystemUser = true;
|
||||
group = "dovecot";
|
||||
extraGroups = [ "caddy" ];
|
||||
};
|
||||
|
||||
users.groups.dovecot = { };
|
||||
|
||||
users.users.postfix.extraGroups = [ "caddy" ];
|
||||
|
||||
mailserver = {
|
||||
enable = true;
|
||||
stateVersion = 4;
|
||||
fqdn = "mail.mizuki.guru";
|
||||
domains = [ "mizuki.guru" ];
|
||||
|
||||
x509 = {
|
||||
certificateFile = "/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/mail.mizuki.guru/mail.mizuki.guru.crt";
|
||||
|
||||
privateKeyFile = "/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/mail.mizuki.guru/mail.mizuki.guru.key";
|
||||
};
|
||||
|
||||
ldap = {
|
||||
enable = true;
|
||||
uris = [ "ldap://10.11.8.102" ];
|
||||
|
||||
bind = {
|
||||
dn = "cn=mailserver,ou=users,dc=ldap,dc=goauthentik,dc=io";
|
||||
passwordFile = "/var/lib/secrets/authentik-ldap-bind-pw";
|
||||
};
|
||||
|
||||
base = "ou=users,dc=ldap,dc=goauthentik,dc=io";
|
||||
scope = "sub";
|
||||
|
||||
attributes = {
|
||||
uuid = "uid";
|
||||
username = "mail";
|
||||
mail = "mail";
|
||||
};
|
||||
|
||||
dovecot = {
|
||||
passFilter = "mail=%{user}\n bind = yes";
|
||||
};
|
||||
};
|
||||
|
||||
accounts = { };
|
||||
};
|
||||
}
|
||||
6
hosts/server/natsu/.sops.yaml
Normal file
6
hosts/server/natsu/.sops.yaml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
creation_rules:
|
||||
- path_regex: secrets/.*\.ya?ml$
|
||||
age:
|
||||
- age1mgels4hjl7l07gcnt72g86kvhrvd82fha9kuvlp46mpks7unrpmqvy959u # mizuki
|
||||
- age1dcvh6q9953es9fvt8rq8rdgcktlt64asn2tf2y3vmyz0gntxzynqg2xgzk # hako
|
||||
- age1p0hw9lwk33x5w83a4gkjva325leq5h0pgeglhcwm4c9kju4qtu4ss7qppr # natsu
|
||||
83
hosts/server/natsu/configuration.nix
Normal file
83
hosts/server/natsu/configuration.nix
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
{ pkgs, inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
"${inputs.self}/modules/nixos/base"
|
||||
"${inputs.self}/modules/nixos/features/boot.nix"
|
||||
"${inputs.self}/modules/nixos/features/ssh.nix"
|
||||
"${inputs.self}/modules/nixos/features/docker.nix"
|
||||
];
|
||||
|
||||
# 1. Docker 추가 설정 (IPv6)
|
||||
virtualisation.docker.daemon.settings = {
|
||||
fixed-cidr-v6 = "fd00::/80";
|
||||
ipv6 = true;
|
||||
};
|
||||
|
||||
# 2. 크론 설정
|
||||
services.cron = {
|
||||
enable = true;
|
||||
systemCronJobs = [
|
||||
"1 0 * * * imnyang * * * * * printf '\n%s : ' '$(date)' >> /home/imnyang/codelounge.log && /home/imnyang/codelounge.sh >> /home/imnyang/codelounge.log"
|
||||
];
|
||||
};
|
||||
services.netbird.enable = true;
|
||||
|
||||
# 3. 사용자 SSH 키 등록
|
||||
users.users.imnyang.openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOHP3Z+AYrRh9f8TYyqChKfeyNm3lOe0F75AwRHTTaxD imnyang@kazusa"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIrpjEYOBx7LTGb7QsPrmPBboqyTUNm/e+4+yqWruljv imnyang@natsu"
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
eza
|
||||
neovim
|
||||
nil
|
||||
nixd
|
||||
bun
|
||||
stdenv.cc.cc.lib
|
||||
];
|
||||
|
||||
programs.nix-ld.enable = true;
|
||||
|
||||
systemd.services.blog = {
|
||||
description = "blog.imnya.ng";
|
||||
after = [ "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = "imnyang";
|
||||
Environment = [
|
||||
"LD_LIBRARY_PATH=${pkgs.stdenv.cc.cc.lib}/lib"
|
||||
];
|
||||
WorkingDirectory = "/home/imnyang/git/imnyang/blog";
|
||||
ExecStart = "${pkgs.bun}/bin/bun run preview";
|
||||
Restart = "always";
|
||||
RestartSec = 5;
|
||||
};
|
||||
|
||||
path = [ pkgs.bun ];
|
||||
};
|
||||
|
||||
services.qemuGuest.enable = true;
|
||||
|
||||
boot.kernel.sysctl = {
|
||||
"net.ipv4.ip_forward" = 1;
|
||||
"net.ipv6.conf.all.forwarding" = 1;
|
||||
};
|
||||
|
||||
programs.git.config = {
|
||||
safe.directory = "*";
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
22
|
||||
80
|
||||
443
|
||||
];
|
||||
|
||||
networking.hostName = "natsu";
|
||||
system.stateVersion = "26.05";
|
||||
}
|
||||
30
hosts/server/natsu/default.nix
Normal file
30
hosts/server/natsu/default.nix
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
inputs,
|
||||
overlays,
|
||||
}:
|
||||
let
|
||||
inherit (inputs) nixpkgs home-manager sops-nix;
|
||||
in
|
||||
nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
sops-nix.nixosModules.sops
|
||||
# ./services/attic.nix
|
||||
./services/caddy.nix
|
||||
./services/forgejo-runner.nix
|
||||
# ./services/harmonia.nix
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
home-manager.users.imnyang = import ./home.nix;
|
||||
}
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
inherit overlays;
|
||||
};
|
||||
}
|
||||
31
hosts/server/natsu/hardware-configuration.nix
Normal file
31
hosts/server/natsu/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# 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 = [ "xhci_pci" "virtio_pci" "virtio_scsi" "usbhid" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/ffe787e4-f39c-4c9b-b2f5-273386198307";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/E854-0DD3";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0022" "dmask=0022" ];
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
|
||||
}
|
||||
|
||||
80
hosts/server/natsu/home.nix
Normal file
80
hosts/server/natsu/home.nix
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
nr = import "${inputs.self}/modules/nixos/features/packages/nr.nix" { inherit pkgs; };
|
||||
nrr = import "${inputs.self}/modules/nixos/features/packages/nrr.nix" { inherit pkgs; };
|
||||
in
|
||||
{
|
||||
home.stateVersion = "26.05";
|
||||
home.username = "imnyang";
|
||||
home.homeDirectory = "/home/imnyang";
|
||||
|
||||
home.packages = [
|
||||
nr
|
||||
nrr
|
||||
];
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nano";
|
||||
VISUAL = "nano";
|
||||
};
|
||||
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
shellAliases = {
|
||||
# 디렉토리 네비게이션
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
|
||||
# ls 별칭
|
||||
ls = "eza";
|
||||
ll = "eza -l";
|
||||
la = "eza -a";
|
||||
lla = "eza -la";
|
||||
|
||||
# NixOS 관련
|
||||
rebuild = "sudo nixos-rebuild switch --flake .#natsu";
|
||||
update = "nix flake update";
|
||||
clean = "sudo nix-collect-garbage -d";
|
||||
};
|
||||
interactiveShellInit = ''
|
||||
set -g fish_greeting ""
|
||||
set -g fish_color_command blue
|
||||
set -g fish_color_error red
|
||||
set -g fish_color_param cyan
|
||||
'';
|
||||
};
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
format = "$username@$hostname:$directory$character";
|
||||
add_newline = false;
|
||||
username = {
|
||||
style_user = "purple";
|
||||
style_root = "purple";
|
||||
format = "[$user]($style)";
|
||||
show_always = true;
|
||||
};
|
||||
hostname = {
|
||||
style = "green";
|
||||
format = "[$hostname]($style)";
|
||||
ssh_only = false;
|
||||
};
|
||||
directory = {
|
||||
style = "blue";
|
||||
format = "[$path]($style)";
|
||||
truncation_length = 3;
|
||||
};
|
||||
character = {
|
||||
success_symbol = " >";
|
||||
error_symbol = " >";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
35
hosts/server/natsu/secrets/forgejo-runner.yaml
Normal file
35
hosts/server/natsu/secrets/forgejo-runner.yaml
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
forgejo-runner:
|
||||
token: ENC[AES256_GCM,data:NBOcn5Z99hyQEHotUuVOwvlOqd/lKrXy4pUSobbmPSnVB5yAzTdUv5vv+J9z27z4wg==,iv:C9QBd+Kw2BcX+LkTwuRHpl/G6fw8iGWJPIWDvL8lcKU=,tag:2ZRQzx2P6THlpuDDdpuZgw==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLNzVoeHM2LzRYdGp5Snlj
|
||||
UUlKNThlczFZcFJKMXpJSG42eHVLbjFsamxNCkZiaGNJRFA4bmZHT0g4ZytjZEJY
|
||||
SHhWblNOa2ZGUWtJZzZLYi9RTjJjcW8KLS0tIHRBV0Z6bEdybUppSHpGMHBsN1A2
|
||||
ZitWOTJsUHlvUXp3NEtUK0Jwc1VSU1EK9tZNPBKuY9G0vsDP0RMA/W2xBrN5LBj1
|
||||
0j9N309gyFNqCuR3ZEpoarAx6rpD1Q8wQYhhZQw+z7h2+eGPNp9Qvw==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age10kkqzxkxdkr9322fd536gcs43xqvdw609ffpc4vqqf3f77tzmvlq45q55s
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1VDI1L0lzZHVTMHNaRTZS
|
||||
Y3prZnpNMFEwL2dPdlZreGRjRzNLUGFFZEVNCndML3BHKy9EaGpqREVlQVJCdkRC
|
||||
MXlMeW5sTXZzUE83d2FtbW5ybHh5dzAKLS0tIDVKdTNxdC9yRCtvQmhNbzhtdFA4
|
||||
OFJtaG0rcHFPaHJUVjNKckl5UGpDSm8K1cyMiVEVir4uaFJuwQkpcbLmXet4txX+
|
||||
9QrM+WQr73JfoIirHZhZLM0aAXQDwXG791N6iu2x/Q9BbbqLT5c73A==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1dcvh6q9953es9fvt8rq8rdgcktlt64asn2tf2y3vmyz0gntxzynqg2xgzk
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArTzJNUkZWVCtQNVpyeEpj
|
||||
TG44TEppaXkrR2M4K3Y2TEVFWHlKWDYwaFY0CmxNN3Awb0wzUHo0Q21yUERBUXBz
|
||||
WXYzL0VHcnQxa3UwS3hMRzM0cndtUjAKLS0tIERjaDhZYzlJWmZ6R09Ub0NmTytT
|
||||
QjZxRUJGU01XRCs5aGZVUElTQ2wxTUEKhnM25DGalV+mfPp8FD40x25Eq5/XudPn
|
||||
jBWu84zEtL8Ja9XECKaXJiP7oi1YaX8+BV8BdlIfDGR9ceiZRIhlrA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1p0hw9lwk33x5w83a4gkjva325leq5h0pgeglhcwm4c9kju4qtu4ss7qppr
|
||||
lastmodified: "2026-05-28T02:55:30Z"
|
||||
mac: ENC[AES256_GCM,data:DSY6wQyYBBWcA9aqZkFVJ7JyvFTvXm3r6Zu4xE0dStBgyv/0O5l0pEmekKlYuMWXd3VmAWhH7VCsVN7RyeoLpimm97MfedKIfd/wVISuBy0SA2q3frfwbuith6yfXRqmsGNzG7ivnZ146w8uWGf5RCef1m2Nl9QPeai7dUcB/3c=,iv:XPV8gTSWJzXoOj5bqa+R23deWD2GUaQp+w2b9ThG6V4=,tag:BLWeaRbfYjV8fzieemVBfg==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.13.1
|
||||
122
hosts/server/natsu/services/caddy.nix
Normal file
122
hosts/server/natsu/services/caddy.nix
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
services.caddy = {
|
||||
enable = true;
|
||||
virtualHosts."http://natsu.icn.mizuki.guru".extraConfig = ''
|
||||
respond "우응" 200
|
||||
'';
|
||||
virtualHosts."https://file.mizuki.guru".extraConfig = ''
|
||||
reverse_proxy 10.11.8.112 {
|
||||
header_up Host {host}
|
||||
header_up X-Real-IP {remote_host}
|
||||
header_up X-Forwarded-For {remote_host}
|
||||
}
|
||||
'';
|
||||
virtualHosts."http://file.mizuki.guru".extraConfig = ''
|
||||
reverse_proxy 10.11.8.112 {
|
||||
header_up Host {host}
|
||||
header_up X-Real-IP {remote_host}
|
||||
header_up X-Forwarded-For {remote_host}
|
||||
}
|
||||
'';
|
||||
|
||||
virtualHosts."auth.mizuki.guru".extraConfig = ''
|
||||
reverse_proxy 10.11.8.102:9080
|
||||
'';
|
||||
|
||||
virtualHosts."plutos.dazzle.st".extraConfig = ''
|
||||
reverse_proxy epc.hikari.mizuki.arpa:3000
|
||||
'';
|
||||
|
||||
virtualHosts."event.dazzle.st".extraConfig = ''
|
||||
reverse_proxy 10.11.8.102:9794
|
||||
'';
|
||||
|
||||
virtualHosts."pve.hikari.icn.mizuki.guru".extraConfig = ''
|
||||
reverse_proxy https://10.11.8.100:8006 {
|
||||
header_up X-Real-Ip {remote_host}
|
||||
header_up X-Http-Version {http.request.proto}
|
||||
transport http {
|
||||
tls_insecure_skip_verify
|
||||
}
|
||||
}
|
||||
'';
|
||||
|
||||
virtualHosts."cockpit.hikari.icn.mizuki.guru".extraConfig = ''
|
||||
reverse_proxy https://10.11.8.100:9090 {
|
||||
header_up X-Real-Ip {remote_host}
|
||||
header_up X-Http-Version {http.request.proto}
|
||||
transport http {
|
||||
tls_insecure_skip_verify
|
||||
}
|
||||
}
|
||||
'';
|
||||
|
||||
virtualHosts."cache.mizuki.guru".extraConfig = ''
|
||||
reverse_proxy 127.0.0.1:5000
|
||||
'';
|
||||
|
||||
virtualHosts."paste.mizuki.guru".extraConfig = ''
|
||||
reverse_proxy 10.11.8.102:11108
|
||||
'';
|
||||
virtualHosts."komodo.mizuki.guru".extraConfig = ''
|
||||
reverse_proxy 10.11.8.102:9120
|
||||
'';
|
||||
|
||||
virtualHosts."ena.mizuki.guru".extraConfig = ''
|
||||
basic_auth {
|
||||
imnyang $2a$10$zA83XKt84pcXiwfkuvNmKOpQ5Cw0IP6m/.1AX0ahkVQaPOzrmFlxm
|
||||
}
|
||||
reverse_proxy 10.20.31.103:3000
|
||||
'';
|
||||
|
||||
virtualHosts."akiyama.mizuki.guru".extraConfig = ''
|
||||
rewrite / /index.avif
|
||||
root * /var/static/akiyama.mizuki.guru
|
||||
file_server
|
||||
'';
|
||||
|
||||
virtualHosts."chef.mizuki.guru".extraConfig = ''
|
||||
root * /var/static/chef.mizuki.guru
|
||||
rewrite / /CyberChef_v10.22.1.html
|
||||
file_server {
|
||||
precompressed br gzip
|
||||
}
|
||||
header {
|
||||
Cache-Control "public, max-age=31536000"
|
||||
}
|
||||
'';
|
||||
|
||||
virtualHosts."blog.imnya.ng".extraConfig = ''
|
||||
reverse_proxy 127.0.0.1:4321
|
||||
'';
|
||||
virtualHosts."netbird.mizuki.guru".extraConfig = ''
|
||||
# Native gRPC (needs HTTP/2 cleartext to backend)
|
||||
@grpc header Content-Type application/grpc*
|
||||
reverse_proxy @grpc h2c://127.0.0.1:8081
|
||||
|
||||
# Combined server paths (relay, signal, management, OAuth2)
|
||||
@backend path /relay* /ws-proxy/* /api/* /oauth2/*
|
||||
reverse_proxy @backend 127.0.0.1:8081
|
||||
|
||||
# Dashboard (everything else)
|
||||
reverse_proxy /* 127.0.0.1:8080
|
||||
'';
|
||||
|
||||
package = pkgs.caddy.withPlugins {
|
||||
plugins = [
|
||||
"github.com/caddy-dns/cloudflare@v0.2.2"
|
||||
"github.com/aksdb/caddy-cgi/v2@v2.2.6"
|
||||
"github.com/shift72/caddy-geo-ip@v0.6.0"
|
||||
"github.com/lolPants/caddy-requestid@v1.1.2"
|
||||
"github.com/WeidiDeng/caddy-cloudflare-ip@v0.0.0-20231130002422-f53b62aa13cb"
|
||||
"github.com/caddyserver/ntlm-transport@v0.1.2"
|
||||
"github.com/ueffel/caddy-brotli@v1.6.0"
|
||||
"github.com/RussellLuo/caddy-ext/ratelimit@v0.3.0"
|
||||
"github.com/neodyme-labs/user_agent_parse@v0.0.1"
|
||||
];
|
||||
hash = "sha256-n0LkDBE3JB3zrGYND0EGrKXC+CT0SzRiIjj0QXNZZ8k=";
|
||||
};
|
||||
};
|
||||
}
|
||||
67
hosts/server/natsu/services/forgejo-runner.nix
Normal file
67
hosts/server/natsu/services/forgejo-runner.nix
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
runnerSecret = key: {
|
||||
sopsFile = ../secrets/forgejo-runner.yaml;
|
||||
inherit key;
|
||||
owner = "root";
|
||||
group = "root";
|
||||
};
|
||||
in
|
||||
{
|
||||
sops.secrets."forgejo-runner/token" = runnerSecret "forgejo-runner/token";
|
||||
|
||||
services.gitea-actions-runner = {
|
||||
package = pkgs.forgejo-runner;
|
||||
instances.my-forgejo-instance = {
|
||||
enable = true;
|
||||
name = "natsu-cicd";
|
||||
tokenFile = config.sops.secrets."forgejo-runner/token".path;
|
||||
url = "https://git.mizuki.guru/";
|
||||
labels = [
|
||||
"node-24:docker://node:24-bookworm"
|
||||
"nixos-latest:docker://nixos/nix"
|
||||
"native:host"
|
||||
"AArch64:host"
|
||||
"ubuntu-latest:docker://git.mizuki.guru/packages/act:ubuntu-latest-aarch64"
|
||||
];
|
||||
|
||||
# act 엔진의 컨테이너 보안 가드 및 디렉토리 이탈 방지 설정 주입
|
||||
settings = {
|
||||
container = {
|
||||
# 호스트 측의 임시 디렉토리 마운트 허용 범위를 명시
|
||||
valid_volumes = [
|
||||
"/var/run/docker.sock"
|
||||
"/tmp"
|
||||
"/run/user"
|
||||
];
|
||||
# 컨테이너 내 작업 디렉토리를 절대 경로로 고정하여 탈출 방지
|
||||
workdir = "/workspace";
|
||||
};
|
||||
runner = {
|
||||
# act 실행 환경 내부 임시 경로 강제 고정
|
||||
envs = {
|
||||
ACT_TEMP_DIR = "/tmp/act";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
hostPackages = with pkgs; [
|
||||
bash
|
||||
git
|
||||
python3
|
||||
docker
|
||||
docker-compose
|
||||
docker-buildx
|
||||
nodejs
|
||||
bun
|
||||
wget
|
||||
curl
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
19
modules/home/ciscopackettracer.nix
Normal file
19
modules/home/ciscopackettracer.nix
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{ pkgs, inputs, ... }:
|
||||
let
|
||||
system = pkgs.stdenv.hostPlatform.system;
|
||||
pkgsPacketTracer8 = import inputs.nixpkgs-2511 {
|
||||
inherit system;
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
permittedInsecurePackages = [
|
||||
"ciscoPacketTracer8-8.2.2"
|
||||
];
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
home.packages = [
|
||||
pkgs.cisco-packet-tracer_9
|
||||
pkgsPacketTracer8.ciscoPacketTracer8
|
||||
];
|
||||
}
|
||||
34
modules/home/discord/linux.nix
Normal file
34
modules/home/discord/linux.nix
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [ inputs.nixcord.homeModules.nixcord ];
|
||||
# imports = [ inputs.nixcord.nixosModules.nixcord ];
|
||||
programs.nixcord = {
|
||||
enable = true;
|
||||
|
||||
discord = {
|
||||
branch = "canary";
|
||||
vencord.enable = false;
|
||||
equicord.enable = true;
|
||||
krisp.enable = true;
|
||||
};
|
||||
|
||||
vesktop.enable = true;
|
||||
# equibop.enable = true;
|
||||
config.plugins = import ./plugin.nix;
|
||||
};
|
||||
home.packages = with pkgs; [
|
||||
discord-gamesdk
|
||||
];
|
||||
|
||||
# home.activation.krispPatch = lib.mkIf (!pkgs.stdenv.isDarwin) (
|
||||
# lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
# ${krisp-patcher}/bin/krisp-patcher $(${pkgs.findutils}/bin/find $HOME/.config/discord/ -name "discord_krisp.node" -path "*/modules/discord_krisp/*") || true
|
||||
# ''
|
||||
# );
|
||||
}
|
||||
23
modules/home/discord/mac.nix
Normal file
23
modules/home/discord/mac.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# darwin-configuration.nix
|
||||
{ inputs, pkgs, ... }:
|
||||
{
|
||||
imports = [ inputs.nixcord.darwinModules.nixcord ];
|
||||
|
||||
programs.nixcord = {
|
||||
enable = true;
|
||||
user = "imnyang"; # Needed for system-level config
|
||||
|
||||
discord = {
|
||||
package = pkgs.discord-canary;
|
||||
vencord.enable = false;
|
||||
equicord.enable = true;
|
||||
# krisp.enable = true;
|
||||
};
|
||||
|
||||
equibop.enable = true;
|
||||
|
||||
config.plugins = import ./plugin.nix;
|
||||
};
|
||||
|
||||
environment.systemPackages = [ pkgs.discord-gamesdk ];
|
||||
}
|
||||
69
modules/home/discord/plugin.nix
Normal file
69
modules/home/discord/plugin.nix
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
{
|
||||
alwaysAnimate.enable = true;
|
||||
alwaysExpandRoles.enable = true;
|
||||
blurNsfw.enable = true;
|
||||
callTimer = {
|
||||
enable = true;
|
||||
format = "human";
|
||||
};
|
||||
crashHandler.enable = true;
|
||||
disableCallIdle.enable = true;
|
||||
dontRoundMyTimestamps.enable = true;
|
||||
fixCodeblockGap.enable = true;
|
||||
fixImagesQuality.enable = true;
|
||||
fixYoutubeEmbeds.enable = true;
|
||||
forceOwnerCrown.enable = true;
|
||||
messageLogger = {
|
||||
enable = true;
|
||||
};
|
||||
clientSideBlock = {
|
||||
enable = true;
|
||||
hideBlockedUsers = true;
|
||||
hideBlockedMessages = true;
|
||||
hideEmptyRoles = false;
|
||||
hideVc = true;
|
||||
blockedReplyDisplay = "hideReply";
|
||||
};
|
||||
serverListIndicators.enable = true;
|
||||
showTimeoutDuration.enable = true;
|
||||
# silentTyping.enable = true;
|
||||
textReplace.enable = true;
|
||||
textReplace.regexRules = [
|
||||
{
|
||||
find = "https?:\\/\\/(www\\.)?instagram\\.com\\/[^\\/]+\\/(p|reel)\\/([A-Za-z0-9-_]+)\\/?";
|
||||
replace = "https://g.ddinstagram.com/$2/$3";
|
||||
}
|
||||
{
|
||||
find = "https:\\/\\/x\\.com\\/([^\\/]+\\/status\\/[0-9]+)";
|
||||
replace = "https://fixupx.com/$1";
|
||||
}
|
||||
{
|
||||
find = "https:\\/\\/twitter\\.com\\/([^\\/]+\\/status\\/[0-9]+)";
|
||||
replace = "https://fixupx.com/$1";
|
||||
}
|
||||
{
|
||||
find = "https:\\/\\/(www\\.|old\\.)?reddit\\.com\\/(r\\/[a-zA-Z0-9_]+\\/comments\\/[a-zA-Z0-9_]+\\/[^\\s]*)";
|
||||
replace = "https://vxreddit.com/$2";
|
||||
}
|
||||
{
|
||||
find = "https:\\/\\/(www\\.)?pixiv\\.net\\/(.*)";
|
||||
replace = "https://phixiv.net/$2";
|
||||
}
|
||||
{
|
||||
find = "https:\\/\\/(?:www\\.|m\\.)?twitch\\.tv\\/twitch\\/clip\\/(.*)";
|
||||
replace = "https://clips.fxtwitch.tv/$1";
|
||||
}
|
||||
{
|
||||
find = "https:\\/\\/(?:www\\.)?youtube\\.com\\/(?:watch\\?v=|shorts\\/)([a-zA-Z0-9_-]+)";
|
||||
replace = "https://youtu.be/$1";
|
||||
}
|
||||
];
|
||||
translate.enable = true;
|
||||
typingIndicator.enable = true;
|
||||
typingTweaks.enable = true;
|
||||
userVoiceShow.enable = true;
|
||||
validReply.enable = true;
|
||||
validUser.enable = true;
|
||||
volumeBooster.enable = true;
|
||||
spotifyCrack.enable = true;
|
||||
}
|
||||
29
modules/home/firefox.nix
Normal file
29
modules/home/firefox.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{ pkgs, config, ... }:
|
||||
{
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
configPath = ".mozilla/firefox";
|
||||
package = pkgs.firefox-devedition;
|
||||
policies = {
|
||||
Preferences = {
|
||||
"widget.use-xdg-desktop-portal.file-picker" = {
|
||||
Value = 1;
|
||||
Status = "default";
|
||||
};
|
||||
"middlemouse.paste" = {
|
||||
Value = false;
|
||||
Status = "default";
|
||||
};
|
||||
};
|
||||
ExtensionSettings = {
|
||||
"figma-windows-ua-spoofer@imnyang.local" = {
|
||||
installation_mode = "force_installed";
|
||||
install_url = "https://git.mizuki.guru/imnyang/thisiswindowsfigma/releases/download/v1.0.0/d168a70cb6a24fe4a478-1.0.0.xpi";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
home.file.".waterfox/native-messaging-hosts".source =
|
||||
config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/.mozilla/native-messaging-hosts";
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue