Compare commits

...

2 commits

Author SHA1 Message Date
♥ Minnie ♥ 3350d19a45
fmt: alejandra 2024-08-08 09:02:42 +08:00
♥ Minnie ♥ 53378cdfc9
fix: remove nixvim hardcoded system 2024-08-08 08:44:10 +08:00
80 changed files with 464 additions and 543 deletions

View file

@ -112,7 +112,7 @@
"devshell_2": { "devshell_2": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixvim-config", "nixvim",
"nixvim", "nixvim",
"nixpkgs" "nixpkgs"
] ]
@ -198,7 +198,7 @@
"flake-parts_2": { "flake-parts_2": {
"inputs": { "inputs": {
"nixpkgs-lib": [ "nixpkgs-lib": [
"nixvim-config", "nixvim",
"nixvim", "nixvim",
"nixpkgs" "nixpkgs"
] ]
@ -291,18 +291,18 @@
"git-hooks": { "git-hooks": {
"inputs": { "inputs": {
"flake-compat": [ "flake-compat": [
"nixvim-config", "nixvim",
"nixvim", "nixvim",
"flake-compat" "flake-compat"
], ],
"gitignore": "gitignore_2", "gitignore": "gitignore_2",
"nixpkgs": [ "nixpkgs": [
"nixvim-config", "nixvim",
"nixvim", "nixvim",
"nixpkgs" "nixpkgs"
], ],
"nixpkgs-stable": [ "nixpkgs-stable": [
"nixvim-config", "nixvim",
"nixvim", "nixvim",
"nixpkgs" "nixpkgs"
] ]
@ -346,7 +346,7 @@
"gitignore_2": { "gitignore_2": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixvim-config", "nixvim",
"nixvim", "nixvim",
"git-hooks", "git-hooks",
"nixpkgs" "nixpkgs"
@ -411,7 +411,7 @@
"home-manager_3": { "home-manager_3": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixvim-config", "nixvim",
"nixvim", "nixvim",
"nixpkgs" "nixpkgs"
] ]
@ -448,7 +448,7 @@
"nix-darwin": { "nix-darwin": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixvim-config", "nixvim",
"nixvim", "nixvim",
"nixpkgs" "nixpkgs"
] ]
@ -612,6 +612,26 @@
} }
}, },
"nixvim": { "nixvim": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_4",
"nixvim": "nixvim_2"
},
"locked": {
"lastModified": 1723012155,
"narHash": "sha256-7AlUEGsbIOCQmIRc+lH/k2CJ32pdEkFszyMekTOVoJc=",
"ref": "refs/heads/master",
"rev": "e3dc3f07d69bcb0c9df5875aefd7dbf3877be794",
"revCount": 14,
"type": "git",
"url": "https://git.sajenim.dev/jasmine/nvim.nix.git"
},
"original": {
"type": "git",
"url": "https://git.sajenim.dev/jasmine/nvim.nix.git"
}
},
"nixvim_2": {
"inputs": { "inputs": {
"devshell": "devshell_2", "devshell": "devshell_2",
"flake-compat": "flake-compat_3", "flake-compat": "flake-compat_3",
@ -637,31 +657,11 @@
"type": "github" "type": "github"
} }
}, },
"nixvim-config": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_4",
"nixvim": "nixvim"
},
"locked": {
"lastModified": 1723012155,
"narHash": "sha256-7AlUEGsbIOCQmIRc+lH/k2CJ32pdEkFszyMekTOVoJc=",
"ref": "refs/heads/master",
"rev": "e3dc3f07d69bcb0c9df5875aefd7dbf3877be794",
"revCount": 14,
"type": "git",
"url": "https://git.sajenim.dev/jasmine/nvim.nix.git"
},
"original": {
"type": "git",
"url": "https://git.sajenim.dev/jasmine/nvim.nix.git"
}
},
"nuschtosSearch": { "nuschtosSearch": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_4", "flake-utils": "flake-utils_4",
"nixpkgs": [ "nixpkgs": [
"nixvim-config", "nixvim",
"nixvim", "nixvim",
"nixpkgs" "nixpkgs"
] ]
@ -718,7 +718,7 @@
"nix-minecraft": "nix-minecraft", "nix-minecraft": "nix-minecraft",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_3",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"nixvim-config": "nixvim-config" "nixvim": "nixvim"
} }
}, },
"systems": { "systems": {
@ -814,7 +814,7 @@
"treefmt-nix": { "treefmt-nix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixvim-config", "nixvim",
"nixvim", "nixvim",
"nixpkgs" "nixpkgs"
] ]

147
flake.nix
View file

@ -28,84 +28,87 @@
# Add any other flake you might need. # Add any other flake you might need.
nix-minecraft.url = "github:Infinidoge/nix-minecraft"; nix-minecraft.url = "github:Infinidoge/nix-minecraft";
nixvim-config.url = "git+https://git.sajenim.dev/jasmine/nvim.nix.git"; nixvim.url = "git+https://git.sajenim.dev/jasmine/nvim.nix.git";
}; };
outputs = { self, nixpkgs, home-manager, ... }@inputs: outputs = {
let self,
inherit (self) outputs; nixpkgs,
# Supported systems for your flake packages, shell, etc. home-manager,
systems = [ ...
"aarch64-linux" } @ inputs: let
"i686-linux" inherit (self) outputs;
"x86_64-linux" # Supported systems for your flake packages, shell, etc.
"aarch64-darwin" systems = [
"x86_64-darwin" "aarch64-linux"
]; "i686-linux"
# This is a function that generates an attribute by calling a function you "x86_64-linux"
# pass to it, with each system as an argument "aarch64-darwin"
forAllSystems = nixpkgs.lib.genAttrs systems; "x86_64-darwin"
in ];
{ # This is a function that generates an attribute by calling a function you
# Your custom packages # pass to it, with each system as an argument
# Acessible through 'nix build', 'nix shell', etc forAllSystems = nixpkgs.lib.genAttrs systems;
packages = forAllSystems (system: import ./pkgs nixpkgs.legacyPackages.${system}); in {
# Formatter for your nix files, available through 'nix fmt' # Your custom packages
# Other options beside 'alejandra' include 'nixpkgs-fmt' # Acessible through 'nix build', 'nix shell', etc
formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.alejandra); packages = forAllSystems (system: import ./pkgs nixpkgs.legacyPackages.${system});
# Formatter for your nix files, available through 'nix fmt'
# Other options beside 'alejandra' include 'nixpkgs-fmt'
formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.alejandra);
# Your custom packages and modifications, exported as overlays # Your custom packages and modifications, exported as overlays
overlays = import ./overlays { inherit inputs; }; overlays = import ./overlays {inherit inputs;};
# Reusable nixos modules you might want to export # Reusable nixos modules you might want to export
# These are usually stuff you would upstream into nixpkgs # These are usually stuff you would upstream into nixpkgs
nixosModules = import ./modules/nixos; nixosModules = import ./modules/nixos;
# Reusable home-manager modules you might want to export # Reusable home-manager modules you might want to export
# These are usually stuff you would upstream into home-manager # These are usually stuff you would upstream into home-manager
homeManagerModules = import ./modules/home-manager; homeManagerModules = import ./modules/home-manager;
# Expose the necessary information in your flake so agenix-rekey # Expose the necessary information in your flake so agenix-rekey
# knows where it has too look for secrets and paths. # knows where it has too look for secrets and paths.
agenix-rekey = inputs.agenix-rekey.configure { agenix-rekey = inputs.agenix-rekey.configure {
userFlake = self; userFlake = self;
nodes = self.nixosConfigurations; nodes = self.nixosConfigurations;
};
# NixOS configuration entrypoint
# Available through 'nixos-rebuild --flake .#your-hostname'
nixosConfigurations = {
fuchsia = nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs outputs;};
modules = [
./nixos/fuchsia/configuration.nix
];
}; };
# NixOS configuration entrypoint viridian = nixpkgs.lib.nixosSystem {
# Available through 'nixos-rebuild --flake .#your-hostname' specialArgs = {inherit inputs outputs;};
nixosConfigurations = { modules = [
fuchsia = nixpkgs.lib.nixosSystem { ./nixos/viridian/configuration.nix
specialArgs = { inherit inputs outputs; }; ];
modules = [
./nixos/fuchsia/configuration.nix
];
};
viridian = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs outputs; };
modules = [
./nixos/viridian/configuration.nix
];
};
};
# Standalone home-manager configuration entrypoint
# Available through 'home-manager --flake .#your-username@your-hostname'
homeConfigurations = {
"sajenim@fuchsia" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraSpecialArgs = { inherit inputs outputs; };
modules = [
./home-manager/sajenim/fuchsia.nix
];
};
"sajenim@viridian" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraSpecialArgs = { inherit inputs outputs; };
modules = [
./home-manager/sajenim/viridian.nix
];
};
}; };
}; };
# Standalone home-manager configuration entrypoint
# Available through 'home-manager --flake .#your-username@your-hostname'
homeConfigurations = {
"sajenim@fuchsia" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraSpecialArgs = {inherit inputs outputs;};
modules = [
./home-manager/sajenim/fuchsia.nix
];
};
"sajenim@viridian" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
extraSpecialArgs = {inherit inputs outputs;};
modules = [
./home-manager/sajenim/viridian.nix
];
};
};
};
} }

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
imports = [ imports = [
./git.nix ./git.nix
./nvim.nix ./nvim.nix

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
lazygit lazygit
]; ];

View file

@ -1,7 +1,8 @@
{ inputs, ... }:
{ {
inputs,
pkgs,
...
}: {
# Install our nixvim configuration for neovim. # Install our nixvim configuration for neovim.
home.packages = [ inputs.nixvim-config.packages.x86_64-linux.default ]; home.packages = [inputs.nixvim.packages.${pkgs.system}.default];
} }

View file

@ -1,13 +1,11 @@
{ pkgs, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
fzf # command-line fuzzy finder fzf # command-line fuzzy finder
]; ];
programs.zsh = { programs.zsh = {
enable = true; enable = true;
# Enable extra features # Enable extra features
autosuggestion = { autosuggestion = {
enable = true; enable = true;
@ -17,17 +15,17 @@
}; };
enableCompletion = true; enableCompletion = true;
dotDir = ".config/zsh"; dotDir = ".config/zsh";
# Commands that should be added to to top of '.zshrc' # Commands that should be added to to top of '.zshrc'
initExtraFirst = '' initExtraFirst = ''
''; '';
# Aliases # Aliases
shellAliases = { shellAliases = {
c = "clear"; c = "clear";
r = "cd ~/.repositories"; r = "cd ~/.repositories";
p = "cd ~/.print"; p = "cd ~/.print";
d = "cd ~/.repositories/dotfiles.nix"; d = "cd ~/.repositories/dotfiles.nix";
la = "ls -a"; la = "ls -a";
ll = "ls -l"; ll = "ls -l";
tt = "wezterm cli set-tab-title "; tt = "wezterm cli set-tab-title ";
@ -40,7 +38,7 @@
crkbd = "$HOME/.github/qmk_keymaps/keyboards/crkbd/keymaps/sajenim"; crkbd = "$HOME/.github/qmk_keymaps/keyboards/crkbd/keymaps/sajenim";
kchrn = "$HOME/.github/qmk_keymaps/keyboards/keychron/q4/ansi_v2/keymaps/sajenim"; kchrn = "$HOME/.github/qmk_keymaps/keyboards/keychron/q4/ansi_v2/keymaps/sajenim";
}; };
# Install plugins # Install plugins
plugins = [ plugins = [
{ {
@ -53,7 +51,7 @@
}; };
} }
]; ];
# Extra commands that should be added to '.zshrc' # Extra commands that should be added to '.zshrc'
initExtra = '' initExtra = ''
eval "$(direnv hook zsh)" eval "$(direnv hook zsh)"
@ -66,4 +64,3 @@
''; '';
}; };
} }

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: let
let
awesome = pkgs.awesome.overrideAttrs (oa: { awesome = pkgs.awesome.overrideAttrs (oa: {
version = "ad0290bc1aac3ec2391aa14784146a53ebf9d1f0"; version = "ad0290bc1aac3ec2391aa14784146a53ebf9d1f0";
src = pkgs.fetchFromGitHub { src = pkgs.fetchFromGitHub {
@ -9,16 +8,18 @@ let
hash = "sha256-uaskBbnX8NgxrprI4UbPfb5cRqdRsJZv0YXXshfsxFU="; hash = "sha256-uaskBbnX8NgxrprI4UbPfb5cRqdRsJZv0YXXshfsxFU=";
}; };
patches = [ ]; patches = [];
postPatch = '' postPatch = ''
patchShebangs tests/examples/_postprocess.lua patchShebangs tests/examples/_postprocess.lua
''; '';
}); });
in in {
{
xdg.configFile = { xdg.configFile = {
awesome = { source = ./config; recursive = true; }; awesome = {
source = ./config;
recursive = true;
};
}; };
xsession.windowManager.awesome = { xsession.windowManager.awesome = {
@ -26,4 +27,3 @@ in
package = awesome; package = awesome;
}; };
} }

View file

@ -1,6 +1,8 @@
{ inputs, pkgs, ... }:
{ {
inputs,
pkgs,
...
}: {
imports = [ imports = [
./discord ./discord
./rofi ./rofi

View file

@ -1,9 +1,7 @@
{ pkgs, ... }: {pkgs, ...}: {
{
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: prev: { (final: prev: {
discord = prev.discord.override { withOpenASAR = true; }; discord = prev.discord.override {withOpenASAR = true;};
}) })
]; ];

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
# protonmail-bridge requires password manager # protonmail-bridge requires password manager
pass pass
@ -115,4 +113,3 @@
]; ];
}; };
} }

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
weechat weechat
]; ];
@ -16,4 +14,3 @@
]; ];
}; };
} }

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
services.mpd = { services.mpd = {
enable = true; enable = true;
musicDirectory = "nfs://viridian.kanto.dev/srv/multimedia/library/music"; musicDirectory = "nfs://viridian.kanto.dev/srv/multimedia/library/music";

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
services.picom = { services.picom = {
enable = true; enable = true;
shadow = true; shadow = true;

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
programs.rofi = { programs.rofi = {
enable = true; enable = true;
font = "Fisa Code 10"; font = "Fisa Code 10";
@ -16,4 +14,3 @@
recursive = true; recursive = true;
}; };
} }

View file

@ -1,12 +1,12 @@
{ pkgs, ... }: {pkgs, ...}: {
{
home.packages = with pkgs.unstable; [ home.packages = with pkgs.unstable; [
wezterm wezterm
]; ];
xdg.configFile = { xdg.configFile = {
wezterm = { source = ./config; recursive = true; }; wezterm = {
source = ./config;
recursive = true;
};
}; };
} }

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
imports = [ imports = [
./mangohud.nix ./mangohud.nix
]; ];

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
programs.mangohud = { programs.mangohud = {
enable = true; enable = true;
package = pkgs.mangohud; package = pkgs.mangohud;

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
home = { home = {
packages = with pkgs; [ packages = with pkgs; [
blender blender

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
imports = [ imports = [
./global ./global
./features/desktop ./features/desktop
@ -51,4 +49,3 @@
}; };
}; };
} }

View file

@ -1,4 +1,8 @@
{ inputs, outputs, ... }: { {
inputs,
outputs,
...
}: {
imports = [ imports = [
inputs.impermanence.nixosModules.home-manager.impermanence inputs.impermanence.nixosModules.home-manager.impermanence
../features/cli ../features/cli
@ -12,10 +16,10 @@
]; ];
config = { config = {
allowUnfree = true; allowUnfree = true;
allowUnfreePredicate = (_: true); allowUnfreePredicate = _: true;
}; };
}; };
programs.home-manager.enable = true; programs.home-manager.enable = true;
home = { home = {

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
imports = [ imports = [
./global ./global
]; ];

View file

@ -1,6 +1,5 @@
# Add your reusable home-manager modules to this directory, on their own file (https://nixos.wiki/wiki/Module). # Add your reusable home-manager modules to this directory, on their own file (https://nixos.wiki/wiki/Module).
# These should be stuff you would like to share with others, not your personal configurations. # These should be stuff you would like to share with others, not your personal configurations.
{ {
# List your module files here # List your module files here
# my-module = import ./my-module.nix; # my-module = import ./my-module.nix;

View file

@ -1,6 +1,5 @@
# Add your reusable NixOS modules to this directory, on their own file (https://nixos.wiki/wiki/Module). # Add your reusable NixOS modules to this directory, on their own file (https://nixos.wiki/wiki/Module).
# These should be stuff you would like to share with others, not your personal configurations. # These should be stuff you would like to share with others, not your personal configurations.
{ {
# List your module files here # List your module files here
# my-module = import ./my-module.nix; # my-module = import ./my-module.nix;

View file

@ -1,8 +1,11 @@
{ config, pkgs, inputs, ... }:
let
hostname = config.networking.hostName;
in
{ {
config,
pkgs,
inputs,
...
}: let
hostname = config.networking.hostName;
in {
imports = [ imports = [
inputs.agenix.nixosModules.default inputs.agenix.nixosModules.default
inputs.agenix-rekey.nixosModules.default inputs.agenix-rekey.nixosModules.default
@ -20,7 +23,7 @@ in
# Pubkey for rekeying # Pubkey for rekeying
hostPubkey = ../../${hostname}/ssh_host_ed25519_key.pub; hostPubkey = ../../${hostname}/ssh_host_ed25519_key.pub;
# Master identity used for decryption # Master identity used for decryption
masterIdentities = [ ../users/sajenim/agenix-rekey.pub ]; masterIdentities = [../users/sajenim/agenix-rekey.pub];
# Where we store the rekeyed secrets # Where we store the rekeyed secrets
storageMode = "local"; storageMode = "local";
localStorageDir = ./. + "/secrets/rekeyed/${config.networking.hostName}"; localStorageDir = ./. + "/secrets/rekeyed/${config.networking.hostName}";

View file

@ -1,6 +1,4 @@
{ outputs, ... }: {outputs, ...}: {
{
imports = [ imports = [
./age.nix ./age.nix
./env.nix ./env.nix

View file

@ -1,35 +1,33 @@
{ pkgs, ... }: {pkgs, ...}: {
{
environment = { environment = {
binsh = "${pkgs.bash}/bin/bash"; binsh = "${pkgs.bash}/bin/bash";
shells = with pkgs; [ zsh ]; shells = with pkgs; [zsh];
systemPackages = with pkgs; [ systemPackages = with pkgs; [
# Ensure home-manager is on all systems # Ensure home-manager is on all systems
home-manager home-manager
# Useful system utilities # Useful system utilities
tree # directory structure tree # directory structure
bc # basic calculator bc # basic calculator
vim # editor vim # editor
ranger # console file manager ranger # console file manager
htop # system monitor htop # system monitor
scrot # screenshot scrot # screenshot
direnv # load environment direnv # load environment
jq # JSON processor jq # JSON processor
git # version control git # version control
nmap # network mapper nmap # network mapper
xclip # clipboard xclip # clipboard
ripgrep # searches the current directory for a regex pattern ripgrep # searches the current directory for a regex pattern
# HTTP # HTTP
curl # transfer dato to/from server curl # transfer dato to/from server
wget # download files from web wget # download files from web
# Archive # Archive
unrar # extract roshal archive unrar # extract roshal archive
unzip # extract zip archive unzip # extract zip archive
]; ];
pathsToLink = [ "/share/zsh" ]; pathsToLink = ["/share/zsh"];
}; };
} }

View file

@ -1,6 +1,9 @@
{ config, inputs, lib, ... }:
{ {
config,
inputs,
lib,
...
}: {
nix = { nix = {
gc = { gc = {
# Automatically run the garbage collector an a specified time. # Automatically run the garbage collector an a specified time.
@ -11,7 +14,7 @@
# This will add each flake input as a registry # This will add each flake input as a registry
# To make nix commands consistent with your flake # To make nix commands consistent with your flake
registry = lib.mapAttrs (_: value: { flake = value; }) inputs; registry = lib.mapAttrs (_: value: {flake = value;}) inputs;
# This will additionally add your inputs to the system's legacy channels # This will additionally add your inputs to the system's legacy channels
# Making legacy nix commands consistent as well, awesome! # Making legacy nix commands consistent as well, awesome!

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
services.openssh = { services.openssh = {
enable = true; enable = true;
settings = { settings = {
@ -8,7 +6,7 @@
PasswordAuthentication = false; PasswordAuthentication = false;
LogLevel = "VERBOSE"; LogLevel = "VERBOSE";
}; };
ports = [ 22 ]; ports = [22];
openFirewall = true; openFirewall = true;
}; };

View file

@ -1,8 +1,10 @@
{ lib, config, ... }:
let
hostname = config.networking.hostName;
in
{ {
lib,
config,
...
}: let
hostname = config.networking.hostName;
in {
imports = [ imports = [
./persist.nix ./persist.nix
]; ];
@ -36,26 +38,26 @@ in
"/" = { "/" = {
device = "/dev/disk/by-label/${hostname}"; device = "/dev/disk/by-label/${hostname}";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=root" "compress=zstd" ]; options = ["subvol=root" "compress=zstd"];
}; };
"/nix" = { "/nix" = {
device = "/dev/disk/by-label/${hostname}"; device = "/dev/disk/by-label/${hostname}";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=nix" "compress=zstd" ]; options = ["subvol=nix" "compress=zstd"];
}; };
"/persist" = { "/persist" = {
device = "/dev/disk/by-label/${hostname}"; device = "/dev/disk/by-label/${hostname}";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=persist" "compress=zstd" ]; options = ["subvol=persist" "compress=zstd"];
neededForBoot = true; neededForBoot = true;
}; };
"/swap" = { "/swap" = {
device = "/dev/disk/by-label/${hostname}"; device = "/dev/disk/by-label/${hostname}";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=swap" "compress=zstd" ]; options = ["subvol=swap" "compress=zstd"];
}; };
}; };
} }

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Enables files to be encrypted to age identities stored on YubiKeys # Enables files to be encrypted to age identities stored on YubiKeys
age-plugin-yubikey age-plugin-yubikey
@ -17,7 +15,7 @@
pinentryPackage = pkgs.pinentry-curses; pinentryPackage = pkgs.pinentry-curses;
}; };
# Use our yubikey as a user login or for sudo access # Use our yubikey as a user login or for sudo access
security.pam.services = { security.pam.services = {
login.u2fAuth = true; login.u2fAuth = true;
sudo.u2fAuth = true; sudo.u2fAuth = true;

View file

@ -1,6 +1,4 @@
{ inputs, ... }: {inputs, ...}: {
{
imports = [ imports = [
inputs.impermanence.nixosModules.impermanence inputs.impermanence.nixosModules.impermanence
]; ];

View file

@ -1,22 +1,26 @@
{ inputs, outputs, pkgs, config, ... }:
{ {
inputs,
outputs,
pkgs,
config,
...
}: {
imports = [ imports = [
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
]; ];
users.users.sajenim = { users.users.sajenim = {
isNormalUser = true; isNormalUser = true;
extraGroups = [ "audio" "docker" "networkmanager" "wheel" "adbusers" ]; extraGroups = ["audio" "docker" "networkmanager" "wheel" "adbusers"];
shell = pkgs.zsh; shell = pkgs.zsh;
openssh.authorizedKeys.keyFiles = [ openssh.authorizedKeys.keyFiles = [
"${inputs.self}/home-manager/sajenim/sajenim_sk.pub" "${inputs.self}/home-manager/sajenim/sajenim_sk.pub"
]; ];
hashedPassword = "$y$j9T$qIhW5qL9J9w.w6JWa.bGo/$oddG3HJyOZ1mwHzYnYPJ/MzN38oHEBEvPDc0sB3rAf9"; hashedPassword = "$y$j9T$qIhW5qL9J9w.w6JWa.bGo/$oddG3HJyOZ1mwHzYnYPJ/MzN38oHEBEvPDc0sB3rAf9";
}; };
users.mutableUsers = false; users.mutableUsers = false;
home-manager = { home-manager = {
extraSpecialArgs = { inherit inputs outputs; }; extraSpecialArgs = {inherit inputs outputs;};
users = { users = {
sajenim = import "${inputs.self}/home-manager/sajenim/${config.networking.hostName}.nix"; sajenim = import "${inputs.self}/home-manager/sajenim/${config.networking.hostName}.nix";
}; };

View file

@ -1,12 +1,14 @@
{ pkgs, config, ... }:
{ {
pkgs,
config,
...
}: {
age.secrets.smb-secrets = { age.secrets.smb-secrets = {
rekeyFile = ./smb-secrets.age; rekeyFile = ./smb-secrets.age;
}; };
# For mount.cifs, required unless domain name resolution is not needed. # For mount.cifs, required unless domain name resolution is not needed.
environment.systemPackages = [ pkgs.cifs-utils ]; environment.systemPackages = [pkgs.cifs-utils];
fileSystems."/home/sajenim/.backup" = { fileSystems."/home/sajenim/.backup" = {
device = "//192.168.20.4/sajenim"; device = "//192.168.20.4/sajenim";
@ -14,12 +16,10 @@
options = let options = let
# this line prevents hanging on network split # this line prevents hanging on network split
automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s,user,users"; automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s,user,users";
in ["${automount_opts},credentials=/etc/nixos/smb-secrets,uid=1000,gid=100"];
in ["${automount_opts},credentials=/etc/nixos/smb-secrets,uid=1000,gid=100"];
}; };
environment.etc = { environment.etc = {
"nixos/smb-secrets".source = config.age.secrets.smb-secrets.path; "nixos/smb-secrets".source = config.age.secrets.smb-secrets.path;
}; };
} }

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
fileSystems."/home/sajenim/.local/share/Steam" = { fileSystems."/home/sajenim/.local/share/Steam" = {
device = "/dev/disk/by-label/data"; device = "/dev/disk/by-label/data";
fsType = "btrfs"; fsType = "btrfs";

View file

@ -1,13 +1,15 @@
{ inputs, pkgs, ... }:
{ {
inputs,
pkgs,
...
}: {
imports = [ imports = [
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
]; ];
users.users.spectre = { users.users.spectre = {
isNormalUser = true; isNormalUser = true;
shell = pkgs.zsh; shell = pkgs.zsh;
hashedPassword = "$y$j9T$eCJ0MDPsx3tww9LP0LU8..$sE8u5keO7QNKNAR1t2R6GqsDzvGD0Xn9Fi3to14Gf9/"; hashedPassword = "$y$j9T$eCJ0MDPsx3tww9LP0LU8..$sE8u5keO7QNKNAR1t2R6GqsDzvGD0Xn9Fi3to14Gf9/";
}; };
users.mutableUsers = false; users.mutableUsers = false;
} }

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
imports = [ imports = [
../common/global ../common/global
@ -15,18 +13,18 @@
./hardware-configuration.nix ./hardware-configuration.nix
]; ];
/* Boot configuration */ # Boot configuration
boot = { boot = {
kernelPackages = pkgs.linuxPackages_latest; kernelPackages = pkgs.linuxPackages_latest;
kernelParams = [ kernelParams = [
# Enable amdgpu driver sysfs API that allows fine grain control of GPU # Enable amdgpu driver sysfs API that allows fine grain control of GPU
"amdgpu.ppfeaturemask=0xffffffff" "amdgpu.ppfeaturemask=0xffffffff"
]; ];
kernelModules = [ "i2c-dev" "i2c-piix4" ]; kernelModules = ["i2c-dev" "i2c-piix4"];
initrd.kernelModules = [ "amdgpu" ]; initrd.kernelModules = ["amdgpu"];
}; };
/* Hardware configuration */ # Hardware configuration
hardware = { hardware = {
bluetooth = { bluetooth = {
enable = true; enable = true;
@ -49,7 +47,7 @@
}; };
}; };
/* Networking configuration */ # Networking configuration
networking = { networking = {
hostName = "fuchsia"; hostName = "fuchsia";
networkmanager.enable = true; networkmanager.enable = true;

View file

@ -1,14 +1,16 @@
{ config, lib, ... }:
{ {
config,
lib,
...
}: {
imports = [ imports = [
../common/optional/ephemeral-btrfs.nix ../common/optional/ephemeral-btrfs.nix
]; ];
boot = { boot = {
initrd = { initrd = {
availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
kernelModules = [ "kvm-amd" ]; kernelModules = ["kvm-amd"];
}; };
loader = { loader = {
systemd-boot.enable = true; systemd-boot.enable = true;
@ -25,8 +27,9 @@
}; };
swapDevices = [ swapDevices = [
{ device = "/swap/swapfile"; {
size = 16*1024; device = "/swap/swapfile";
size = 16 * 1024;
} }
]; ];

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
programs = { programs = {
zsh.enable = true; zsh.enable = true;
# Load and unload environment variables. # Load and unload environment variables.
@ -9,4 +7,3 @@
adb.enable = true; adb.enable = true;
}; };
} }

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
# Our custom power state # Our custom power state
environment.etc = { environment.etc = {
"default/amdgpu-custom-states.card0" = { "default/amdgpu-custom-states.card0" = {
@ -26,6 +24,5 @@
}; };
# Install our overclocking script. # Install our overclocking script.
environment.systemPackages = with pkgs; [ amdgpu-clocks ]; environment.systemPackages = with pkgs; [amdgpu-clocks];
} }

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
imports = [ imports = [
./amdgpu-clocks.nix ./amdgpu-clocks.nix
./flatpak.nix ./flatpak.nix

View file

@ -1,11 +1,9 @@
{ pkgs, ... }: {pkgs, ...}: {
{
# Required to install flatpak # Required to install flatpak
xdg.portal = { xdg.portal = {
enable = true; enable = true;
config.common.default = [ "gtk" ]; config.common.default = ["gtk"];
extraPortals = [ pkgs.xdg-desktop-portal-wlr ]; extraPortals = [pkgs.xdg-desktop-portal-wlr];
}; };
services.flatpak.enable = true; services.flatpak.enable = true;

View file

@ -1,9 +1,7 @@
{ ... }: {...}: {
{
services.libinput = { services.libinput = {
enable = true; enable = true;
mouse = { accelProfile = "flat"; }; mouse = {accelProfile = "flat";};
}; };
# DBus daemon to configure input devices. # DBus daemon to configure input devices.

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
# Get up and running with large language models locally. # Get up and running with large language models locally.
services.ollama = { services.ollama = {
enable = true; enable = true;

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
# Enable necessary udev rules. # Enable necessary udev rules.
services.udev.packages = with pkgs; [ services.udev.packages = with pkgs; [
openrgb openrgb

View file

@ -1,11 +1,9 @@
{ ... }: {...}: {
{
# Setup our display server # Setup our display server
services.xserver = { services.xserver = {
enable = true; enable = true;
xkb.layout = "au"; xkb.layout = "au";
videoDrivers = [ "amdgpu" ]; videoDrivers = ["amdgpu"];
displayManager.startx.enable = true; displayManager.startx.enable = true;
}; };
} }

View file

@ -1,6 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
imports = [ imports = [
../common/global ../common/global
../common/users/sajenim ../common/users/sajenim
@ -33,24 +31,24 @@
enable = true; enable = true;
allowPing = true; allowPing = true;
allowedTCPPorts = [ allowedTCPPorts = [
53 # adguardhome (DNS) 53 # adguardhome (DNS)
80 # traefik (HTTP) 80 # traefik (HTTP)
443 # traefik (HTTPS) 443 # traefik (HTTPS)
32372 # qbittorrent 32372 # qbittorrent
6600 # mpd 6600 # mpd
]; ];
allowedUDPPorts = [ allowedUDPPorts = [
53 # adguardhome (DNS) 53 # adguardhome (DNS)
80 # traefik (HTTP) 80 # traefik (HTTP)
443 # traefik (HTTPS) 443 # traefik (HTTPS)
32372 # qbittorrent 32372 # qbittorrent
51820 # Wireguard 51820 # Wireguard
6600 # mpd 6600 # mpd
]; ];
}; };
}; };
programs = { programs = {
zsh.enable = true; zsh.enable = true;
}; };
@ -65,4 +63,3 @@
# https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
system.stateVersion = "24.05"; system.stateVersion = "24.05";
} }

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
imports = [ imports = [
./jellyfin.nix ./jellyfin.nix
./jellyseerr.nix ./jellyseerr.nix

View file

@ -1,8 +1,6 @@
{ ... }: {...}: let
let
port = "8096"; port = "8096";
in in {
{
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
# Volunteer-built media solution that puts you in control of your media # Volunteer-built media solution that puts you in control of your media
jellyfin = { jellyfin = {
@ -35,7 +33,7 @@ in
services.traefik.dynamicConfigOptions.http.routers = { services.traefik.dynamicConfigOptions.http.routers = {
jellyfin = { jellyfin = {
rule = "Host(`jellyfin.kanto.dev`)"; rule = "Host(`jellyfin.kanto.dev`)";
entryPoints = [ entryPoints = [
"websecure" "websecure"
]; ];
@ -48,8 +46,7 @@ in
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
jellyfin.loadBalancer.servers = [ jellyfin.loadBalancer.servers = [
{ url = "http://127.0.0.1:${port}"; } {url = "http://127.0.0.1:${port}";}
]; ];
}; };
} }

View file

@ -1,8 +1,6 @@
{ ... }: {...}: let
let
port = "5055"; port = "5055";
in in {
{
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
# Request management # Request management
jellyseerr = { jellyseerr = {
@ -39,8 +37,7 @@ in
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
jellyseerr.loadBalancer.servers = [ jellyseerr.loadBalancer.servers = [
{ url = "http://127.0.0.1:${port}"; } {url = "http://127.0.0.1:${port}";}
]; ];
}; };
} }

View file

@ -1,8 +1,6 @@
{ ... }: {...}: let
let
port = "8686"; port = "8686";
in in {
{
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
# # Music collection manager for Usenet and BitTorrent users # # Music collection manager for Usenet and BitTorrent users
lidarr = { lidarr = {
@ -42,8 +40,7 @@ in
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
lidarr.loadBalancer.servers = [ lidarr.loadBalancer.servers = [
{ url = "http://127.0.0.1:${port}"; } {url = "http://127.0.0.1:${port}";}
]; ];
}; };
} }

View file

@ -1,8 +1,6 @@
{ ... }: {...}: let
let
port = "9925"; port = "9925";
in in {
{
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
mealie = { mealie = {
autoStart = true; autoStart = true;
@ -29,7 +27,7 @@ in
services.traefik.dynamicConfigOptions.http.routers = { services.traefik.dynamicConfigOptions.http.routers = {
mealie = { mealie = {
rule = "Host(`mealie.kanto.dev`)"; rule = "Host(`mealie.kanto.dev`)";
entryPoints = [ entryPoints = [
"websecure" "websecure"
]; ];
@ -43,9 +41,7 @@ in
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
mealie.loadBalancer.servers = [ mealie.loadBalancer.servers = [
{ url = "http://127.0.0.1:${port}"; } {url = "http://127.0.0.1:${port}";}
]; ];
}; };
} }

View file

@ -1,13 +1,11 @@
{ config, ... }: {config, ...}: let
let
port = "8181"; port = "8181";
in in {
{
age.secrets.microbin = { age.secrets.microbin = {
# Environment variables for microbin # Environment variables for microbin
rekeyFile = ./environment.age; rekeyFile = ./environment.age;
owner = "sajenim"; owner = "sajenim";
group = "users"; group = "users";
}; };
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
@ -43,8 +41,7 @@ in
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
microbin.loadBalancer.servers = [ microbin.loadBalancer.servers = [
{ url = "http://127.0.0.1:${port}"; } {url = "http://127.0.0.1:${port}";}
]; ];
}; };
} }

View file

@ -1,8 +1,6 @@
{ ... }: {...}: let
let
port = "9696"; port = "9696";
in in {
{
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
# Indexer manager/proxy built on the popular arr .net/reactjs base stack to integrate with your various PVR apps. # Indexer manager/proxy built on the popular arr .net/reactjs base stack to integrate with your various PVR apps.
prowlarr = { prowlarr = {
@ -36,11 +34,10 @@ in
service = "prowlarr"; service = "prowlarr";
}; };
}; };
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
prowlarr.loadBalancer.servers = [ prowlarr.loadBalancer.servers = [
{ url = "http://127.0.0.1:${port}"; } {url = "http://127.0.0.1:${port}";}
]; ];
}; };
} }

View file

@ -1,16 +1,14 @@
{ ... }: {...}: let
let
port = "8487"; port = "8487";
in in {
{
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
# # Open-source software alternative to µTorrent # # Open-source software alternative to µTorrent
qbittorrent = { qbittorrent = {
autoStart = true; autoStart = true;
image = "ghcr.io/hotio/qbittorrent:release-4.6.5"; image = "ghcr.io/hotio/qbittorrent:release-4.6.5";
ports = [ ports = [
"${port}:8080/tcp" # WebUI "${port}:8080/tcp" # WebUI
"32372:32372/tcp" # Transport protocol "32372:32372/tcp" # Transport protocol
]; ];
volumes = [ volumes = [
# Seedbox # Seedbox
@ -42,8 +40,7 @@ in
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
qbittorrent.loadBalancer.servers = [ qbittorrent.loadBalancer.servers = [
{ url = "http://127.0.0.1:${port}"; } {url = "http://127.0.0.1:${port}";}
]; ];
}; };
} }

View file

@ -1,8 +1,6 @@
{ ... }: {...}: let
let
port = "7878"; port = "7878";
in in {
{
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
# Movie collection manager for Usenet and BitTorrent users # Movie collection manager for Usenet and BitTorrent users
radarr = { radarr = {
@ -41,8 +39,7 @@ in
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
radarr.loadBalancer.servers = [ radarr.loadBalancer.servers = [
{ url = "http://127.0.0.1:${port}"; } {url = "http://127.0.0.1:${port}";}
]; ];
}; };
} }

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
# Automatically synchronize recommended settings from the TRaSH guides to your Sonarr/Radarr instances # Automatically synchronize recommended settings from the TRaSH guides to your Sonarr/Radarr instances
recyclarr = { recyclarr = {

View file

@ -1,8 +1,6 @@
{ ... }: {...}: let
let
port = "8989"; port = "8989";
in in {
{
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
# PVR for Usenet and BitTorrent users # PVR for Usenet and BitTorrent users
sonarr = { sonarr = {
@ -42,8 +40,7 @@ in
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
sonarr.loadBalancer.servers = [ sonarr.loadBalancer.servers = [
{ url = "http://127.0.0.1:${port}"; } {url = "http://127.0.0.1:${port}";}
]; ];
}; };
} }

View file

@ -1,16 +1,18 @@
{ config, lib, ... }:
let
hostname = config.networking.hostName;
in
{ {
config,
lib,
...
}: let
hostname = config.networking.hostName;
in {
imports = [ imports = [
../common/optional/ephemeral-btrfs.nix ../common/optional/ephemeral-btrfs.nix
]; ];
boot = { boot = {
initrd = { initrd = {
availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ]; availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
kernelModules = [ "kvm-intel" ]; kernelModules = ["kvm-intel"];
}; };
loader = { loader = {
systemd-boot.enable = true; systemd-boot.enable = true;
@ -21,12 +23,12 @@ in
}; };
}; };
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-label/ESP"; device = "/dev/disk/by-label/ESP";
fsType = "vfat"; fsType = "vfat";
}; };
fileSystems."/srv/multimedia" = { fileSystems."/srv/multimedia" = {
device = "/dev/disk/by-label/multimedia"; device = "/dev/disk/by-label/multimedia";
fsType = "ext4"; fsType = "ext4";
}; };
@ -34,30 +36,31 @@ in
fileSystems."/srv/containers" = { fileSystems."/srv/containers" = {
device = "/dev/disk/by-label/${hostname}"; device = "/dev/disk/by-label/${hostname}";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=containers" "compress=zstd" ]; options = ["subvol=containers" "compress=zstd"];
}; };
fileSystems."/srv/services" = { fileSystems."/srv/services" = {
device = "/dev/disk/by-label/${hostname}"; device = "/dev/disk/by-label/${hostname}";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=services" "compress=zstd" ]; options = ["subvol=services" "compress=zstd"];
}; };
fileSystems."/srv/shares" = { fileSystems."/srv/shares" = {
device = "/dev/disk/by-label/data"; device = "/dev/disk/by-label/data";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=shares" "compress=zstd" ]; options = ["subvol=shares" "compress=zstd"];
}; };
fileSystems."/srv/backup" = { fileSystems."/srv/backup" = {
device = "/dev/disk/by-label/data"; device = "/dev/disk/by-label/data";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=backup" "compress=zstd" ]; options = ["subvol=backup" "compress=zstd"];
}; };
swapDevices = [ swapDevices = [
{ device = "/swap/swapfile"; {
size = 16*1024; device = "/swap/swapfile";
size = 16 * 1024;
} }
]; ];

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
services.borgbackup.jobs = { services.borgbackup.jobs = {
containers = { containers = {
paths = [ paths = [
@ -33,4 +31,3 @@
}; };
}; };
} }

View file

@ -1,8 +1,11 @@
{ config, inputs, pkgs, ... }:
let
port = "8080";
in
{ {
config,
inputs,
pkgs,
...
}: let
port = "8080";
in {
imports = [ imports = [
inputs.crowdsec.nixosModules.crowdsec inputs.crowdsec.nixosModules.crowdsec
inputs.crowdsec.nixosModules.crowdsec-firewall-bouncer inputs.crowdsec.nixosModules.crowdsec-firewall-bouncer
@ -86,9 +89,12 @@ in
environment.persistence."/persist" = { environment.persistence."/persist" = {
directories = [ directories = [
{ directory = "/var/lib/crowdsec"; user = "crowdsec"; group = "crowdsec"; } {
directory = "/var/lib/crowdsec";
user = "crowdsec";
group = "crowdsec";
}
]; ];
hideMounts = true; hideMounts = true;
}; };
} }

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
imports = [ imports = [
./traefik ./traefik
./crowdsec ./crowdsec

View file

@ -1,6 +1,4 @@
{ config, ... }: {config, ...}: {
{
services.forgejo = { services.forgejo = {
enable = true; enable = true;
stateDir = "/srv/services/forgejo"; stateDir = "/srv/services/forgejo";
@ -34,8 +32,7 @@
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
forgejo.loadBalancer.servers = [ forgejo.loadBalancer.servers = [
{ url = "http://127.0.0.1:${toString config.services.forgejo.settings.server.HTTP_PORT}"; } {url = "http://127.0.0.1:${toString config.services.forgejo.settings.server.HTTP_PORT}";}
]; ];
}; };
} }

View file

@ -1,6 +1,4 @@
{ config, ... }: {config, ...}: {
{
# Setup grafana our grafana instance. # Setup grafana our grafana instance.
services.grafana = { services.grafana = {
enable = true; enable = true;
@ -24,13 +22,15 @@
# Setup our database for grafana. # Setup our database for grafana.
services.mysql = { services.mysql = {
ensureUsers = [{ ensureUsers = [
name = "grafana"; {
ensurePermissions = { name = "grafana";
"grafana.*" = "ALL PRIVILEGES"; ensurePermissions = {
}; "grafana.*" = "ALL PRIVILEGES";
}]; };
ensureDatabases = [ "grafana" ]; }
];
ensureDatabases = ["grafana"];
}; };
# Setup our traefik router. # Setup our traefik router.
@ -50,7 +50,7 @@
# Setup our traefik service. # Setup our traefik service.
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
grafana.loadBalancer.servers = [ grafana.loadBalancer.servers = [
{ url = "http://127.0.0.1:${toString config.services.grafana.settings.server.http_port}"; } {url = "http://127.0.0.1:${toString config.services.grafana.settings.server.http_port}";}
]; ];
}; };
} }

View file

@ -1,6 +1,4 @@
{ config, ... }: {config, ...}: {
{
services.lighttpd = { services.lighttpd = {
enable = true; enable = true;
port = 5624; port = 5624;
@ -23,8 +21,7 @@
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
lighttpd.loadBalancer.servers = [ lighttpd.loadBalancer.servers = [
{ url = "http://127.0.0.1:${toString config.services.lighttpd.port}"; } {url = "http://127.0.0.1:${toString config.services.lighttpd.port}";}
]; ];
}; };
} }

View file

@ -1,5 +1,10 @@
{ inputs, pkgs, lib, config, ... }: {
let inputs,
pkgs,
lib,
config,
...
}: let
modpack = pkgs.fetchPackwizModpack rec { modpack = pkgs.fetchPackwizModpack rec {
version = "7091175a49"; version = "7091175a49";
url = "https://git.sajenim.dev/jasmine/minecraft-modpack/raw/commit/${version}/pack.toml"; url = "https://git.sajenim.dev/jasmine/minecraft-modpack/raw/commit/${version}/pack.toml";
@ -7,9 +12,8 @@ let
}; };
mcVersion = modpack.manifest.versions.minecraft; mcVersion = modpack.manifest.versions.minecraft;
fabricVersion = modpack.manifest.versions.fabric; fabricVersion = modpack.manifest.versions.fabric;
serverVersion = lib.replaceStrings [ "." ] [ "_" ] "fabric-${mcVersion}"; serverVersion = lib.replaceStrings ["."] ["_"] "fabric-${mcVersion}";
in in {
{
imports = [ imports = [
inputs.nix-minecraft.nixosModules.minecraft-servers inputs.nix-minecraft.nixosModules.minecraft-servers
]; ];
@ -27,7 +31,7 @@ in
kanto = { kanto = {
enable = true; enable = true;
# The minecraft server package to use. # The minecraft server package to use.
package = pkgs.fabricServers.${serverVersion}.override { loaderVersion = fabricVersion; }; # Specific fabric loader version. package = pkgs.fabricServers.${serverVersion}.override {loaderVersion = fabricVersion;}; # Specific fabric loader version.
# Allowed players # Allowed players
whitelist = { whitelist = {
@ -46,10 +50,10 @@ in
server-port = 25565; server-port = 25565;
white-list = true; white-list = true;
}; };
# Things to symlink into this server's data directory. # Things to symlink into this server's data directory.
symlinks = { symlinks = {
"mods" = "${modpack}/mods"; "mods" = "${modpack}/mods";
}; };
# Things to copy into this server's data directory. # Things to copy into this server's data directory.
@ -90,8 +94,7 @@ in
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
minecraft.loadBalancer.servers = [ minecraft.loadBalancer.servers = [
{ url = "http://127.0.0.1:${toString config.services.minecraft-servers.servers.kanto.serverProperties.server-port}"; } {url = "http://127.0.0.1:${toString config.services.minecraft-servers.servers.kanto.serverProperties.server-port}";}
]; ];
}; };
} }

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
services.mpd = { services.mpd = {
enable = true; enable = true;
musicDirectory = "/srv/multimedia/library/music"; musicDirectory = "/srv/multimedia/library/music";
@ -28,7 +26,7 @@
}; };
networking.firewall = { networking.firewall = {
# # for NFSv3; view with `rpcinfo -p` # # for NFSv3; view with `rpcinfo -p`
allowedTCPPorts = [ 111 2049 4000 4001 4002 20048 ]; allowedTCPPorts = [111 2049 4000 4001 4002 20048];
allowedUDPPorts = [ 111 2049 4000 4001 4002 20048 ]; allowedUDPPorts = [111 2049 4000 4001 4002 20048];
}; };
} }

View file

@ -1,10 +1,7 @@
{ pkgs, ... }: {pkgs, ...}: {
{
services.mysql = { services.mysql = {
enable = true; enable = true;
package = pkgs.mariadb; package = pkgs.mariadb;
dataDir = "/srv/services/mysql"; dataDir = "/srv/services/mysql";
}; };
} }

View file

@ -1,9 +1,7 @@
{ config, ... }: {config, ...}: {
{
services.prometheus = { services.prometheus = {
enable = true; enable = true;
port = 9001; # Port to listen on. port = 9001; # Port to listen on.
# Valid in all configuration contexts, defaults for other configuration sections. # Valid in all configuration contexts, defaults for other configuration sections.
globalConfig = { globalConfig = {
@ -14,7 +12,7 @@
exporters = { exporters = {
node = { node = {
enable = true; enable = true;
enabledCollectors = [ "systemd" "processes" ]; enabledCollectors = ["systemd" "processes"];
port = 9100; port = 9100;
}; };
}; };
@ -23,11 +21,12 @@
scrapeConfigs = [ scrapeConfigs = [
{ {
job_name = "node"; job_name = "node";
static_configs = [{ static_configs = [
targets = [ "127.0.0.1:${toString config.services.prometheus.exporters.node.port}" ]; {
}]; targets = ["127.0.0.1:${toString config.services.prometheus.exporters.node.port}"];
}
];
} }
]; ];
}; };
} }

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
services.samba = { services.samba = {
enable = true; enable = true;
securityType = "user"; securityType = "user";
@ -9,7 +7,7 @@
workgroup = WORKGROUP workgroup = WORKGROUP
server string = smbnix server string = smbnix
netbios name = smbnix netbios name = smbnix
security = user security = user
#use sendfile = yes #use sendfile = yes
#max protocol = smb2 #max protocol = smb2
# note: localhost is the ipv6 localhost ::1 # note: localhost is the ipv6 localhost ::1
@ -47,5 +45,5 @@
openFirewall = true; openFirewall = true;
}; };
environment.persistence."/persist".directories = [ "/var/lib/samba" ]; environment.persistence."/persist".directories = ["/var/lib/samba"];
} }

View file

@ -1,7 +1,10 @@
{ inputs, config, pkgs, ... }:
{ {
disabledModules = [ "services/web-servers/traefik.nix" ]; inputs,
config,
pkgs,
...
}: {
disabledModules = ["services/web-servers/traefik.nix"];
imports = [ imports = [
"${inputs.nixpkgs-unstable}/nixos/modules/services/web-servers/traefik.nix" "${inputs.nixpkgs-unstable}/nixos/modules/services/web-servers/traefik.nix"
@ -86,12 +89,14 @@
# List of domains in our network # List of domains in our network
domains = [ domains = [
# Internal services # Internal services
{ main = "kanto.dev"; {
sans = [ "*.kanto.dev" ]; main = "kanto.dev";
sans = ["*.kanto.dev"];
} }
# Public services # Public services
{ main = "sajenim.dev"; {
sans = [ "*.sajenim.dev" ]; main = "sajenim.dev";
sans = ["*.sajenim.dev"];
} }
]; ];
}; };
@ -106,7 +111,7 @@
metrics = { metrics = {
prometheus = { prometheus = {
entryPoint = "metrics"; entryPoint = "metrics";
buckets = [ "0.1" "0.3" "1.2" "5.0" ]; buckets = ["0.1" "0.3" "1.2" "5.0"];
addEntryPointsLabels = true; addEntryPointsLabels = true;
addRoutersLabels = true; addRoutersLabels = true;
addServicesLabels = true; addServicesLabels = true;
@ -144,20 +149,33 @@
services.prometheus.scrapeConfigs = [ services.prometheus.scrapeConfigs = [
{ {
job_name = "traefik"; job_name = "traefik";
static_configs = [{ static_configs = [
targets = [ "127.0.0.1:8082" ]; {
}]; targets = ["127.0.0.1:8082"];
}
];
} }
]; ];
# Persist our traefik data & logs # Persist our traefik data & logs
environment.persistence."/persist" = { environment.persistence."/persist" = {
directories = [ directories = [
{ directory = "/var/lib/traefik"; user = "traefik"; group = "traefik"; } {
{ directory = "/var/log/traefik"; user = "traefik"; group = "traefik"; } directory = "/var/lib/traefik";
{ directory = "/plugins-storage"; user = "traefik"; group = "traefik"; } user = "traefik";
group = "traefik";
}
{
directory = "/var/log/traefik";
user = "traefik";
group = "traefik";
}
{
directory = "/plugins-storage";
user = "traefik";
group = "traefik";
}
]; ];
hideMounts = true; hideMounts = true;
}; };
} }

View file

@ -1,6 +1,4 @@
{ config, ... }: {config, ...}: {
{
# Crowdsec Local API key for the bouncer. # Crowdsec Local API key for the bouncer.
age.secrets.traefik-bouncer-key = { age.secrets.traefik-bouncer-key = {
rekeyFile = ../crowdsec/traefik-bouncer-key.age; rekeyFile = ../crowdsec/traefik-bouncer-key.age;
@ -12,7 +10,7 @@
services.traefik.dynamicConfigOptions.http.middlewares = { services.traefik.dynamicConfigOptions.http.middlewares = {
# Restrict access to internal networks # Restrict access to internal networks
internal.ipwhitelist.sourcerange = [ internal.ipwhitelist.sourcerange = [
"127.0.0.1/32" # localhost "127.0.0.1/32" # localhost
"192.168.20.1/24" # lan "192.168.20.1/24" # lan
]; ];
@ -49,7 +47,7 @@
crowdsec.plugin.bouncer = { crowdsec.plugin.bouncer = {
enabled = "true"; enabled = "true";
crowdsecMode = "appsec"; crowdsecMode = "appsec";
crowdsecLapiKeyFile = config.age.secrets.traefik-bouncer-key.path; crowdsecLapiKeyFile = config.age.secrets.traefik-bouncer-key.path;
crowdsecLapiScheme = "http"; crowdsecLapiScheme = "http";
crowdsecLapiHost = "127.0.0.1:8080"; crowdsecLapiHost = "127.0.0.1:8080";
crowdsecAppsecEnabled = "true"; crowdsecAppsecEnabled = "true";
@ -57,4 +55,3 @@
}; };
}; };
} }

View file

@ -1,6 +1,4 @@
{ ... }: {...}: {
{
services.traefik.dynamicConfigOptions.http.routers = { services.traefik.dynamicConfigOptions.http.routers = {
traefik-dashboard = { traefik-dashboard = {
rule = "Host(`traefik.kanto.dev`)"; rule = "Host(`traefik.kanto.dev`)";
@ -25,4 +23,3 @@
}; };
}; };
} }

View file

@ -1,10 +1,7 @@
{ ... }: {...}: {
{
services.traefik.dynamicConfigOptions.http.services = { services.traefik.dynamicConfigOptions.http.services = {
ender1.loadBalancer.servers = [ ender1.loadBalancer.servers = [
{ url = "http://192.168.1.103:80"; } {url = "http://192.168.1.103:80";}
]; ];
}; };
} }

View file

@ -1,7 +1,5 @@
# This file defines overlays # This file defines overlays
{ inputs, ... }: {inputs, ...}: {
{
# This one brings our custom packages from the 'pkgs' directory # This one brings our custom packages from the 'pkgs' directory
additions = final: _prev: import ../pkgs final.pkgs; additions = final: _prev: import ../pkgs final.pkgs;

View file

@ -1,27 +1,27 @@
{ stdenv {
, lib stdenv,
, fetchFromGitHub lib,
, bash fetchFromGitHub,
, subversion bash,
, makeWrapper subversion,
makeWrapper,
}: }:
stdenv.mkDerivation { stdenv.mkDerivation {
pname = "amdgpu-clocks"; pname = "amdgpu-clocks";
version = "973139a"; version = "973139a";
src = fetchFromGitHub { src = fetchFromGitHub {
# https://github.com/sibradzic/amdgpu-clocks # https://github.com/sibradzic/amdgpu-clocks
owner = "sibradzic"; owner = "sibradzic";
repo = "amdgpu-clocks"; repo = "amdgpu-clocks";
rev = "973139a5933bd315aa99332b642305ef5ef49a32"; rev = "973139a5933bd315aa99332b642305ef5ef49a32";
sha256 = "sha256-mZV4ECNG9X6SDIWl6P0nHrxa4kGU1h/hFdMcswbEYrk="; sha256 = "sha256-mZV4ECNG9X6SDIWl6P0nHrxa4kGU1h/hFdMcswbEYrk=";
}; };
buildInputs = [ bash subversion ]; buildInputs = [bash subversion];
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [makeWrapper];
installPhase = '' installPhase = ''
mkdir -p $out/bin mkdir -p $out/bin
cp amdgpu-clocks $out/bin/amdgpu-clocks cp amdgpu-clocks $out/bin/amdgpu-clocks
wrapProgram $out/bin/amdgpu-clocks \ wrapProgram $out/bin/amdgpu-clocks \
--prefix PATH : ${lib.makeBinPath [ bash subversion ]} --prefix PATH : ${lib.makeBinPath [bash subversion]}
''; '';
} }

View file

@ -1,8 +1,7 @@
# Custom packages, that can be defined similarly to ones from nixpkgs # Custom packages, that can be defined similarly to ones from nixpkgs
# You can build them using 'nix build .#example' # You can build them using 'nix build .#example'
pkgs: { pkgs: {
xmobar = pkgs.callPackage ./xmobar-config { }; xmobar = pkgs.callPackage ./xmobar-config {};
xmonad = pkgs.callPackage ./xmonad-config { }; xmonad = pkgs.callPackage ./xmonad-config {};
amdgpu-clocks = pkgs.callPackage ./amdgpu-clocks { }; amdgpu-clocks = pkgs.callPackage ./amdgpu-clocks {};
} }

View file

@ -1,5 +1,4 @@
{ pkgs }: {pkgs}:
pkgs.haskellPackages.developPackage { pkgs.haskellPackages.developPackage {
root = ./.; root = ./.;
} }

View file

@ -1,4 +1,4 @@
{ pkgs ? import <nixpkgs> {} }: {pkgs ? import <nixpkgs> {}}:
pkgs.mkShell { pkgs.mkShell {
nativeBuildInputs = with pkgs.buildPackages; [ cabal-install ghc ]; nativeBuildInputs = with pkgs.buildPackages; [cabal-install ghc];
} }

View file

@ -1,12 +1,10 @@
{ pkgs }: {pkgs}:
pkgs.haskellPackages.developPackage { pkgs.haskellPackages.developPackage {
root = ./.; root = ./.;
source-overrides = { source-overrides = {
xmonad = (builtins.fetchTarball { xmonad = builtins.fetchTarball {
url = "https://github.com/xmonad/xmonad/archive/refs/tags/v0.18.0.tar.gz"; url = "https://github.com/xmonad/xmonad/archive/refs/tags/v0.18.0.tar.gz";
sha256 = "0jlc60n5jarcxgjxm1vcsgc3s2lwmn3c3n56hialhzx54wfskkbc"; sha256 = "0jlc60n5jarcxgjxm1vcsgc3s2lwmn3c3n56hialhzx54wfskkbc";
}); };
}; };
} }

View file

@ -1,4 +1,4 @@
{ pkgs ? import <nixpkgs> {} }: {pkgs ? import <nixpkgs> {}}:
pkgs.mkShell { pkgs.mkShell {
nativeBuildInputs = with pkgs.buildPackages; [ cabal-install ghc ]; nativeBuildInputs = with pkgs.buildPackages; [cabal-install ghc];
} }