flake: Initialise new repository
This commit is contained in:
commit
1eb25ada72
41 changed files with 1657 additions and 0 deletions
44
README.md
Normal file
44
README.md
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
# Floccus
|
||||
|
||||
## Mac setup
|
||||
|
||||
### Installation
|
||||
|
||||
```sh
|
||||
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
|
||||
git clone git@github.com:jukremer/nix-config.git ~/.confin/nix
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
nix run nix-darwin -- switch --flake ~/.config/nix
|
||||
```
|
||||
|
||||
### Switch
|
||||
|
||||
```sh
|
||||
darwin-rebuild switch --flake ~/.config/nix
|
||||
```
|
||||
|
||||
### Update
|
||||
|
||||
```sh
|
||||
nix flake update --commit-lock-file ~/.config/nix
|
||||
```
|
||||
|
||||
## NixOS setup
|
||||
|
||||
### Installation
|
||||
|
||||
```sh
|
||||
git clone git@github.com:jukremer/nix-config.git ~/.confin/nix
|
||||
```
|
||||
|
||||
### Switch
|
||||
|
||||
```sh
|
||||
sudo nixos-rebuild switch --flake ~/.config/nix
|
||||
```
|
||||
|
||||
### Update
|
||||
|
||||
```sh
|
||||
nix flake update --commit-lock-file ~/.config/nix
|
||||
```
|
||||
151
flake.lock
generated
Normal file
151
flake.lock
generated
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
{
|
||||
"nodes": {
|
||||
"agenix": {
|
||||
"inputs": {
|
||||
"darwin": "darwin",
|
||||
"home-manager": "home-manager",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1750173260,
|
||||
"narHash": "sha256-9P1FziAwl5+3edkfFcr5HeGtQUtrSdk/MksX39GieoA=",
|
||||
"owner": "ryantm",
|
||||
"repo": "agenix",
|
||||
"rev": "531beac616433bac6f9e2a19feb8e99a22a66baf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "ryantm",
|
||||
"repo": "agenix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"darwin": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"agenix",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1744478979,
|
||||
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
|
||||
"owner": "lnl7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "lnl7",
|
||||
"ref": "master",
|
||||
"repo": "nix-darwin",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"darwin_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1751313918,
|
||||
"narHash": "sha256-HsJM3XLa43WpG+665aGEh8iS8AfEwOIQWk3Mke3e7nk=",
|
||||
"owner": "LnL7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "e04a388232d9a6ba56967ce5b53a8a6f713cdfcf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "LnL7",
|
||||
"repo": "nix-darwin",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"agenix",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1745494811,
|
||||
"narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1751513147,
|
||||
"narHash": "sha256-idSXM3Y0KNf/WDDqGfthiOSQMwZYwis1JZhTkdWrr6A=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "426b405d979d893832549b95f23c13537c65d244",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1751271578,
|
||||
"narHash": "sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU+tt4YY=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3016b4b15d13f3089db8a41ef937b13a9e33a8df",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"agenix": "agenix",
|
||||
"darwin": "darwin_2",
|
||||
"home-manager": "home-manager_2",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
45
flake.nix
Normal file
45
flake.nix
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
description = "floccus";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
darwin = {
|
||||
url = "github:LnL7/nix-darwin";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
agenix = {
|
||||
url = "github:ryantm/agenix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs =
|
||||
{
|
||||
nixpkgs,
|
||||
darwin,
|
||||
...
|
||||
}@inputs:
|
||||
{
|
||||
darwinConfigurations.Mac-von-Jan = darwin.lib.darwinSystem {
|
||||
system = "aarch64-darwin";
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
};
|
||||
modules = [ ./hosts/mac/configuration.nix ];
|
||||
};
|
||||
|
||||
nixosConfigurations.galanthus = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
inherit inputs;
|
||||
};
|
||||
modules = [ ./hosts/galanthus/configuration.nix ];
|
||||
};
|
||||
|
||||
formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.nixfmt-tree;
|
||||
};
|
||||
}
|
||||
68
hosts/galanthus/configuration.nix
Normal file
68
hosts/galanthus/configuration.nix
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
{ inputs, pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
inputs.agenix.nixosModules.default
|
||||
./hardware-configuration.nix
|
||||
../../modules/nixos
|
||||
];
|
||||
|
||||
boot = {
|
||||
loader = {
|
||||
systemd-boot.enable = true;
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
};
|
||||
|
||||
networking = {
|
||||
hostName = "galanthus";
|
||||
networkmanager.enable = true;
|
||||
};
|
||||
|
||||
nix = {
|
||||
settings = {
|
||||
experimental-features = [
|
||||
"nix-command"
|
||||
"flakes"
|
||||
];
|
||||
trusted-users = [ "jan" ];
|
||||
};
|
||||
gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
};
|
||||
};
|
||||
|
||||
users.users.jan = {
|
||||
isNormalUser = true;
|
||||
description = "Jan Kremer";
|
||||
extraGroups = [
|
||||
"networkmanager"
|
||||
"wheel"
|
||||
];
|
||||
};
|
||||
|
||||
services = {
|
||||
openssh.enable = true;
|
||||
};
|
||||
|
||||
programs = {
|
||||
git.enable = true;
|
||||
|
||||
gnupg.agent = {
|
||||
enable = true;
|
||||
enableSSHSupport = true;
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.yt-dlp
|
||||
pkgs.spotdl
|
||||
pkgs.ffmpeg
|
||||
];
|
||||
|
||||
time.timeZone = "Europe/Berlin";
|
||||
|
||||
i18n.defaultLocale = "de_DE.UTF-8";
|
||||
|
||||
system.stateVersion = "23.11"; # Don't change!
|
||||
}
|
||||
59
hosts/galanthus/hardware-configuration.nix
Normal file
59
hosts/galanthus/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
modulesPath,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||
|
||||
boot = {
|
||||
initrd.availableKernelModules = [
|
||||
"xhci_pci"
|
||||
"ahci"
|
||||
"usbhid"
|
||||
"usb_storage"
|
||||
"sd_mod"
|
||||
];
|
||||
initrd.kernelModules = [ ];
|
||||
kernelModules = [
|
||||
"fuse"
|
||||
"kvm-intel"
|
||||
"coretemp"
|
||||
];
|
||||
extraModulePackages = [ ];
|
||||
};
|
||||
|
||||
fileSystems = {
|
||||
"/" = {
|
||||
device = "/dev/disk/by-uuid/a5d90a39-7b34-4112-9d76-90c279ececfb";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
"/boot" = {
|
||||
device = "/dev/disk/by-uuid/F9B8-FABD";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
## 8 TB HDD
|
||||
"/mnt/sdb1" = {
|
||||
device = "/dev/disk/by-uuid/10fef994-6ff0-4896-bc34-1ca4403af3d7";
|
||||
fsType = "ext4";
|
||||
};
|
||||
};
|
||||
|
||||
swapDevices = [
|
||||
{
|
||||
device = "/swapfile";
|
||||
size = 16 * 1024; # 16GB
|
||||
}
|
||||
];
|
||||
|
||||
networking = {
|
||||
useDHCP = lib.mkDefault true;
|
||||
interfaces.eno1.wakeOnLan.enable = true;
|
||||
};
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
109
hosts/mac/configuration.nix
Normal file
109
hosts/mac/configuration.nix
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
{ inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
inputs.home-manager.darwinModules.home-manager
|
||||
inputs.agenix.darwinModules.default
|
||||
../../modules/darwin
|
||||
];
|
||||
|
||||
## Set username and home directory (required by home-manager)
|
||||
users.users.jan = {
|
||||
name = "jan";
|
||||
home = "/Users/jan";
|
||||
};
|
||||
networking.hostName = "Mac-von-Jan";
|
||||
|
||||
nix = {
|
||||
enable = false;
|
||||
## Recommended for nixd
|
||||
nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
|
||||
settings = {
|
||||
experimental-features = [
|
||||
"nix-command"
|
||||
"flakes"
|
||||
];
|
||||
trusted-users = [
|
||||
"root"
|
||||
"jan"
|
||||
"@admin"
|
||||
];
|
||||
};
|
||||
# gc.automatic = true;
|
||||
};
|
||||
|
||||
nixpkgs = {
|
||||
hostPlatform = "aarch64-darwin";
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
users.jan = import ../../modules/home-manager;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs;
|
||||
};
|
||||
backupFileExtension = "backup";
|
||||
};
|
||||
|
||||
homebrew = {
|
||||
enable = true;
|
||||
onActivation = {
|
||||
upgrade = true;
|
||||
cleanup = "zap";
|
||||
};
|
||||
};
|
||||
|
||||
programs = {
|
||||
zsh.enable = true;
|
||||
fish.enable = true;
|
||||
};
|
||||
|
||||
security.pam.services.sudo_local.touchIdAuth = true;
|
||||
|
||||
system = {
|
||||
primaryUser = "jan";
|
||||
defaults = {
|
||||
dock = {
|
||||
autohide = true;
|
||||
autohide-delay = 0.0;
|
||||
autohide-time-modifier = 0.0;
|
||||
orientation = "left";
|
||||
mru-spaces = false;
|
||||
largesize = 64;
|
||||
magnification = false;
|
||||
# persistent-apps = [
|
||||
# "/Applications/Safari.app"
|
||||
# "/System/Applications/Mail.app"
|
||||
# "/System/Applications/Calendar.app"
|
||||
# "/Applications/Things3.app"
|
||||
# "/Applications/Ghostty.app"
|
||||
# "/Applications/Obsidian.app"
|
||||
# "/System/Applications/Preview.app"
|
||||
# "/Applications/NetNewsWire.app"
|
||||
# "/System/Applications/Music.app"
|
||||
# "/System/Applications/Books.app"
|
||||
# "/System/Applications/System Settings.app"
|
||||
# ];
|
||||
};
|
||||
finder = {
|
||||
AppleShowAllExtensions = true;
|
||||
FXPreferredViewStyle = "clmv";
|
||||
ShowPathbar = true;
|
||||
_FXShowPosixPathInTitle = true;
|
||||
};
|
||||
# screencapture.location = "~/Pictures/Bildschirmfotos";
|
||||
};
|
||||
keyboard = {
|
||||
enableKeyMapping = true;
|
||||
remapCapsLockToEscape = true;
|
||||
};
|
||||
|
||||
## Set Git commit hash for darwin-version.
|
||||
configurationRevision = inputs.self.rev or inputs.self.dirtyRev or null;
|
||||
|
||||
## Used for backwards compatibility, please read the changelog before changing.
|
||||
## $ darwin-rebuild changelog
|
||||
stateVersion = 4;
|
||||
};
|
||||
}
|
||||
14
modules/darwin/apps.nix
Normal file
14
modules/darwin/apps.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
homebrew.masApps = {
|
||||
"AdGuard for Safari" = 1440147259;
|
||||
"Tailscale" = 1475387142;
|
||||
"GarageBand" = 682658836;
|
||||
"iMovie" = 408981434;
|
||||
|
||||
# Work
|
||||
"Keynote" = 409183694;
|
||||
"Numbers" = 409203825;
|
||||
"Pages" = 409201541;
|
||||
"Things" = 904280696;
|
||||
};
|
||||
}
|
||||
22
modules/darwin/casks.nix
Normal file
22
modules/darwin/casks.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
homebrew.casks = [
|
||||
"glance-chamburr"
|
||||
"iina"
|
||||
"netnewswire"
|
||||
"electrum"
|
||||
"monero-wallet"
|
||||
"keepassxc"
|
||||
"element"
|
||||
"signal"
|
||||
|
||||
# Work
|
||||
"visual-studio-code"
|
||||
"obsidian"
|
||||
"chatgpt"
|
||||
"ghostty"
|
||||
|
||||
# Games
|
||||
"minecraft"
|
||||
"modrinth"
|
||||
];
|
||||
}
|
||||
7
modules/darwin/default.nix
Normal file
7
modules/darwin/default.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
imports = [
|
||||
./apps.nix
|
||||
./casks.nix
|
||||
./fonts.nix
|
||||
];
|
||||
}
|
||||
18
modules/darwin/fonts.nix
Normal file
18
modules/darwin/fonts.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
fonts.packages = with pkgs; [
|
||||
atkinson-hyperlegible
|
||||
jetbrains-mono
|
||||
open-sans
|
||||
];
|
||||
homebrew.casks = [
|
||||
"font-chomsky"
|
||||
"font-cormorant-garamond"
|
||||
"font-crimson-text"
|
||||
"font-new-york"
|
||||
"font-sf-compact"
|
||||
"font-sf-mono"
|
||||
"font-sf-pro"
|
||||
"font-unifrakturmaguntia"
|
||||
];
|
||||
}
|
||||
39
modules/home-manager/colors.nix
Normal file
39
modules/home-manager/colors.nix
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
# Rosé Pine Moon (https://rosepinetheme.com)
|
||||
programs = {
|
||||
bat = {
|
||||
config.theme = "rose-pine";
|
||||
themes.rose-pine = {
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "rose-pine";
|
||||
repo = "tm-theme";
|
||||
rev = "c4235f9a65fd180ac0f5e4396e3a86e21a0884ec";
|
||||
hash = "sha256-jji8WOKDkzAq8K+uSZAziMULI8Kh7e96cBRimGvIYKY=";
|
||||
};
|
||||
file = "dist/themes/rose-pine.tmTheme";
|
||||
};
|
||||
};
|
||||
|
||||
fzf.colors = {
|
||||
"fg" = "#908caa";
|
||||
"bg" = "#191724";
|
||||
"hl" = "#ebbcba";
|
||||
"fg+" = "#e0def4";
|
||||
"bg+" = "#26233a";
|
||||
"hl+" = "#ebbcba";
|
||||
"border" = "#403d52";
|
||||
"header" = "#31748f";
|
||||
"gutter" = "#191724";
|
||||
"spinner" = "#f6c177";
|
||||
"info" = "#9ccfd8";
|
||||
"pointer" = "#c4a7e7";
|
||||
"marker" = "#eb6f92";
|
||||
"prompt" = "#908caa";
|
||||
};
|
||||
|
||||
ghostty.settings.theme = "rose-pine";
|
||||
|
||||
helix.settings.theme = "rose_pine";
|
||||
};
|
||||
}
|
||||
89
modules/home-manager/default.nix
Normal file
89
modules/home-manager/default.nix
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
inputs.agenix.homeManagerModules.default
|
||||
./colors.nix
|
||||
./ghostty.nix
|
||||
./git
|
||||
./helix.nix
|
||||
./packages.nix
|
||||
./shell
|
||||
];
|
||||
|
||||
home = {
|
||||
username = "jan";
|
||||
homeDirectory = "/Users/jan";
|
||||
stateVersion = "24.05";
|
||||
|
||||
## Mute login message in terminal
|
||||
file.".hushlogin".text = "";
|
||||
|
||||
sessionVariables = {
|
||||
DIRENV_LOG_FORMAT = "";
|
||||
LEDGER_FILE = "${config.xdg.dataHome}/ledger/2024.journal";
|
||||
OPENAI_API_KEY = "$(cat ${config.age.secrets.openai.path})";
|
||||
};
|
||||
|
||||
shellAliases = {
|
||||
"yt" = "yt-dlp";
|
||||
"yta" = "yt-dlp -x";
|
||||
};
|
||||
|
||||
packages = [ inputs.agenix.packages.${pkgs.system}.default ];
|
||||
};
|
||||
|
||||
age = {
|
||||
# identityPaths = [ "~/.ssh/id_ed25519" ];
|
||||
secrets."openai".file = ../secrets/openai.age;
|
||||
};
|
||||
|
||||
xdg = {
|
||||
enable = true;
|
||||
userDirs = {
|
||||
videos = "${config.home.homeDirectory}/Movies/Videos";
|
||||
};
|
||||
};
|
||||
|
||||
programs = {
|
||||
home-manager.enable = true;
|
||||
|
||||
gpg = {
|
||||
enable = true;
|
||||
homedir = "${config.xdg.dataHome}/gnupg";
|
||||
settings = {
|
||||
default-key = "20AF0A659F2B93AD918415D1A7DA689CB3B078EC";
|
||||
keyserver = "hkps://keys.openpgp.org";
|
||||
};
|
||||
};
|
||||
|
||||
pandoc.enable = true;
|
||||
|
||||
ssh = {
|
||||
enable = true;
|
||||
addKeysToAgent = "yes";
|
||||
extraConfig = ''
|
||||
UseKeychain yes
|
||||
IdentityFile ~/.ssh/id_ed25519
|
||||
SetEnv TERM=xterm-256color
|
||||
'';
|
||||
};
|
||||
|
||||
yt-dlp = {
|
||||
enable = true;
|
||||
settings = {
|
||||
output = "${config.xdg.userDirs.videos}/%(title)s.%(ext)s";
|
||||
format-sort = "res:1080";
|
||||
audio-quality = 0;
|
||||
sponsorblock-mark = "default";
|
||||
embed-metadata = true;
|
||||
embed-thumbnail = true;
|
||||
xattrs = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
14
modules/home-manager/ghostty.nix
Normal file
14
modules/home-manager/ghostty.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
programs.ghostty = {
|
||||
enable = true;
|
||||
package = null;
|
||||
enableZshIntegration = true;
|
||||
settings = {
|
||||
font-size = 16;
|
||||
window-padding-x = 5;
|
||||
window-padding-balance = true;
|
||||
mouse-hide-while-typing = true;
|
||||
macos-option-as-alt = "left";
|
||||
};
|
||||
};
|
||||
}
|
||||
68
modules/home-manager/git/default.nix
Normal file
68
modules/home-manager/git/default.nix
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
{
|
||||
imports = [
|
||||
./ignores.nix
|
||||
];
|
||||
|
||||
home.sessionVariables = {
|
||||
GITHUB_TOKEN = "$(gh auth token)";
|
||||
};
|
||||
|
||||
programs = {
|
||||
git = {
|
||||
enable = true;
|
||||
userName = "Jan Kremer";
|
||||
userEmail = "mail@jankremer.eu";
|
||||
lfs.enable = true;
|
||||
difftastic.enable = true;
|
||||
|
||||
extraConfig = {
|
||||
user.signingkey = "A7DA689CB3B078EC";
|
||||
credential.helper = "osxkeychain";
|
||||
merge.conflictstyle = "zdiff3";
|
||||
commit = {
|
||||
verbose = true;
|
||||
gpgsign = true;
|
||||
};
|
||||
branch.sort = "-committerdate";
|
||||
help.autocorrect = 10;
|
||||
diff = {
|
||||
algorithm = "histogram";
|
||||
colorMoved = "default";
|
||||
};
|
||||
log.date = "iso";
|
||||
rebase.autostash = true;
|
||||
rerere.enabled = true;
|
||||
push = {
|
||||
followtags = true;
|
||||
autoSetupRemote = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
gh = {
|
||||
enable = true;
|
||||
settings.git_protocol = "ssh";
|
||||
};
|
||||
|
||||
sapling = {
|
||||
enable = true;
|
||||
userName = "Jan Kremer";
|
||||
userEmail = "mail@jankremer.eu";
|
||||
};
|
||||
|
||||
jujutsu = {
|
||||
enable = true;
|
||||
settings = {
|
||||
user = {
|
||||
name = "Jan Kremer";
|
||||
email = "mail@jankremer.eu";
|
||||
};
|
||||
signing = {
|
||||
behavior = "own";
|
||||
backend = "gpg";
|
||||
};
|
||||
ui.default-command = "log";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
30
modules/home-manager/git/ignores.nix
Normal file
30
modules/home-manager/git/ignores.nix
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
programs.git.ignores = [
|
||||
"*.7z"
|
||||
"*.class"
|
||||
"*.com"
|
||||
"*.dll"
|
||||
"*.dmg"
|
||||
"*.exe"
|
||||
"*.gz"
|
||||
"*.iso"
|
||||
"*.jar"
|
||||
"*.log"
|
||||
"*.o"
|
||||
"*.pdf"
|
||||
"*.rar"
|
||||
"*.so"
|
||||
"*.sql"
|
||||
"*.sqlite"
|
||||
"*.tar"
|
||||
"*.zip"
|
||||
".DS_Store"
|
||||
".DS_Store?"
|
||||
".Spotlight-V100"
|
||||
".Trashes"
|
||||
"._*"
|
||||
".direnv"
|
||||
"Thumbs.db"
|
||||
"ehthumbs.db"
|
||||
];
|
||||
}
|
||||
103
modules/home-manager/helix.nix
Normal file
103
modules/home-manager/helix.nix
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.helix = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
markdown-oxide
|
||||
nixd
|
||||
nixfmt-rfc-style
|
||||
];
|
||||
|
||||
settings = {
|
||||
editor = {
|
||||
line-number = "relative";
|
||||
cursorline = true;
|
||||
color-modes = true;
|
||||
mouse = true;
|
||||
|
||||
end-of-line-diagnostics = "hint";
|
||||
inline-diagnostics.cursor-line = "warning";
|
||||
|
||||
cursor-shape = {
|
||||
insert = "bar";
|
||||
normal = "block";
|
||||
select = "underline";
|
||||
};
|
||||
|
||||
soft-wrap.enable = true;
|
||||
|
||||
statusline = {
|
||||
left = [
|
||||
"mode"
|
||||
"spinner"
|
||||
"version-control"
|
||||
"read-only-indicator"
|
||||
"file-modification-indicator"
|
||||
];
|
||||
|
||||
center = [ "file-name" ];
|
||||
|
||||
right = [
|
||||
"diagnostics"
|
||||
"selections"
|
||||
"register"
|
||||
"position"
|
||||
"position-percentage"
|
||||
"file-encoding"
|
||||
"file-type"
|
||||
];
|
||||
|
||||
mode = {
|
||||
normal = "NORMAL";
|
||||
insert = "INSERT";
|
||||
select = "SELECT";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
keys = {
|
||||
normal = {
|
||||
X = [
|
||||
"extend_line_up"
|
||||
"extend_to_line_bounds"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
languages = {
|
||||
language-server = {
|
||||
tinymist.command = "tinymist";
|
||||
nixd = {
|
||||
command = "nixd";
|
||||
config = {
|
||||
formatting.command = [ "nixfmt" ];
|
||||
nixpkgs.expr = "import (builtins.getFlake \"~/.config/nix\").inputs.nixpkgs { }";
|
||||
options = {
|
||||
nixos.expr = "(builtins.getFlake \"~/.config/nix\").nixosConfigurations.galanthus.options";
|
||||
darwin.expr = "(builtins.getFlake \"~/.config/nix\").darwinConfigurations.Mac-von-Jan.options";
|
||||
home-manager.expr = "(builtins.getFlake \"~/.config/nix\").homeConfigurations.jan.options";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
language = [
|
||||
{
|
||||
name = "nix";
|
||||
language-servers = [ "nixd" ];
|
||||
formatter.command = "nixfmt";
|
||||
auto-format = true;
|
||||
}
|
||||
{
|
||||
name = "typst";
|
||||
language-servers = [ "tinymist" ];
|
||||
formatter.command = "typstyle";
|
||||
auto-format = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
24
modules/home-manager/packages.nix
Normal file
24
modules/home-manager/packages.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
darwin.trash
|
||||
curl
|
||||
nh
|
||||
cachix
|
||||
hledger
|
||||
hledger-web
|
||||
ffmpeg
|
||||
imagemagick
|
||||
|
||||
# Work
|
||||
codex
|
||||
typst
|
||||
hayagriva
|
||||
# quarto
|
||||
# R
|
||||
# rPackages.reticulate
|
||||
# texliveFull
|
||||
plantuml
|
||||
ditaa
|
||||
];
|
||||
}
|
||||
12
modules/home-manager/shell/bat.nix
Normal file
12
modules/home-manager/shell/bat.nix
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.bat = {
|
||||
enable = true;
|
||||
extraPackages = with pkgs.bat-extras; [ batman ];
|
||||
};
|
||||
|
||||
home.shellAliases = {
|
||||
"cat" = "bat";
|
||||
"man" = "batman";
|
||||
};
|
||||
}
|
||||
49
modules/home-manager/shell/default.nix
Normal file
49
modules/home-manager/shell/default.nix
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
imports = [
|
||||
./bat.nix
|
||||
# ./fish.nix
|
||||
./starship.nix
|
||||
./zsh.nix
|
||||
];
|
||||
|
||||
home.shellAliases = {
|
||||
"deploy" =
|
||||
"ssh -t galanthus 'cd ~/.config/nix; git pull --rebase; sudo nixos-rebuild switch --flake ~/.config/nix'";
|
||||
"mv" = "mv -i";
|
||||
"rm" = "trash";
|
||||
"tree" = "lt";
|
||||
"zz" = "z -";
|
||||
};
|
||||
|
||||
programs = {
|
||||
direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
config = {
|
||||
warn_timeout = "1m";
|
||||
hide_env_diff = true;
|
||||
};
|
||||
};
|
||||
|
||||
eza = {
|
||||
enable = true;
|
||||
git = true;
|
||||
};
|
||||
|
||||
fzf = {
|
||||
enable = true;
|
||||
defaultCommand = "fd --type f --strip-cwd-prefix --hidden --follow --exclude .git";
|
||||
fileWidgetCommand = "fd --type f --strip-cwd-prefix --hidden --follow --exclude .git";
|
||||
fileWidgetOptions = [ "--preview 'bat --color=always {}'" ];
|
||||
};
|
||||
|
||||
fd.enable = true;
|
||||
|
||||
ripgrep = {
|
||||
enable = true;
|
||||
arguments = [ "--ignore-case" ];
|
||||
};
|
||||
|
||||
zoxide.enable = true;
|
||||
};
|
||||
}
|
||||
22
modules/home-manager/shell/fish.nix
Normal file
22
modules/home-manager/shell/fish.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
interactiveShellInit = # fish
|
||||
''
|
||||
set fish_greeting
|
||||
set fish_vi_key_bindings
|
||||
set fish_vi_cursor
|
||||
|
||||
eval $(/opt/homebrew/bin/brew shellenv fish)
|
||||
'';
|
||||
|
||||
shellAbbrs = {
|
||||
gs = "git status";
|
||||
gc = "git commit";
|
||||
gca = "git commit -a";
|
||||
gcaa = "git commit -a --amend";
|
||||
gco = "git checkout";
|
||||
};
|
||||
};
|
||||
}
|
||||
94
modules/home-manager/shell/starship.nix
Normal file
94
modules/home-manager/shell/starship.nix
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
{ lib, ... }:
|
||||
{
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
enableTransience = true;
|
||||
settings = {
|
||||
add_newline = false;
|
||||
format = lib.concatStrings [
|
||||
"$username"
|
||||
"$hostname"
|
||||
"$directory"
|
||||
"$git_branch"
|
||||
"$git_status"
|
||||
"$git_metrics"
|
||||
"$git_state"
|
||||
"$nodejs"
|
||||
"$rust"
|
||||
"$golang"
|
||||
"$python"
|
||||
"$typst"
|
||||
"$gleam"
|
||||
"$fill"
|
||||
"$nix_shell"
|
||||
"$shell"
|
||||
"$line_break"
|
||||
"$character"
|
||||
];
|
||||
|
||||
fill = {
|
||||
symbol = " ";
|
||||
};
|
||||
|
||||
character = {
|
||||
success_symbol = "[❯](green)";
|
||||
error_symbol = "[❯](red)";
|
||||
vimcmd_symbol = "[❮](blue)";
|
||||
};
|
||||
|
||||
directory = {
|
||||
style = "blue";
|
||||
};
|
||||
|
||||
git_branch = {
|
||||
format = "[$branch(:$remote_branch)](white) ";
|
||||
};
|
||||
|
||||
git_status = {
|
||||
style = "cyan";
|
||||
};
|
||||
|
||||
nodejs = {
|
||||
symbol = "nodejs";
|
||||
format = "[$symbol ($version )](green)";
|
||||
};
|
||||
|
||||
rust = {
|
||||
symbol = "rust";
|
||||
format = "[$symbol ($version )](red)";
|
||||
};
|
||||
|
||||
python = {
|
||||
symbol = "python";
|
||||
format = "[$symbol ($version )](yellow)";
|
||||
};
|
||||
|
||||
golang = {
|
||||
symbol = "go";
|
||||
format = "[$symbol ($version )](green)";
|
||||
};
|
||||
|
||||
typst = {
|
||||
symbol = "typst";
|
||||
format = "[$symbol ($version )](green)";
|
||||
};
|
||||
|
||||
gleam = {
|
||||
symbol = "gleam";
|
||||
format = "[$symbol ($version )](purple)";
|
||||
};
|
||||
|
||||
nix_shell = {
|
||||
symbol = "nix";
|
||||
heuristic = true;
|
||||
format = "[$symbol ($state $name )](red)";
|
||||
};
|
||||
|
||||
shell = {
|
||||
disabled = false;
|
||||
fish_indicator = "fish ";
|
||||
format = "[$indicator](purple)";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
40
modules/home-manager/shell/zsh.nix
Normal file
40
modules/home-manager/shell/zsh.nix
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
{ config, ... }:
|
||||
{
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
# enableVteIntegration = true;
|
||||
dotDir = ".config/zsh";
|
||||
history = {
|
||||
path = "${config.xdg.stateHome}/zsh/zsh_history";
|
||||
extended = true;
|
||||
};
|
||||
autosuggestion.enable = true;
|
||||
autocd = true;
|
||||
syntaxHighlighting = {
|
||||
enable = true;
|
||||
highlighters = [
|
||||
"main"
|
||||
"cursor"
|
||||
"brackets"
|
||||
"root"
|
||||
];
|
||||
};
|
||||
initContent = # sh
|
||||
''
|
||||
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||||
|
||||
setopt COMPLETE_IN_WORD
|
||||
setopt ALWAYS_TO_END
|
||||
setopt PATH_DIRS
|
||||
setopt AUTO_MENU
|
||||
setopt AUTO_LIST
|
||||
setopt MENU_COMPLETE
|
||||
'';
|
||||
|
||||
completionInit = # sh
|
||||
''
|
||||
autoload -U compinit && compinit
|
||||
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
|
||||
'';
|
||||
};
|
||||
}
|
||||
6
modules/nixos/adguardhome.nix
Normal file
6
modules/nixos/adguardhome.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
services.adguardhome = {
|
||||
enable = true;
|
||||
port = 3000;
|
||||
};
|
||||
}
|
||||
31
modules/nixos/audiobookshelf.nix
Normal file
31
modules/nixos/audiobookshelf.nix
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
containers.audiobooks = {
|
||||
autoStart = true;
|
||||
bindMounts = {
|
||||
"/var/lib/audiobookshelf" = {
|
||||
hostPath = "/mnt/sdb1/media/audiobooks";
|
||||
isReadOnly = false;
|
||||
};
|
||||
};
|
||||
|
||||
config =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
services = {
|
||||
audiobookshelf = {
|
||||
enable = true;
|
||||
# port = 8000;
|
||||
# host = "audiobooks.alpine-centauri.ts.net";
|
||||
};
|
||||
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "server";
|
||||
interfaceName = "userspace-networking";
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
18
modules/nixos/default.nix
Normal file
18
modules/nixos/default.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
imports = [
|
||||
# ./adguardhome.nix
|
||||
./audiobookshelf.nix
|
||||
./forgejo.nix
|
||||
# ./freshrss.nix
|
||||
# ./immich.nix
|
||||
./jellyfin.nix
|
||||
./mealie.nix
|
||||
./minecraft.nix
|
||||
./navidrome.nix
|
||||
# ./nextcloud.nix
|
||||
# ./pinchflat.nix
|
||||
./samba.nix
|
||||
./tailscale.nix
|
||||
# ./vaultwarden.nix
|
||||
];
|
||||
}
|
||||
58
modules/nixos/forgejo.nix
Normal file
58
modules/nixos/forgejo.nix
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
{ inputs, ... }:
|
||||
{
|
||||
containers.git = {
|
||||
autoStart = true;
|
||||
bindMounts."/etc/ssh/ssh_host_ed25519_key".hostPath = "/etc/ssh/ssh_host_ed25519_key";
|
||||
|
||||
config = {
|
||||
imports = [ inputs.agenix.nixosModules.default ];
|
||||
|
||||
age = {
|
||||
identityPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
|
||||
secrets."forgejo-runner-token" = {
|
||||
file = ../secrets/forgejo-runner-token.age;
|
||||
mode = "400";
|
||||
owner = "forgejo";
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
forgejo = {
|
||||
enable = true;
|
||||
database.type = "postgres";
|
||||
lfs.enable = true;
|
||||
settings = {
|
||||
server = {
|
||||
DOMAIN = "git.alpine-centauri.ts.net";
|
||||
ROOT_URL = "https://git.alpine-centauri.ts.net/";
|
||||
HTTP_PORT = 3000;
|
||||
};
|
||||
actions = {
|
||||
ENABLED = true;
|
||||
DEFAULT_ACTIONS_URL = "https://code.forgejo.org";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# gitea-actions-runner = {
|
||||
# package = pkgs.forgejo-runner;
|
||||
# instances.native = {
|
||||
# enable = true;
|
||||
# name = "native";
|
||||
# url = "https://git.alpine-centauri.ts.net";
|
||||
# tokenFile = config.age.secrets.forgejo-runner-token.path;
|
||||
# labels = [ "native:host" ];
|
||||
# };
|
||||
# };
|
||||
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "server";
|
||||
interfaceName = "userspace-networking";
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
24
modules/nixos/freshrss.nix
Normal file
24
modules/nixos/freshrss.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
containers.freshrss = {
|
||||
autoStart = true;
|
||||
|
||||
config = {
|
||||
services = {
|
||||
freshrss = {
|
||||
enable = true;
|
||||
language = "de";
|
||||
authType = "none";
|
||||
baseUrl = "https://freshrss.alpine-centauri.ts.net";
|
||||
};
|
||||
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "server";
|
||||
interfaceName = "userspace-networking";
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
29
modules/nixos/immich.nix
Normal file
29
modules/nixos/immich.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
containers.immich = {
|
||||
autoStart = true;
|
||||
|
||||
bindMounts = {
|
||||
"/var/lib/immich" = {
|
||||
hostPath = "/mnt/sdb1/photos";
|
||||
isReadOnly = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
services = {
|
||||
immich = {
|
||||
enable = true;
|
||||
host = "immich.alpine-centauri.ts.net";
|
||||
};
|
||||
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "server";
|
||||
interfaceName = "userspace-networking";
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
69
modules/nixos/jellyfin.nix
Normal file
69
modules/nixos/jellyfin.nix
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
{
|
||||
containers.jellyfin = {
|
||||
autoStart = true;
|
||||
bindMounts = {
|
||||
"/media" = {
|
||||
hostPath = "/mnt/sdb1/media";
|
||||
isReadOnly = false;
|
||||
};
|
||||
};
|
||||
|
||||
config =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
services = {
|
||||
jellyfin = {
|
||||
enable = true; # port = 8096
|
||||
openFirewall = true;
|
||||
};
|
||||
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "server";
|
||||
interfaceName = "userspace-networking";
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
jellyfin
|
||||
jellyfin-web
|
||||
jellyfin-ffmpeg
|
||||
];
|
||||
|
||||
## Hardware transcoding
|
||||
nixpkgs.config.packageOverrides = pkgs: {
|
||||
vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; };
|
||||
};
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
extraPackages = with pkgs; [
|
||||
intel-media-driver
|
||||
intel-vaapi-driver # previously vaapiIntel
|
||||
vaapiVdpau
|
||||
intel-compute-runtime # OpenCL filter support (hardware tonemapping and subtitle burn-in)
|
||||
# vpl-gpu-rt # QSV on 11th gen or newer
|
||||
intel-media-sdk # QSV up to 11th gen
|
||||
];
|
||||
};
|
||||
|
||||
## Grab EPG data daily
|
||||
systemd = {
|
||||
services.epg = {
|
||||
script = "${pkgs.nodejs_18}/bin/npm run --prefix /media/TV/epg/ grab -- --channels=custom.channels.xml";
|
||||
path = [
|
||||
pkgs.bash
|
||||
pkgs.nodejs_18
|
||||
];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = "root";
|
||||
};
|
||||
startAt = "daily"; # Creates a timer
|
||||
};
|
||||
timers.epg.timerConfig.Persistent = true;
|
||||
};
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
22
modules/nixos/mealie.nix
Normal file
22
modules/nixos/mealie.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
containers.mealie = {
|
||||
autoStart = true;
|
||||
|
||||
config = {
|
||||
services = {
|
||||
mealie = {
|
||||
enable = true;
|
||||
port = 9000;
|
||||
};
|
||||
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "server";
|
||||
interfaceName = "userspace-networking";
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
36
modules/nixos/minecraft.nix
Normal file
36
modules/nixos/minecraft.nix
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{ lib, ... }:
|
||||
{
|
||||
containers.minecraft = {
|
||||
autoStart = true;
|
||||
|
||||
bindMounts = {
|
||||
"/var/lib/minecraft" = {
|
||||
hostPath = "/mnt/sdb1/minecraft";
|
||||
isReadOnly = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
nixpkgs.config.allowUnfreePredicate =
|
||||
pkg:
|
||||
builtins.elem (lib.getName pkg) [
|
||||
"minecraft-server"
|
||||
];
|
||||
|
||||
services = {
|
||||
minecraft-server = {
|
||||
enable = true;
|
||||
eula = true;
|
||||
};
|
||||
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "server";
|
||||
interfaceName = "userspace-networking";
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
31
modules/nixos/navidrome.nix
Normal file
31
modules/nixos/navidrome.nix
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
containers.music = {
|
||||
autoStart = true;
|
||||
bindMounts = {
|
||||
"/Music" = {
|
||||
hostPath = "/mnt/sdb1/media/Music";
|
||||
isReadOnly = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
services = {
|
||||
navidrome = {
|
||||
enable = true;
|
||||
settings = {
|
||||
MusicFolder = "/Music";
|
||||
port = 4533;
|
||||
};
|
||||
};
|
||||
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "server";
|
||||
interfaceName = "userspace-networking";
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
86
modules/nixos/nextcloud.nix
Normal file
86
modules/nixos/nextcloud.nix
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
{ inputs, ... }:
|
||||
{
|
||||
containers.nextcloud = {
|
||||
autoStart = true;
|
||||
bindMounts = {
|
||||
"/etc/ssh/ssh_host_ed25519_key".hostPath = "/etc/ssh/ssh_host_ed25519_key";
|
||||
"/var/lib/nextcloud/data" = {
|
||||
hostPath = "/mnt/sdb1/data";
|
||||
isReadOnly = false;
|
||||
};
|
||||
};
|
||||
|
||||
config =
|
||||
{ pkgs, config, ... }:
|
||||
{
|
||||
imports = [ inputs.agenix.nixosModules.default ];
|
||||
|
||||
age = {
|
||||
identityPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
|
||||
secrets."nextcloud" = {
|
||||
file = ../secrets/nextcloud.age;
|
||||
mode = "400";
|
||||
owner = "nextcloud";
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
nextcloud = {
|
||||
enable = true;
|
||||
package = pkgs.nextcloud30;
|
||||
hostName = "nextcloud";
|
||||
https = true;
|
||||
config = {
|
||||
adminpassFile = config.age.secrets.nextcloud.path;
|
||||
};
|
||||
settings = {
|
||||
trusted_domains = [ "nextcloud.alpine-centauri.ts.net" ];
|
||||
enabledPreviewProviders = [
|
||||
"OC\\Preview\\AVI"
|
||||
"OC\\Preview\\BMP"
|
||||
"OC\\Preview\\GIF"
|
||||
"OC\\Preview\\HEIC"
|
||||
"OC\\Preview\\JPEG"
|
||||
"OC\\Preview\\Krita"
|
||||
"OC\\Preview\\MKV"
|
||||
"OC\\Preview\\MP3"
|
||||
"OC\\Preview\\MP4"
|
||||
"OC\\Preview\\MarkDown"
|
||||
"OC\\Preview\\Movie"
|
||||
"OC\\Preview\\OpenDocument"
|
||||
"OC\\Preview\\PDF"
|
||||
"OC\\Preview\\PNG"
|
||||
"OC\\Preview\\TXT"
|
||||
"OC\\Preview\\XBitmap"
|
||||
];
|
||||
};
|
||||
|
||||
database.createLocally = true;
|
||||
configureRedis = true;
|
||||
|
||||
maxUploadSize = "1G";
|
||||
|
||||
## Set up non-declaratively for now
|
||||
# extraAppsEnable = true;
|
||||
# autoUpdateApps.enable = true;
|
||||
# extraApps = {
|
||||
# inherit (config.services.nextcloud.package.packages.apps)
|
||||
# news
|
||||
# contacts
|
||||
# calendar
|
||||
# tasks
|
||||
# ;
|
||||
# };
|
||||
};
|
||||
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "server";
|
||||
interfaceName = "userspace-networking";
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
31
modules/nixos/pinchflat.nix
Normal file
31
modules/nixos/pinchflat.nix
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
virtualisation.oci-containers = {
|
||||
containers = {
|
||||
pinchflat = {
|
||||
image = "ghcr.io/kieraneglin/pinchflat:latest";
|
||||
environment.TZ = "Europe/Berlin";
|
||||
ports = [ "127.0.0.1:8945:8945" ];
|
||||
volumes = [
|
||||
"/mnt/sdb1/media/youtube/config:/config"
|
||||
"/mnt/sdb1/media/youtube/downloads:/downloads"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
containers.youtube = {
|
||||
autoStart = true;
|
||||
|
||||
config = {
|
||||
services = {
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "server";
|
||||
interfaceName = "userspace-networking";
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
34
modules/nixos/samba.nix
Normal file
34
modules/nixos/samba.nix
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
services.samba = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
global = {
|
||||
"vfs objects" = "catia fruit streams_xattr";
|
||||
"guest account" = "jan";
|
||||
"fruit:model" = "MacPro7,1@ECOLOR=226,226,224";
|
||||
};
|
||||
|
||||
Media = {
|
||||
path = "/mnt/sdb1/media";
|
||||
writeable = "yes";
|
||||
};
|
||||
|
||||
TimeMachine = {
|
||||
path = "/mnt/sdb1/timemachine";
|
||||
writeable = "yes";
|
||||
"fruit:time machine" = "yes";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
## Used to advertise the shares to Windows hosts
|
||||
services.samba-wsdd = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
};
|
||||
}
|
||||
9
modules/nixos/tailscale.nix
Normal file
9
modules/nixos/tailscale.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
services.tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "both";
|
||||
extraUpFlags = [ "--ssh" ];
|
||||
};
|
||||
|
||||
networking.firewall.checkReversePath = "loose";
|
||||
}
|
||||
32
modules/nixos/vaultwarden.nix
Normal file
32
modules/nixos/vaultwarden.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
containers.vault = {
|
||||
autoStart = true;
|
||||
bindMounts = {
|
||||
"/var/backup/vaultwarden" = {
|
||||
hostPath = "/mnt/sdb1/vaultwarden";
|
||||
isReadOnly = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
services = {
|
||||
vaultwarden = {
|
||||
enable = true;
|
||||
backupDir = "/var/backup/vaultwarden";
|
||||
dbBackend = "postgresql";
|
||||
config = {
|
||||
# SIGNUPS_ALLOWED = false;
|
||||
};
|
||||
};
|
||||
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "server";
|
||||
interfaceName = "userspace-networking";
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
BIN
modules/secrets/forgejo-runner-token.age
Normal file
BIN
modules/secrets/forgejo-runner-token.age
Normal file
Binary file not shown.
7
modules/secrets/nextcloud.age
Normal file
7
modules/secrets/nextcloud.age
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
age-encryption.org/v1
|
||||
-> ssh-ed25519 2otpcg 3veZJ75b0D5gej3P4fHkM8yGzVH5ldkGOCYBkdztoSw
|
||||
KXDhfvj/wfpMXqQ1MspymfJBBqRJktcSngIkEBDSUu4
|
||||
-> ssh-ed25519 40YjXQ L1yJYjyAmCi7W05BAVeFZi3mSCzBNU0/hqm2prEV/wI
|
||||
J6lFx4DD+Lj4tjsBntIlzuvZfqTQ3P7xzNZs0vcZBko
|
||||
--- 0uC4zy+Xahwt3nuFJyNyHVCIPcgwxVX8cXo0ivwQUaU
|
||||
Q€½áÁã²±•!ÅR<C385>GÑEØ)®c¦@Ç n²‡¿âôû…ŠÚ ñ‰nz„hµk²—µ€r
|
||||
BIN
modules/secrets/openai.age
Normal file
BIN
modules/secrets/openai.age
Normal file
Binary file not shown.
13
modules/secrets/secrets.nix
Normal file
13
modules/secrets/secrets.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
let
|
||||
Mac-von-Jan = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPTpgedzJ7vs3GMOjUeQGkAzGhNZRhvMMz9Z1whaWieE";
|
||||
galanthus = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIZYQao2OKQxyic+I327VZ7lQECh9hSS9cgsls3e/a1u";
|
||||
all = [
|
||||
Mac-von-Jan
|
||||
galanthus
|
||||
];
|
||||
in
|
||||
{
|
||||
"nextcloud.age".publicKeys = all;
|
||||
"forgejo-runner-token.age".publicKeys = all;
|
||||
"openai.age".publicKeys = all;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue