This commit is contained in:
Faris 2026-05-23 00:31:58 +01:00
parent a8f6bf2ce2
commit 07ae12fc30
18 changed files with 1211 additions and 712 deletions

View File

@ -56,28 +56,32 @@
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
zsh bitwarden-cli
htop btop
fastfetch
restic
nixfmt
rsync
pciutils # lspci
usbutils # lsusb
nmap
tree
p7zip
unar
inetutils # telnet
wget
dnsutils dnsutils
fastfetch
htop
iftop iftop
inetutils # telnet
lazygit
nixfmt
nmap
p7zip
pciutils # lspci
restic
rsync
tree
unar
usbutils # lsusb
wget
zsh
# media # media
yt-dlp yt-dlp
exiftool exiftool
mediainfo mediainfo
ffmpeg-full ffmpeg-full
kiwix-tools
# barcodes # barcodes
qrencode qrencode
@ -90,7 +94,6 @@
man-pages-posix man-pages-posix
]; ];
fonts.packages = with pkgs; [ fonts.packages = with pkgs; [
noto-fonts noto-fonts
noto-fonts-cjk-sans noto-fonts-cjk-sans
@ -100,7 +103,8 @@
font-awesome_5 font-awesome_5
]; ];
# Power management
services.power-profiles-daemon.enable = true;
environment.shellAliases = { environment.shellAliases = {
"server" = "ssh admin@192.168.0.30"; "server" = "ssh admin@192.168.0.30";
@ -112,5 +116,8 @@
"lsa" = "ls -al"; "lsa" = "ls -al";
}; };
environment.pathsToLink = [ "/share/applications" "/share/xdg-desktop-portal" ]; environment.pathsToLink = [
"/share/applications"
"/share/xdg-desktop-portal"
];
} }

View File

@ -25,7 +25,11 @@
openFirewall = true; openFirewall = true;
}; };
services.tailscale.enable = true; services.tailscale.enable = true;
services.printing.drivers = [ pkgs.brlaser pkgs.brgenml1lpr pkgs.brgenml1cupswrapper ]; services.printing.drivers = [
pkgs.brlaser
pkgs.brgenml1lpr
pkgs.brgenml1cupswrapper
];
# Enable automatic login for the user. # Enable automatic login for the user.
# services.displayManager.autoLogin.enable = true; # services.displayManager.autoLogin.enable = true;
@ -52,7 +56,6 @@
}; };
programs.chromium = { programs.chromium = {
enable = true; enable = true;
homepageLocation = "https://dashboard.mektem.com"; homepageLocation = "https://dashboard.mektem.com";
@ -62,9 +65,6 @@
}; };
}; };
hardware.keyboard.qmk.enable = true; hardware.keyboard.qmk.enable = true;
boot = { boot = {
@ -83,8 +83,6 @@
]; ];
}; };
#services.udev.packages = [ pkgs.via ]; #services.udev.packages = [ pkgs.via ];
nixpkgs.overlays = [ nixpkgs.overlays = [
@ -100,74 +98,66 @@
services.mullvad-vpn.enable = true; services.mullvad-vpn.enable = true;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
audacity
brave brave
blender
orca-slicer
firefox firefox
gimp #blender
inkscape #audacity
bitwarden-desktop #orca-slicer
bitwarden-cli #gimp
kiwix #inkscape
libreoffice #unstable.protonmail-desktop
obs-studio #bitwarden-desktop
obsidian #libreoffice
#freecad
#kiwix
#obs-studio
#obsidian
unstable.proton-authenticator unstable.proton-authenticator
unstable.protonmail-desktop #prismlauncher
unstable.proton-vpn #unstable.signal-desktop
prismlauncher
unstable.signal-desktop
freecad
tor-browser tor-browser
wireshark #wireshark
monero-gui #monero-gui
moonlight-qt #moonlight-qt
nvtopPackages.nvidia nvtopPackages.nvidia
dconf-editor dconf-editor
via #kdePackages.kdenlive
kdePackages.kdenlive #element-desktop
easyeffects #chirp
element-desktop
chirp
scrcpy scrcpy
veracrypt veracrypt
lmms #lmms
restic-browser restic-browser
# games # games
webcord #cataclysm-dda
heroic #endless-sky
lutris #mindustry
cataclysm-dda #openrct2
runelite #openttd
zeroad #osu-lazer-bin
unciv #runelite
endless-sky #unciv
wesnoth #webcord
mindustry #wesnoth
openrct2 #xonotic
openttd #zeroad #0ad
xonotic
osu-lazer-bin
ufoai
ludusavi # steam backup
# game utils # game utils
mangohud mangohud
umu-launcher umu-launcher
# emu # emu
ryubing #ryubing
xemu #xemu
xenia-canary xenia-canary
#retroarch-full #retroarch-full
rpcs3 #rpcs3
dolphin-emu #dolphin-emu
cemu #cemu
# backup # backup
keepassxc #keepassxc
]; ];
fonts.fontconfig = { fonts.fontconfig = {
@ -187,9 +177,14 @@
}; };
}; };
services.hardware.openrgb.enable = true;
services.hardware.openrgb.package = pkgs.openrgb-with-all-plugins;
programs = { programs = {
adb.enable = true; adb.enable = true;
localsend = { localsend = {
enable = true; enable = true;
openFirewall = true; openFirewall = true;
@ -218,38 +213,100 @@
fileSystems."/mnt/media" = { fileSystems."/mnt/media" = {
device = "//192.168.0.30/media"; device = "//192.168.0.30/media";
fsType = "cifs"; fsType = "cifs";
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"; automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s";
in ["${automount_opts},credentials=/etc/nixos/smb-credentials,uid=1000,gid=1000"]; in
[ "${automount_opts},credentials=/etc/nixos/smb-credentials,uid=1000,gid=1000" ];
}; };
fileSystems."/mnt/services" = { fileSystems."/mnt/services" = {
device = "//192.168.0.30/services"; device = "//192.168.0.30/services";
fsType = "cifs"; fsType = "cifs";
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"; automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s";
in ["${automount_opts},credentials=/etc/nixos/smb-credentials,uid=1000,gid=1000"]; in
[ "${automount_opts},credentials=/etc/nixos/smb-credentials,uid=1000,gid=1000" ];
}; };
fileSystems."/mnt/data" = { fileSystems."/mnt/data" = {
device = "//192.168.0.30/data"; device = "//192.168.0.30/data";
fsType = "cifs"; fsType = "cifs";
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"; automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s";
in ["${automount_opts},credentials=/etc/nixos/smb-credentials,uid=1000,gid=1000"]; in
[ "${automount_opts},credentials=/etc/nixos/smb-credentials,uid=1000,gid=1000" ];
}; };
programs.virt-manager.enable = true; programs.virt-manager.enable = true;
users.groups.libvirtd.members = ["admin"]; users.groups.libvirtd.members = [ "admin" ];
virtualisation.libvirtd = { virtualisation.libvirtd = {
enable = true; enable = true;
qemu.swtpm.enable = true; qemu.swtpm.enable = true;
}; };
virtualisation.spiceUSBRedirection.enable = true; virtualisation.spiceUSBRedirection.enable = true;
#services.flatpak.enable = true; imports = [ inputs.nix-flatpak.nixosModules.nix-flatpak ];
services.flatpak = {
enable = true;
update.auto = {
enable = true;
onCalendar = "weekly"; # Default value
};
packages = [
"com.bitwarden.desktop"
"com.orcaslicer.OrcaSlicer"
"me.proton.Mail"
"org.audacityteam.Audacity"
"org.blender.Blender"
"org.freecad.FreeCAD"
"org.gimp.GIMP"
"org.inkscape.Inkscape"
"org.kiwix.desktop"
"org.libreoffice.LibreOffice"
"md.obsidian.Obsidian"
"com.obsproject.Studio"
"org.prismlauncher.PrismLauncher"
"org.signal.Signal"
"org.wireshark.Wireshark"
"org.getmonero.Monero"
"com.moonlight_stream.Moonlight"
"org.kde.kdenlive"
"im.riot.Riot"
"com.chirpmyradio.chirp"
"io.lmms.LMMS"
# games
"com.github.Anuken.Mindustry"
"com.play0ad.zeroad"
"io.github.endless_sky.endless_sky"
"io.github.spacingbat3.webcord"
"io.github.yairm210.unciv"
"io.openrct2.OpenRCT2"
"net.runelite.RuneLite"
"org.cataclysmdda.CataclysmDDA"
"org.openttd.OpenTTD"
"org.wesnoth.Wesnoth"
"org.xonotic.Xonotic"
"sh.ppy.osu"
# emu
"io.github.ryubing.Ryujinx"
"app.xemu.xemu"
"net.rpcs3.RPCS3"
"org.DolphinEmu.dolphin-emu"
"info.cemu.Cemu"
# backup
"org.keepassxc.KeePassXC"
];
};
} }

View File

@ -13,7 +13,7 @@
environment.gnome.excludePackages = with pkgs; [ environment.gnome.excludePackages = with pkgs; [
epiphany # web browser epiphany # web browser
geary # email geary # email
decibels #audio player decibels # audio player
gnome-calendar gnome-calendar
gnome-music gnome-music
gnome-software gnome-software
@ -25,7 +25,8 @@
programs.dconf = { programs.dconf = {
enable = true; enable = true;
profiles.user.databases = [{ profiles.user.databases = [
{
lockAll = true; # prevents overriding lockAll = true; # prevents overriding
settings = { settings = {
"org/gnome/shell" = { "org/gnome/shell" = {
@ -81,10 +82,11 @@
apply-custom-theme = true; apply-custom-theme = true;
}; };
"org/gnome/shell/keybindings" = { "org/gnome/shell/keybindings" = {
show-screenshot-ui = ["<Shift><Super>s"]; show-screenshot-ui = [ "<Shift><Super>s" ];
}; };
#org.gnome.desktop.input-sources sources [('xkb', 'us'), ('xkb', 'dz+ar')] #org.gnome.desktop.input-sources sources [('xkb', 'us'), ('xkb', 'dz+ar')]
}; };
}]; }
];
}; };
} }

View File

@ -1,9 +1,9 @@
{ pkgs, ...}: { pkgs, ... }:
{ {
programs.hyprland.enable = true; programs.hyprland.enable = true;
security.pam.services.hyprlock = {}; security.pam.services.hyprlock = { };
#wifi #wifi
networking.wireless.iwd.enable = true; networking.wireless.iwd.enable = true;
@ -20,16 +20,17 @@
slurp # screenshot selection slurp # screenshot selection
wl-clipboard # copy to clipboard wl-clipboard # copy to clipboard
libnotify # enables "notify-send" libnotify # enables "notify-send"
nautilus
bluetui # bluetooth bluetui # bluetooth
wiremix # mixer wiremix # mixer
btop tesseract # ocr
tesseract #ocr hyprpicker
satty # image annotation
# gnome stuff
gnome-calculator gnome-calculator
nautilus
gnome-font-viewer gnome-font-viewer
gnome-calendar
]; ];
services.udisks2.enable = true; # udiskie automount USB services.udisks2.enable = true; # udiskie automount USB

View File

@ -1,4 +1,4 @@
{ pkgs, ...}: { pkgs, ... }:
{ {
# Enable sound with pipewire. # Enable sound with pipewire.
@ -19,7 +19,7 @@
"adbusers" # adb "adbusers" # adb
"kvm" # virt "kvm" # virt
"networkmanager" "networkmanager"
"lp" #printing "lp" # printing
]; ];
}; };

16
flake.lock generated
View File

@ -100,6 +100,21 @@
"type": "github" "type": "github"
} }
}, },
"nix-flatpak": {
"locked": {
"lastModified": 1777402031,
"narHash": "sha256-6gkfl9y3+ti0Z6dgby8/R4/DRT8sWU0I0TLCIxwWtjk=",
"owner": "gmodena",
"repo": "nix-flatpak",
"rev": "22a3adbe7c5c8c8a10a635d32c9ef7fc01a6e4b8",
"type": "github"
},
"original": {
"owner": "gmodena",
"repo": "nix-flatpak",
"type": "github"
}
},
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1776983936, "lastModified": 1776983936,
@ -170,6 +185,7 @@
"home-manager-unstable": "home-manager-unstable", "home-manager-unstable": "home-manager-unstable",
"lazyvim": "lazyvim", "lazyvim": "lazyvim",
"nix-darwin": "nix-darwin", "nix-darwin": "nix-darwin",
"nix-flatpak": "nix-flatpak",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_2",
"nixpkgs-unstable": "nixpkgs-unstable" "nixpkgs-unstable": "nixpkgs-unstable"

View File

@ -12,14 +12,25 @@
nix-darwin.url = "github:nix-darwin/nix-darwin/nix-darwin-25.11"; nix-darwin.url = "github:nix-darwin/nix-darwin/nix-darwin-25.11";
nix-darwin.inputs.nixpkgs.follows = "nixpkgs"; nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
lazyvim.url = "github:pfassina/lazyvim-nix"; lazyvim.url = "github:pfassina/lazyvim-nix";
nix-flatpak.url = "github:gmodena/nix-flatpak";
}; };
outputs = outputs =
{ self, nixpkgs, home-manager, home-manager-unstable, nix-darwin, lazyvim, ... }@inputs: {
self,
nixpkgs,
home-manager,
home-manager-unstable,
nix-darwin,
lazyvim,
nix-flatpak,
...
}@inputs:
{ {
nixosConfigurations.desktop = nixpkgs.lib.nixosSystem { nixosConfigurations.desktop = nixpkgs.lib.nixosSystem {
specialArgs = { specialArgs = {
inherit self inputs; inherit self inputs;
inherit nix-flatpak;
hostname = "nixos-desktop"; hostname = "nixos-desktop";
}; };
#inherit system; #inherit system;
@ -51,7 +62,7 @@
}; };
nixosConfigurations.nixos-server = nixpkgs.lib.nixosSystem { nixosConfigurations.nixos-server = nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs;}; specialArgs = { inherit inputs; };
modules = [ modules = [
./config/common.nix ./config/common.nix
./config/linux.nix ./config/linux.nix

View File

@ -1,4 +1,9 @@
{ config, pkgs, lazyvim, ...}: {
config,
pkgs,
lazyvim,
...
}:
{ {
home.sessionVariables = { home.sessionVariables = {
@ -7,7 +12,6 @@
BROWSER = "brave"; BROWSER = "brave";
}; };
imports = [ lazyvim.homeManagerModules.default ]; imports = [ lazyvim.homeManagerModules.default ];
programs = { programs = {
@ -31,10 +35,16 @@
''; '';
}; };
lazyvim = {
enable = true;
lazyvim.enable = true; plugins = {
colorscheme = ''
return {
"kepano/flexoki-neovim"
}
'';
};
};
# neovim = { # neovim = {
# enable = true; # enable = true;
# viAlias = true; # viAlias = true;
@ -111,6 +121,33 @@
enable = true; enable = true;
dotDir = "${config.xdg.configHome}/zsh"; dotDir = "${config.xdg.configHome}/zsh";
syntaxHighlighting.enable = true; syntaxHighlighting.enable = true;
initContent = ''
bindkey -v
export KEYTIMEOUT=1
# Use vim keys in tab complete menu:
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history
bindkey -v '^?' backward-delete-char
# Change cursor shape for different vi modes.
function zle-keymap-select () {
case $KEYMAP in
vicmd) echo -ne '\e[1 q';; # block
viins|main) echo -ne '\e[5 q';; # beam
esac
}
zle -N zle-keymap-select
zle-line-init() {
zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
echo -ne "\e[5 q"
}
zle -N zle-line-init
echo -ne '\e[5 q' # Use beam shape cursor on startup.
preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.
'';
oh-my-zsh = { oh-my-zsh = {
enable = true; enable = true;
plugins = [ "git" ]; plugins = [ "git" ];

View File

@ -13,6 +13,8 @@
''; '';
}; };
services.easyeffects.enable = true;
# Don't touch # Don't touch
home.stateVersion = "24.11"; home.stateVersion = "24.11";
} }

View File

@ -2,10 +2,14 @@
let let
nix_background = "rgb(16, 15, 15)"; nix_background = "rgb(16, 15, 15)";
nix_text = "rgb(206, 205, 195)"; nix_text = "rgb(206, 205, 195)";
nix_accent = "rgb(67, 133, 190)"; # blue nix_accent = "rgb(32, 94, 166)"; # blue
nix_inactive = "rgb(64, 62, 60)"; nix_inactive = "rgb(64, 62, 60)";
nix_alert = "rgb(209, 77, 65)"; # red nix_alert = "rgb(175, 48, 41)"; # red
nix_recording = "rgb(218, 112, 44)"; # orange nix_recording = "rgb(188, 82, 21)"; # orange
nix_font = "JetBrainsMono Nerd Font";
nix_border_size = 3;
nix_corner = 10;
nix_bar_height = 30;
in in
{ {
home.pointerCursor = { home.pointerCursor = {
@ -22,21 +26,56 @@ in
services.udiskie.enable = true; # automount USB services.udiskie.enable = true; # automount USB
services.playerctld.enable = true; # media control for browser, etc
services.mpd = {
enable = true;
musicDirectory = "/mnt/media/audio/music/flac";
extraConfig = ''
audio_output {
type "pipewire"
name "PipeWire Sound Server"
}
auto_update "yes"
'';
};
programs.rmpc = {
enable = true;
config = ''
(
address: "127.0.0.1:6600",
password: None,
theme: None,
cache_dir: None,
on_song_change: None,
volume_step: 5,
max_fps: 30,
scrolloff: 0,
wrap_navigation: false,
enable_mouse: true,
enable_config_hot_reload: true,
select_current_song_on_change: false,
browser_song_sort: [Disc, Track, Artist, Title],
)
'';
};
programs.alacritty = { programs.alacritty = {
enable = true; enable = true;
theme = "flexoki"; theme = "flexoki";
settings = { settings = {
font = { font = {
normal = { normal = {
family = "JetBrainsMono Nerd Font"; family = nix_font;
style = "Regular"; style = "Regular";
}; };
bold = { bold = {
family = "JetBrainsMono Nerd Font"; family = nix_font;
style = "Bold"; style = "Bold";
}; };
italic = { italic = {
family = "JetBrainsMono Nerd Font"; family = nix_font;
style = "Italic"; style = "Italic";
}; };
size = 9; size = 9;
@ -50,16 +89,6 @@ in
}; };
}; };
programs.kitty = {
enable = true;
shellIntegration.enableZshIntegration = true;
font.name = "JetBrains Mono Nerd Font";
themeFile = "Catppuccin-Mocha";
settings = {
background_opacity = 0.9;
};
};
services.hyprpaper = { services.hyprpaper = {
enable = true; enable = true;
settings = { settings = {
@ -78,19 +107,21 @@ in
enable = true; enable = true;
settings = { settings = {
global = { global = {
width = "(300, 300)"; width = "(300, 300)";
height = "(75, 75)"; height = "(75, 75)";
font = "JetBrains Mono Nerd Font 14"; font = "${nix_font} 10";
offset = "(40, 40)"; offset = "(40, 40)";
frame-color = nix_inactive; frame_color = "#205ea6";
background = nix_background; background = "#100f0f1A";
foreground = nix_text; foreground = "#cecdc3";
timeout = 5; timeout = 5;
gaps = true;
gap_size = 15;
corner_radius = nix_corner;
}; };
urgency_critical = { urgency_critical = {
frame-color = nix_alert; frame_color = nix_alert;
timeout = 0; timeout = 0;
}; };
@ -127,19 +158,6 @@ in
# }; # };
# }; # };
# services.swaync = {
# enable = true;
# style = ''
# .notification {
# border-radius: 0px;
# background-color: "#1e1e2e";
# color: "#cdd6f4";
# border-color: "#89b4fa";
# }
# '';
#
# };
dconf = { dconf = {
enable = true; enable = true;
settings = { settings = {
@ -162,7 +180,7 @@ in
border: none; border: none;
border-radius: 0; border-radius: 0;
min-height: 0; min-height: 0;
font-family: 'JetBrainsMono Nerd Font'; font-family: '${nix_font}';
font-size: 14px; /* up from 12px */ font-size: 14px; /* up from 12px */
} }
@ -185,12 +203,20 @@ in
opacity: 0.5; opacity: 0.5;
} }
window#waybar {
border-radius: 0 0 ${toString nix_corner}px ${toString nix_corner}px;
}
#cpu, #cpu,
#battery, #battery,
#pulseaudio, #pulseaudio,
#custom-power, #custom-power,
#idle_inhibitor, #idle_inhibitor,
#bluetooth, #bluetooth,
#privacy,
#custom-menu,
#hyprland-submap,
#language { #language {
min-width: 12px; min-width: 12px;
margin: 0 7.5px; margin: 0 7.5px;
@ -208,7 +234,7 @@ in
margin-right: 13px; margin-right: 13px;
} }
#custom-expandn { #custom-expand {
margin-right: 18px; margin-right: 18px;
} }
@ -239,12 +265,13 @@ in
opacity: 0; opacity: 0;
} }
#privacy { #privacy privacy-item *{
min-width: 12px; min-width: 12px;
margin-left: 5px; margin-left: 5px;
margin-right: 0; margin-right: 0;
font-size: 10px; font-size: 10px;
padding-bottom: 1px; padding-bottom: 1px;
color: #ffffff;
} }
#privacy.active { #privacy.active {
@ -257,9 +284,13 @@ in
''; '';
settings = { settings = {
mainBar = { mainBar = {
height = 26; height = nix_bar_height;
spacing = 4; spacing = 0;
modules-left = [ "hyprland/workspaces" ]; modules-left = [
"custom/menu"
"hyprland/workspaces"
"hyprland/submap"
];
modules-center = [ modules-center = [
"clock" "clock"
"idle_inhibitor" "idle_inhibitor"
@ -274,6 +305,10 @@ in
"privacy" "privacy"
]; ];
privacy = {
icon-size = 14;
};
"hyprland/workspaces" = { "hyprland/workspaces" = {
on-click = "activate"; on-click = "activate";
format = "{icon}"; format = "{icon}";
@ -306,7 +341,8 @@ in
}; };
tray = { tray = {
#spacing = 10; spacing = 17;
icon-size = 12;
}; };
"hyprland/language" = { "hyprland/language" = {
@ -321,6 +357,11 @@ in
on-click = "hyprlock & systemctl suspend"; on-click = "hyprlock & systemctl suspend";
}; };
"custom/menu" = {
format = "";
on-click = "walker";
};
"custom/expand" = { "custom/expand" = {
tooltip = false; tooltip = false;
format = ""; format = "";
@ -411,13 +452,140 @@ in
locale = ""; locale = "";
monitor = ""; monitor = "";
terminal_title_flag = ""; terminal_title_flag = "";
theme = "default";
timeout = 0; timeout = 0;
}; };
theme.name = "my-theme";
theme.style = ''
@define-color background ${nix_background};
@define-color foreground ${nix_text};
@define-color selected-text ${nix_accent};
@define-color base ${nix_background};
@define-color border ${nix_accent};
@define-color text ${nix_text};
* {
all: unset;
}
* {
font-family: monospace;
font-size: 18px;
color: @text;
}
scrollbar {
opacity: 0;
}
.normal-icons {
-gtk-icon-size: 16px;
}
.large-icons {
-gtk-icon-size: 32px;
}
.box-wrapper {
background: alpha(@base, 0.95);
padding: 20px;
border: 2px solid @border;
}
.preview-box {
}
.box {
}
.search-container {
background: @base;
padding: 10px;
}
.input placeholder {
opacity: 0.5;
}
.input {
}
.input:focus,
.input:active {
box-shadow: none;
outline: none;
}
.content-container {
}
.placeholder {
}
.scroll {
}
.list {
}
child,
child > * {
}
child:hover .item-box {
}
child:selected .item-box {
}
child:selected .item-box * {
color: @selected-text;
}
child:selected {
background: alpha(@text, 0.07);
}
.item-box {
padding-left: 14px;
}
.item-text-box {
all: unset;
padding: 14px 0;
}
.item-text {
}
.item-subtext {
font-size: 0px;
min-height: 0px;
margin: 0px;
padding: 0px;
}
.item-image {
margin-right: 14px;
-gtk-icon-transform: scale(0.9);
}
.current {
font-style: italic;
}
.keybind-hints {
background: @background;
padding: 10px;
margin-top: 10px;
}
.preview {
}
'';
}; };
programs.rofi = { programs.rofi = {
enable = true; enable = true;
font = "JetBrains Mono 14"; font = "${nix_font} 14";
plugins = [ plugins = [
pkgs.rofimoji pkgs.rofimoji
]; ];
@ -425,8 +593,18 @@ in
programs.hyprlock = { programs.hyprlock = {
enable = true; enable = true;
settings = { settings = {
general = {
ignore_empty_input = true;
};
background = { background = {
color = nix_background; # color = nix_background;
path = "screenshot";
blur_passes = 3;
blur_size = 8;
};
animations = {
enabled = false;
}; };
input-field = { input-field = {
@ -434,19 +612,22 @@ in
position = "0, 0"; position = "0, 0";
halign = "center"; halign = "center";
valign = "center"; valign = "center";
fade_on_emtpy = false; fade_on_empty = false;
font_color = nix_text; font_color = nix_text;
outer_color = nix_inactive; outer_color = nix_inactive;
inner_color = nix_background; inner_color = nix_background;
check_color = nix_accent; check_color = nix_accent;
fail_color = nix_alert; fail_color = nix_alert;
font_family = "JetBrains Mono Nerd Font"; font_family = nix_font;
shadow_passes = 0;
placeholder_text = "Enter Password"; placeholder_text = "Enter Password 󰈷 ";
fail_text = "<i>$FAIL ($ATTEMPTS)</i>"; fail_text = "<i>$FAIL ($ATTEMPTS)</i>";
rounding = 0; rounding = nix_corner;
}; };
"fingerprint:enabled" = true;
}; };
}; };
@ -472,10 +653,94 @@ in
}; };
}; };
xdg.configFile."hypr/scripts/media.sh" = {
executable = true;
text = ''
# Define a unique ID to reuse for replacing notifications
NOTIF_ID=9999
PLAYER=$(playerctl -l 2>/dev/null | grep -i 'brave\|chromium\|chrome' | head -n 1)
if [ -z "$PLAYER" ]; then
exit 1
fi
sleep 0.4s
# Get play/pause status
STATUS=$(playerctl -p "$PLAYER" status 2>/dev/null)
# Fetch metadata
TITLE=$(playerctl -p "$PLAYER" metadata title 2>/dev/null)
ARTIST=$(playerctl -p "$PLAYER" metadata artist 2>/dev/null)
# Format the message based on artist presence
if [ -z "$ARTIST" ]; then
MSG="$TITLE"
else
MSG="$TITLE\n$ARTIST"
fi
# Send notification using the -r flag to overwrite the old one
if [ "$STATUS" = "Paused" ]; then
notify-send -r $NOTIF_ID "Paused" "$MSG" -i media-playback-pause -t 5000
else
notify-send -r $NOTIF_ID "Now Playing" "$MSG" -i media-playback-start -t 5000
fi
'';
};
xdg.configFile."hypr/scripts/screenshot.sh" = {
executable = true;
text = ''
MODE=$1
FILE=$(mktemp /tmp/screenshot-XXXXXX.png)
grim -g "$(slurp)" "$FILE" || exit 1
wl-copy < "$FILE"
ACTION=$(dunstify "Screenshot taken" "Copied to clipboard" \
--icon="$FILE" \
--action="open,Open in Satty" \
--timeout=5000)
[ "$ACTION" = "2" ] && satty --filename "$FILE"
FILE=$(mktemp /tmp/screenshot-XXXXXX.png)
case "$MODE" in
region)
grim -g "$(slurp)" "$FILE" || exit 1
;;
fullscreen)
grim "$FILE" || exit 1
;;
window)
GEOMETRY=$(hyprctl clients -j | jq -r '.[] | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | slurp)
grim -g "$GEOMETRY" "$FILE" || exit 1
;;
*)
notify-send "Screenshot" "Invalid mode: $MODE" --urgency=critical
exit 1
;;
esac
wl-copy < "$FILE"
ACTION=$(notify-send "Screenshot taken ($MODE)" \
"Copied to clipboard" \
--icon="$FILE" \
--action="open=Open in Satty" \
--wait)
[ "$ACTION" = "open" ] && satty --filename "$FILE"
'';
};
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
plugins = [ plugins = [
#pkgs.hyprlandPlugins.hyprbars pkgs.hyprlandPlugins.hyprbars
]; ];
settings = { settings = {
# This is an example Hyprland config file for Nix. # This is an example Hyprland config file for Nix.
@ -492,6 +757,27 @@ in
# Create your files separately and then link them to this file like this: # Create your files separately and then link them to this file like this:
# source = ~/.config/hypr/myColors.conf # source = ~/.config/hypr/myColors.conf
# todo: make the line above nix-ish # todo: make the line above nix-ish
#
cursor = {
#hide_on_key_press = true; # wish this could be disabled on window basis https://github.com/hyprwm/Hyprland/discussions/12317
warp_on_change_workspace = 1;
};
plugin = {
hyprbars = {
bar_height = nix_bar_height;
hyprbars-button = [
"rgb(ff605C), 16, 󰖭, hyprctl dispatch killactive"
"rgb(00CA4E), 16, 󰊔, hyprctl dispatch fullscreen 1"
"rgb(FFBD44), 16, , hyprctl dispatch togglefloating"
];
on_double_click = "hyprctl dispatch fullscreen 1";
icon_on_hover = true;
bar_color = nix_background;
"col.text" = nix_text;
bar_buttons_alignment = "right";
};
};
################ ################
### MONITORS ### ### MONITORS ###
@ -581,14 +867,14 @@ in
gaps_in = 10; gaps_in = 10;
gaps_out = 20; gaps_out = 20;
border_size = 3; border_size = nix_border_size;
# these need to have variables # these need to have variables
"col.active_border" = "0x4385BEFF"; "col.active_border" = "0xFF205ea6";
"col.inactive_border" = "0x403E3CFF"; "col.inactive_border" = "0xFF403E3C";
# Set to true enable resizing windows by clicking and dragging on borders and gaps # Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false; resize_on_border = true;
# Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on # Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on
allow_tearing = false; allow_tearing = false;
@ -625,36 +911,35 @@ in
}; };
}; };
# https://wiki.hypr.land/Configuring/Variables/#decoration # https://wiki.hypr.land/Configuring/Basics/Variables/#decoration
decoration = { decoration = {
rounding = 0; rounding = nix_corner;
rounding_power = 2;
# Change transparency of focused and unfocused windows
active_opacity = 1.0;
inactive_opacity = 1.0;
shadow = { shadow = {
enabled = true; enabled = true;
range = 4; range = 2;
render_power = 3; render_power = 3;
color = "rgba(1a1a1aee)"; color = "rgba(1a1a1aee)";
}; };
# https://wiki.hypr.land/Configuring/Variables/#blur # https://wiki.hypr.land/Configuring/Basics/Variables/#blur
blur = { blur = {
enabled = true; enabled = true;
size = 8; size = 2;
passes = 1; passes = 2;
noise = 0.2; special = true;
brightness = 0.60;
vibrancy = 0.1696; contrast = 0.75;
}; };
}; };
layerrule = [ layerrule = [
"blur, notifications" "blur, notifications"
"ignorezero, notifications" "ignorezero, notifications"
# turn off anim for walker
"noanim, walker"
]; # add blur to notifications ]; # add blur to notifications
# https://wiki.hypr.land/Configuring/Variables/#animations # https://wiki.hypr.land/Configuring/Variables/#animations
@ -674,7 +959,7 @@ in
animation = [ animation = [
"global, 1, 10, default" "global, 1, 10, default"
"border, 1, 5.39, easeOutQuint" "border, 1, 5.39, easeOutQuint"
"windows, 1, 4.79, easeOutQuint" "windows, 1, 3.79, easeOutQuint"
"windowsIn, 1, 4.1, easeOutQuint, popin 87%" "windowsIn, 1, 4.1, easeOutQuint, popin 87%"
"windowsOut, 1, 1.49, linear, popin 87%" "windowsOut, 1, 1.49, linear, popin 87%"
"fadeIn, 1, 1.73, almostLinear" "fadeIn, 1, 1.73, almostLinear"
@ -685,31 +970,20 @@ in
"layersOut, 1, 1.5, linear, fade" "layersOut, 1, 1.5, linear, fade"
"fadeLayersIn, 1, 1.79, almostLinear" "fadeLayersIn, 1, 1.79, almostLinear"
"fadeLayersOut, 1, 1.39, almostLinear" "fadeLayersOut, 1, 1.39, almostLinear"
"workspaces, 1, 1.94, almostLinear, fade" "workspaces, 0, 1, default"
"workspacesIn, 1, 1.21, almostLinear, fade" "specialWorkspace, 1, 3, easeOutQuint, slidevert"
"workspacesOut, 1, 1.94, almostLinear, fade"
"zoomFactor, 1, 7, quick"
]; ];
}; };
# Ref https://wiki.hypr.land/Configuring/Workspace-Rules/
# "Smart gaps" / "No gaps when only"
# uncomment all if you wish to use that.
# workspace = [
# "w[tv1], gapsout:0, gapsin:0"
# "f[1], gapsout:0, gapsin:0"
# ];
# windowrule = [
# "bordersize 0, floating:0, onworkspace:w[tv1]"
# "rounding 0, floating:0, onworkspace:w[tv1]"
# "bordersize 0, floating:0, onworkspace:f[1]"
# "rounding 0, floating:0, onworkspace:f[1]"
# ];
# See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more # See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more
dwindle = { dwindle = {
pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true; # You probably want this preserve_split = true; # You probably want this
force_split = 2; # Always split on the right
};
binds = {
hide_special_on_workspace_change = true;
}; };
# See https://wiki.hypr.land/Configuring/Master-Layout/ for more # See https://wiki.hypr.land/Configuring/Master-Layout/ for more
@ -722,6 +996,7 @@ in
force_default_wallpaper = 0; # Set to 0 or 1 to disable the anime mascot wallpapers force_default_wallpaper = 0; # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true; # If true disables the random hyprland logo / anime girl background. :( disable_hyprland_logo = true; # If true disables the random hyprland logo / anime girl background. :(
background_color = nix_background; background_color = nix_background;
focus_on_activate = true;
}; };
############# #############
@ -735,11 +1010,15 @@ in
kb_model = ""; kb_model = "";
kb_options = "grp:alt_space_toggle"; kb_options = "grp:alt_space_toggle";
kb_rules = ""; kb_rules = "";
follow_mouse = 1; follow_mouse = 1;
repeat_rate = 40;
repeat_delay = 250;
sensitivity = 0; # -1.0 - 1.0, 0 means no modification. sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
accel_profile = "flat";
touchpad = { touchpad = {
disable_while_typing = false; disable_while_typing = false;
natural_scroll = false; natural_scroll = false;
@ -773,15 +1052,23 @@ in
"$mainMod SHIFT, Q, exit," "$mainMod SHIFT, Q, exit,"
"$mainMod, E, exec, $fileManager" "$mainMod, E, exec, $fileManager"
"$mainMod, V, togglefloating," "$mainMod, V, togglefloating,"
"$mainMod, F, fullscreen, 1" "$mainMod, F, fullscreen, 3"
"$mainMod, M, fullscreen, 1"
"$mainMod, W, exec, $browser" "$mainMod, W, exec, $browser"
"$mainMod, space, exec, $menu" "$mainMod, space, exec, $menu"
#"$mainMod, P, pseudo," # dwindle #"$mainMod, P, pseudo," # dwindle
"$mainMod, T, togglesplit," # dwindle "$mainMod, T, togglesplit," # dwindle
"$mainMod SHIFT, L, exec, hyprlock" "$mainMod SHIFT, L, exec, hyprlock"
"$mainMod SHIFT, F, workspaceopt, allfloat" "$mainMod SHIFT, F, workspaceopt, allfloat"
"$mainMod SHIFT, H, exec, for i in {1..10}; do dunstctl history-pop; done; sleep 5 && dunstctl close-all" # show last 10 notifications for 5 seconds
"$mainMod, G, togglegroup," "$mainMod, G, togglegroup,"
"$mainMod SHIFT, S, exec, grim -g \"$(slurp)\" - | wl-copy" "$mainMod SHIFT, S, exec, ~/.config/hypr/scripts/screenshot.sh region"
", PRINT, exec, ~/.config/hypr/scripts/screenshot.sh fullscreen"
"$mainMod, PRINT, exec, ~/.config/hypr/scripts/screenshot.sh window"
# OCR
"$mainMod SHIFT, T, exec, bash -c 'grim -g \"$(slurp)\" - | tesseract - stdout | wl-copy'"
"$mainMod SHIFT, PRINT, exec, pkill hyprpicker || hyprpicker -a | wl-copy"
# Move focus with mainMod + arrow keys # Move focus with mainMod + arrow keys
"$mainMod, h, movefocus, l" "$mainMod, h, movefocus, l"
@ -845,10 +1132,10 @@ in
# Requires playerctl # Requires playerctl
bindl = [ bindl = [
", XF86AudioNext, exec, playerctl next" ", XF86AudioNext, exec, playerctl next& ~/.config/hypr/scripts/media.sh"
", XF86AudioPause, exec, playerctl play-pause" ", XF86AudioPause, exec, playerctl play-pause& ~/.config/hypr/scripts/media.sh"
", XF86AudioPlay, exec, playerctl play-pause" ", XF86AudioPlay, exec, playerctl play-pause& ~/.config/hypr/scripts/media.sh"
", XF86AudioPrev, exec, playerctl previous" ", XF86AudioPrev, exec, playerctl previous& ~/.config/hypr/scripts/media.sh"
]; ];
############################## ##############################
@ -867,13 +1154,12 @@ in
# Fix some dragging issues with XWayland # Fix some dragging issues with XWayland
"nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0" "nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0"
"float, title:^(bluetui)$" # make tuis accessed from waybar float in center
"center, title:^(bluetui)$" "tag +floating-window, title:(bluetui|impala|wiremix)"
"float, title:^(impala)$" "tag +floating-window, title:^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)"
"center, title:^(impala)$" "float, class:(org.gnome.Calculator)"
"float, title:^(wiremix)$"
"center, title:^(wiremix)$"
# send games to specific workspace
"workspace name:games silent, class:$games" "workspace name:games silent, class:$games"
"noanim, class:$games" "noanim, class:$games"
"noblur, class:$games" "noblur, class:$games"
@ -882,6 +1168,42 @@ in
"rounding 0, class:$games" "rounding 0, class:$games"
"fullscreen, class:$games" "fullscreen, class:$games"
"immediate, class:$games" "immediate, class:$games"
# pip
"tag +pip, title:(Picture.?in.?[Pp]icture)"
"tag -default-opacity, tag:pip"
"float, tag:pip"
"pin, tag:pip"
"size 600 338, tag:pip"
"keepaspectratio, tag:pip"
"bordersize 0, tag:pip"
"opacity 1 1, tag:pip"
"move (monitor_w-window_w-40) (monitor_h*0.04), tag:pip"
# steam
"float, class:^(steam)$"
"center, class:^(steam)$, title:^(Steam)$"
"tag -default-opacity, class:^(steam.*)$"
"opacity 1 1, class:^(steam.*)$"
"size 1100 700, class:^(steam)$, title:^(Steam)$"
"size 460 800, class:^(steam)$, title:^(Friends List)$"
"idleinhibit fullscreen, class:^(steam)$"
# bitwarden
"noscreenshare, class:^(Bitwarden)$"
"tag +floating-window, class:^(Bitwarden)$"
# Bitwarden Chrome Extension
"noscreenshare, class:^(brave-nngceckbapebfimnlniiiahkandclblb-Default)$"
"tag +floating-window, class:^(brave-nngceckbapebfimnlniiiahkandclblb-Default)$"
# floating tag
"float, tag:floating-window"
"center, tag:floating-window"
"size 875 600, tag:floating-window"
# hyprbar
"plugin:hyprbars:nobar, tag:^(?!floating-window$).*$"
]; ];
"$games" = "$games" =

View File

@ -7,7 +7,7 @@
{ {
systemd.user.services.podman-prune = { systemd.user.services.podman-prune = {
Unit = { Unit = {
Description = "Prune unused Podman resources for admin user"; Description = "Prune unused Podman resources for admin user";
}; };
@ -15,9 +15,9 @@ systemd.user.services.podman-prune = {
Type = "oneshot"; Type = "oneshot";
ExecStart = "${pkgs.podman}/bin/podman system prune -f --all"; ExecStart = "${pkgs.podman}/bin/podman system prune -f --all";
}; };
}; };
systemd.user.timers.podman-prune = { systemd.user.timers.podman-prune = {
Unit = { Unit = {
Description = "Weekly Podman prune timer"; Description = "Weekly Podman prune timer";
}; };
@ -28,7 +28,7 @@ systemd.user.timers.podman-prune = {
Install = { Install = {
WantedBy = [ "timers.target" ]; WantedBy = [ "timers.target" ];
}; };
}; };
services.podman.networks = { services.podman.networks = {
internal_net = { internal_net = {
@ -40,28 +40,28 @@ systemd.user.timers.podman-prune = {
services.podman.autoUpdate.onCalendar = "*-*-* 00:00"; services.podman.autoUpdate.onCalendar = "*-*-* 00:00";
services.podman.containers = { services.podman.containers = {
# palworld = { # palworld = {
# image = "docker.io/thijsvanloef/palworld-server-docker:latest"; # image = "docker.io/thijsvanloef/palworld-server-docker:latest";
# autoStart = true; # autoStart = true;
# autoUpdate = "registry"; # autoUpdate = "registry";
# network = "internal_net"; # network = "internal_net";
# environmentFile = [ # environmentFile = [
# "/pool/services/secrets/default" # "/pool/services/secrets/default"
# "/pool/services/secrets/palworld" # "/pool/services/secrets/palworld"
# ]; # ];
# volumes = [ # volumes = [
# "/pool/services/podman/palworld:/palworld" # "/pool/services/podman/palworld:/palworld"
# ]; # ];
# ports = [ # ports = [
# "8211:8211/udp" # "8211:8211/udp"
# "27015:27015/udp" # "27015:27015/udp"
# ]; # ];
# extraConfig = { # extraConfig = {
# Service = { # Service = {
# TimeoutStartSec = 900; # TimeoutStartSec = 900;
# }; # };
# }; # };
# }; # };
actual = { actual = {
image = "docker.io/actualbudget/actual-server:latest"; image = "docker.io/actualbudget/actual-server:latest";
@ -81,49 +81,49 @@ systemd.user.timers.podman-prune = {
}; };
}; };
# akaunting = { # akaunting = {
# image = "docker.io/akaunting/akaunting:latest"; # image = "docker.io/akaunting/akaunting:latest";
# autoStart = true; # autoStart = true;
# autoUpdate = "registry"; # autoUpdate = "registry";
# network = "internal_net"; # network = "internal_net";
# environmentFile = [ # environmentFile = [
# "/pool/services/secrets/default" # "/pool/services/secrets/default"
# "/pool/services/secrets/akaunting" # "/pool/services/secrets/akaunting"
# ]; # ];
# volumes = [ # volumes = [
# "/pool/services/podman/akaunting/data:/var/www/html/akaunting" # "/pool/services/podman/akaunting/data:/var/www/html/akaunting"
# ]; # ];
# ports = [ # ports = [
# "8003:80" # "8003:80"
# ]; # ];
# extraConfig = { # extraConfig = {
# Service = { # Service = {
# TimeoutStartSec = 900; # TimeoutStartSec = 900;
# }; # };
# }; # };
# }; # };
# #
# akaunting-db = { # akaunting-db = {
# image = "docker.io/mariadb:latest"; # image = "docker.io/mariadb:latest";
# autoStart = true; # autoStart = true;
# autoUpdate = "registry"; # autoUpdate = "registry";
# network = "internal_net"; # network = "internal_net";
# environmentFile = [ # environmentFile = [
# "/pool/services/secrets/default" # "/pool/services/secrets/default"
# "/pool/services/secrets/akaunting" # "/pool/services/secrets/akaunting"
# ]; # ];
# volumes = [ # volumes = [
# "/pool/services/podman/akaunting/db:/var/lib/mysql" # "/pool/services/podman/akaunting/db:/var/lib/mysql"
# ]; # ];
# ports = [ # ports = [
# "3307:3306" # "3307:3306"
# ]; # ];
# extraConfig = { # extraConfig = {
# Service = { # Service = {
# TimeoutStartSec = 900; # TimeoutStartSec = 900;
# }; # };
# }; # };
# }; # };
archivebox = { archivebox = {
image = "docker.io/archivebox/archivebox:latest"; image = "docker.io/archivebox/archivebox:latest";
@ -272,12 +272,12 @@ systemd.user.timers.podman-prune = {
autoUpdate = "registry"; autoUpdate = "registry";
network = "internal_net"; network = "internal_net";
environment = { environment = {
OIDC_ENABLED="1"; OIDC_ENABLED = "1";
OIDC_PROVIDER_METADATA_URL="https://authentik.mektem.com/application/o/fresh-rss/.well-known/openid-configuration"; OIDC_PROVIDER_METADATA_URL = "https://authentik.mektem.com/application/o/fresh-rss/.well-known/openid-configuration";
OIDC_CLIENT_ID="PsqRnVLTezIKL7582E8pnKNFIF0W41kVyMhh4RoG"; OIDC_CLIENT_ID = "PsqRnVLTezIKL7582E8pnKNFIF0W41kVyMhh4RoG";
OIDC_CLIENT_SECRET="h1XsvbUcRn33rq7qBBS0GUENEgn6zTJQeHpVPhzcqG4ekdwlCghIn1ALhydYXF1pfS8HaskM3KntHXDTC8a7athLxLzT95Gxr8OpvN9iOY75pUXrNnLJXUrY9o4qKM7m"; OIDC_CLIENT_SECRET = "h1XsvbUcRn33rq7qBBS0GUENEgn6zTJQeHpVPhzcqG4ekdwlCghIn1ALhydYXF1pfS8HaskM3KntHXDTC8a7athLxLzT95Gxr8OpvN9iOY75pUXrNnLJXUrY9o4qKM7m";
OIDC_X_FORWARDED_HEADERS="X-Forwarded-Port X-Forwarded-Proto X-Forwarded-Host"; OIDC_X_FORWARDED_HEADERS = "X-Forwarded-Port X-Forwarded-Proto X-Forwarded-Host";
OIDC_SCOPES="openid email profile"; OIDC_SCOPES = "openid email profile";
}; };
volumes = [ volumes = [
"/pool/services/podman/freshrss:/config" "/pool/services/podman/freshrss:/config"
@ -318,40 +318,39 @@ systemd.user.timers.podman-prune = {
}; };
}; };
# gitea-anubis = { # gitea-anubis = {
# image = "ghcr.io/techarohq/anubis:latest"; # image = "ghcr.io/techarohq/anubis:latest";
# autoStart = true; # autoStart = true;
# autoUpdate = "registry"; # autoUpdate = "registry";
# network = "internal_net"; # network = "internal_net";
# environmentFile = [ # environmentFile = [
# "/pool/services/secrets/default" # "/pool/services/secrets/default"
# "/pool/services/secrets/anubis-default" #WHY DOES THIS NOT WORK???? # "/pool/services/secrets/anubis-default" #WHY DOES THIS NOT WORK????
# "/pool/services/secrets/anubis-nginx" # "/pool/services/secrets/anubis-nginx"
# ]; # ];
# environment = { # environment = {
# DIFFICULTY = "4"; # DIFFICULTY = "4";
# SERVE_ROBOTS_TXT = "true"; # SERVE_ROBOTS_TXT = "true";
# POLICY_FNAME = "/data/cfg/botPolicy.json"; # POLICY_FNAME = "/data/cfg/botPolicy.json";
# OG_PASSTHROUGH = "true"; # OG_PASSTHROUGH = "true";
# OG_EXPIRY_TIME = "24h"; # OG_EXPIRY_TIME = "24h";
# BIND = ":3002"; # BIND = ":3002";
# METRICS_BIND = ":9090"; # METRICS_BIND = ":9090";
# TARGET = "http://192.168.0.30:3001"; # TARGET = "http://192.168.0.30:3001";
# }; # };
# #
# volumes = [ # volumes = [
# "/pool/services/podman/anubis/botPolicy.json:/data/cfg/botPolicy.json:ro" # "/pool/services/podman/anubis/botPolicy.json:/data/cfg/botPolicy.json:ro"
# ]; # ];
# ports = [ # ports = [
# "3002:3002" # "3002:3002"
# ]; # ];
# extraConfig = { # extraConfig = {
# Service = { # Service = {
# TimeoutStartSec = 900; # TimeoutStartSec = 900;
# }; # };
# }; # };
# }; # };
home-assistant = { home-assistant = {
image = "ghcr.io/home-assistant/home-assistant:stable"; image = "ghcr.io/home-assistant/home-assistant:stable";
@ -539,46 +538,46 @@ systemd.user.timers.podman-prune = {
}; };
}; };
# joplin = { # joplin = {
# image = "docker.io/joplin/server:latest"; # image = "docker.io/joplin/server:latest";
# autoStart = true; # autoStart = true;
# autoUpdate = "registry"; # autoUpdate = "registry";
# network = "internal_net"; # network = "internal_net";
# environmentFile = [ # environmentFile = [
# "/pool/services/secrets/default" # "/pool/services/secrets/default"
# "/pool/services/secrets/joplin" # "/pool/services/secrets/joplin"
# ]; # ];
# ports = [ # ports = [
# "22300:22300" # "22300:22300"
# ]; # ];
# extraConfig = { # extraConfig = {
# Service = { # Service = {
# TimeoutStartSec = 900; # TimeoutStartSec = 900;
# }; # };
# }; # };
# }; # };
# #
# joplin-db = { # joplin-db = {
# image = "docker.io/postgres:15"; # image = "docker.io/postgres:15";
# autoStart = true; # autoStart = true;
# autoUpdate = "registry"; # autoUpdate = "registry";
# network = "internal_net"; # network = "internal_net";
# environmentFile = [ # environmentFile = [
# "/pool/services/secrets/default" # "/pool/services/secrets/default"
# "/pool/services/secrets/joplin" # "/pool/services/secrets/joplin"
# ]; # ];
# volumes = [ # volumes = [
# "/pool/services/podman/joplin-db:/var/lib/postgresql/data" # "/pool/services/podman/joplin-db:/var/lib/postgresql/data"
# ]; # ];
# ports = [ # ports = [
# "5432:5432" # "5432:5432"
# ]; # ];
# extraConfig = { # extraConfig = {
# Service = { # Service = {
# TimeoutStartSec = 900; # TimeoutStartSec = 900;
# }; # };
# }; # };
# }; # };
kiwix = { kiwix = {
image = "ghcr.io/kiwix/kiwix-serve:latest"; image = "ghcr.io/kiwix/kiwix-serve:latest";
@ -639,70 +638,69 @@ systemd.user.timers.podman-prune = {
}; };
}; };
# mastodon = { # mastodon = {
# image = "ghcr.io/linuxserver/mastodon:amd64-latest"; # image = "ghcr.io/linuxserver/mastodon:amd64-latest";
# autoStart = true; # autoStart = true;
# autoUpdate = "registry"; # autoUpdate = "registry";
# network = "internal_net"; # network = "internal_net";
# environmentFile = [ # environmentFile = [
# "/pool/services/secrets/default" # "/pool/services/secrets/default"
# "/pool/services/secrets/mastodon" # "/pool/services/secrets/mastodon"
# ]; # ];
# volumes = [ # volumes = [
# "/pool/services/podman/mastodon/config:/config" # "/pool/services/podman/mastodon/config:/config"
# ]; # ];
# ports = [ # ports = [
# "808:80" # "808:80"
# "8449:443" # "8449:443"
# "3009:3000" # "3009:3000"
# ]; # ];
# extraConfig = { # extraConfig = {
# Service = { # Service = {
# TimeoutStartSec = 900; # TimeoutStartSec = 900;
# }; # };
# }; # };
# }; # };
# #
# mastodon-db = { # mastodon-db = {
# image = "docker.io/postgres:16-alpine"; # image = "docker.io/postgres:16-alpine";
# autoStart = true; # autoStart = true;
# autoUpdate = "registry"; # autoUpdate = "registry";
# network = "internal_net"; # network = "internal_net";
# environmentFile = [ # environmentFile = [
# "/pool/services/secrets/default" # "/pool/services/secrets/default"
# "/pool/services/secrets/mastodon-db" # "/pool/services/secrets/mastodon-db"
# ]; # ];
# volumes = [ # volumes = [
# "/pool/services/podman/mastodon/db:/var/lib/postgresql/data" # "/pool/services/podman/mastodon/db:/var/lib/postgresql/data"
# ]; # ];
# ports = [ # ports = [
# "5435:5432" # "5435:5432"
# ]; # ];
# extraConfig = { # extraConfig = {
# Service = { # Service = {
# TimeoutStartSec = 900; # TimeoutStartSec = 900;
# }; # };
# }; # };
# }; # };
# #
# mastodon-redis = { # mastodon-redis = {
# image = "registry.hub.docker.com/library/redis:6.2-alpine"; # image = "registry.hub.docker.com/library/redis:6.2-alpine";
# autoStart = true; # autoStart = true;
# autoUpdate = "registry"; # autoUpdate = "registry";
# network = "internal_net"; # network = "internal_net";
# environmentFile = [ # environmentFile = [
# "/pool/services/secrets/default" # "/pool/services/secrets/default"
# ]; # ];
# ports = [ # ports = [
# "6382:6379" # "6382:6379"
# ]; # ];
# extraConfig = { # extraConfig = {
# Service = { # Service = {
# TimeoutStartSec = 900; # TimeoutStartSec = 900;
# }; # };
# }; # };
# }; # };
metube = { metube = {
image = "ghcr.io/alexta69/metube:latest"; image = "ghcr.io/alexta69/metube:latest";
@ -1036,27 +1034,27 @@ systemd.user.timers.podman-prune = {
}; };
}; };
}; };
# rlcraft = { # rlcraft = {
# image = "docker.io/itzg/minecraft-server:java8"; # image = "docker.io/itzg/minecraft-server:java8";
# autoStart = true; # autoStart = true;
# autoUpdate = "registry"; # autoUpdate = "registry";
# network = "internal_net"; # network = "internal_net";
# environmentFile = [ # environmentFile = [
# "/pool/services/secrets/default" # "/pool/services/secrets/default"
# "/pool/services/secrets/rlcraft" # "/pool/services/secrets/rlcraft"
# ]; # ];
# volumes = [ # volumes = [
# "/pool/services/podman/minecraft/rlcraft/data:/data" # "/pool/services/podman/minecraft/rlcraft/data:/data"
# ]; # ];
# ports = [ # ports = [
# "25565:25565" # "25565:25565"
# ]; # ];
# extraConfig = { # extraConfig = {
# Service = { # Service = {
# TimeoutStartSec = 900; # TimeoutStartSec = 900;
# }; # };
# }; # };
# }; # };
rutorrent = { rutorrent = {
image = "docker.io/crazymax/rtorrent-rutorrent:latest"; image = "docker.io/crazymax/rtorrent-rutorrent:latest";
@ -1119,52 +1117,50 @@ systemd.user.timers.podman-prune = {
}; };
}; };
# tandoor = {
# tandoor = { # image = "docker.io/vabene1111/recipes";
# image = "docker.io/vabene1111/recipes"; # autoStart = true;
# autoStart = true; # autoUpdate = "registry";
# autoUpdate = "registry"; # network = "internal_net";
# network = "internal_net"; # environmentFile = [
# environmentFile = [ # "/pool/services/secrets/default"
# "/pool/services/secrets/default" # "/pool/services/secrets/tandoor"
# "/pool/services/secrets/tandoor" # ];
# ]; # volumes = [
# volumes = [ # "/pool/services/podman/tandoor/staticfiles:/opt/recipes/staticfiles"
# "/pool/services/podman/tandoor/staticfiles:/opt/recipes/staticfiles" # "/pool/services/podman/tandoor/mediafiles:/opt/recipes/mediafiles"
# "/pool/services/podman/tandoor/mediafiles:/opt/recipes/mediafiles" # ];
# ]; # ports = [
# ports = [ # "9092:80"
# "9092:80" # ];
# ]; # extraConfig = {
# extraConfig = { # Service = {
# Service = { # TimeoutStartSec = 900;
# TimeoutStartSec = 900; # };
# }; # };
# }; # };
# }; #
# # tandoor-db = {
# tandoor-db = { # image = "docker.io/postgres:16-alpine";
# image = "docker.io/postgres:16-alpine"; # autoStart = true;
# autoStart = true; # autoUpdate = "registry";
# autoUpdate = "registry"; # network = "internal_net";
# network = "internal_net"; # environmentFile = [
# environmentFile = [ # "/pool/services/secrets/default"
# "/pool/services/secrets/default" # "/pool/services/secrets/tandoor"
# "/pool/services/secrets/tandoor" # ];
# ]; # volumes = [
# volumes = [ # "/pool/services/podman/tandoor/db:/var/lib/postgresql/data"
# "/pool/services/podman/tandoor/db:/var/lib/postgresql/data" # ];
# ]; # ports = [
# ports = [ # "5434:5432"
# "5434:5432" # ];
# ]; # extraConfig = {
# extraConfig = { # Service = {
# Service = { # TimeoutStartSec = 900;
# TimeoutStartSec = 900; # };
# }; # };
# }; # };
# };
thelounge = { thelounge = {
image = "lscr.io/linuxserver/thelounge:latest"; image = "lscr.io/linuxserver/thelounge:latest";
@ -1319,28 +1315,27 @@ systemd.user.timers.podman-prune = {
}; };
}; };
# zigbee2mqtt = {
# zigbee2mqtt = { # image = "docker.io/koenkk/zigbee2mqtt";
# image = "docker.io/koenkk/zigbee2mqtt"; # autoStart = true;
# autoStart = true; # autoUpdate = "registry";
# autoUpdate = "registry"; # network = "internal_net";
# network = "internal_net"; # devices = [ "/dev/ttyACM0:/dev/ttyACM0" ];
# devices = [ "/dev/ttyACM0:/dev/ttyACM0" ]; # environmentFile = [
# environmentFile = [ # "/pool/services/secrets/default"
# "/pool/services/secrets/default" # ];
# ]; # volumes = [
# volumes = [ # "/pool/services/podman/zigbee2mqtt:/app/data"
# "/pool/services/podman/zigbee2mqtt:/app/data" # ];
# ]; # ports = [
# ports = [ # "8808:8080"
# "8808:8080" # ];
# ]; # extraConfig = {
# extraConfig = { # Service = {
# Service = { # TimeoutStartSec = 900;
# TimeoutStartSec = 900; # };
# }; # };
# }; # };
# };
}; };

View File

@ -1,37 +1,55 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: {
config,
lib,
pkgs,
modulesPath,
...
}:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" "nvidia-uvm" ]; boot.initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"nvme"
"usbhid"
"usb_storage"
"sd_mod"
"nvidia-uvm"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" = {
{ device = "/dev/disk/by-uuid/bd28421d-7ec4-4b23-964d-c07a6f351e1f"; device = "/dev/disk/by-uuid/bd28421d-7ec4-4b23-964d-c07a6f351e1f";
fsType = "ext4"; fsType = "ext4";
}; };
boot.initrd.luks.devices."luks-e3a81f8e-3ae9-494b-a329-a6f860b10e34".device = "/dev/disk/by-uuid/e3a81f8e-3ae9-494b-a329-a6f860b10e34"; boot.initrd.luks.devices."luks-e3a81f8e-3ae9-494b-a329-a6f860b10e34".device =
"/dev/disk/by-uuid/e3a81f8e-3ae9-494b-a329-a6f860b10e34";
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/D47C-5FCE"; device = "/dev/disk/by-uuid/D47C-5FCE";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ]; options = [
"fmask=0077"
"dmask=0077"
];
}; };
swapDevices = swapDevices = [
[ { device = "/dev/disk/by-uuid/be22d9db-283a-4dd9-93d5-1006e392724b"; } { device = "/dev/disk/by-uuid/be22d9db-283a-4dd9-93d5-1006e392724b"; }
]; ];
fileSystems."/run/media/admin/08cabc7a-9a6e-4c21-8a07-6663af77b705" = fileSystems."/run/media/admin/08cabc7a-9a6e-4c21-8a07-6663af77b705" = {
{ device = "/dev/disk/by-uuid/08cabc7a-9a6e-4c21-8a07-6663af77b705"; device = "/dev/disk/by-uuid/08cabc7a-9a6e-4c21-8a07-6663af77b705";
fsType = "ext4"; fsType = "ext4";
}; };

View File

@ -1,4 +1,9 @@
{ config, pkgs, inputs, ... }: {
config,
pkgs,
inputs,
...
}:
{ {
@ -6,15 +11,16 @@
boot.loader.systemd-boot.configurationLimit = 10; boot.loader.systemd-boot.configurationLimit = 10;
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
services.pipewire = { services.pipewire = {
enable = true; enable = true;
alsa.enable = true; alsa.enable = true;
pulse.enable = true; pulse.enable = true;
wireplumber.enable = true; wireplumber.enable = true;
}; };
boot = { boot = {
initrd.luks.devices."luks-cbf20b12-90f7-4fbb-95d3-1320eece4d89".device = "/dev/disk/by-uuid/cbf20b12-90f7-4fbb-95d3-1320eece4d89"; initrd.luks.devices."luks-cbf20b12-90f7-4fbb-95d3-1320eece4d89".device =
"/dev/disk/by-uuid/cbf20b12-90f7-4fbb-95d3-1320eece4d89";
kernelParams = [ kernelParams = [
"nvidia_drm.modeset=1" "nvidia_drm.modeset=1"
"nvidia_drm.fbdev=1" "nvidia_drm.fbdev=1"
@ -35,7 +41,10 @@ services.pipewire = {
]; ];
}; };
defaultGateway = "192.168.30.1"; defaultGateway = "192.168.30.1";
nameservers = [ "192.168.0.1" "1.1.1.1" ]; nameservers = [
"192.168.0.1"
"1.1.1.1"
];
}; };
services = { services = {
@ -44,7 +53,7 @@ services.pipewire = {
hardware.nvidia = { hardware.nvidia = {
modesetting.enable = true; modesetting.enable = true;
powerManagement.enable = false; powerManagement.enable = true;
powerManagement.finegrained = false; powerManagement.finegrained = false;
open = false; open = false;
package = config.boot.kernelPackages.nvidiaPackages.stable; package = config.boot.kernelPackages.nvidiaPackages.stable;

View File

@ -2,9 +2,8 @@
{ {
nixpkgs.hostPlatform = "aarch64-darwin"; nixpkgs.hostPlatform = "aarch64-darwin";
system.stateVersion = 6; system.stateVersion = 6;
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
audacity audacity

View File

@ -14,7 +14,10 @@
]; ];
}; };
defaultGateway = "192.168.0.1"; defaultGateway = "192.168.0.1";
nameservers = [ "192.168.0.1" "1.1.1.1" ]; nameservers = [
"192.168.0.1"
"1.1.1.1"
];
}; };
users.users.admin.linger = true; users.users.admin.linger = true;

View File

@ -1,31 +1,47 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: {
config,
lib,
pkgs,
modulesPath,
...
}:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "mpt3sas" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; boot.initrd.availableKernelModules = [
"mpt3sas"
"xhci_pci"
"ahci"
"usb_storage"
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" = {
{ device = "/dev/disk/by-uuid/b9cc7972-36ae-4cb4-a6f4-e342eaca679e"; device = "/dev/disk/by-uuid/b9cc7972-36ae-4cb4-a6f4-e342eaca679e";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/542D-865C"; device = "/dev/disk/by-uuid/542D-865C";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ]; options = [
"fmask=0077"
"dmask=0077"
];
}; };
swapDevices = swapDevices = [
[ { device = "/dev/disk/by-uuid/1032bbd9-0124-419f-a696-a977755aaf17"; } { device = "/dev/disk/by-uuid/1032bbd9-0124-419f-a696-a977755aaf17"; }
]; ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking

View File

@ -7,7 +7,7 @@
#boot.loader.limine.biosDevice = "/dev/vda"; #boot.loader.limine.biosDevice = "/dev/vda";
#boot.loader.efi.efiSysMountPoint = "/boot"; #boot.loader.efi.efiSysMountPoint = "/boot";
systemd.services.podman-network-vlan50 = { systemd.services.podman-network-vlan50 = {
description = "Create podman vlan50 network"; description = "Create podman vlan50 network";
after = [ "network.target" ]; after = [ "network.target" ];
before = [ "podman-nginx.service" ]; before = [ "podman-nginx.service" ];
@ -26,7 +26,7 @@ systemd.services.podman-network-vlan50 = {
vlan50 vlan50
fi fi
''; '';
}; };
networking = { networking = {
vlans = { vlans = {
@ -55,7 +55,10 @@ systemd.services.podman-network-vlan50 = {
]; ];
}; };
defaultGateway = "192.168.0.1"; defaultGateway = "192.168.0.1";
nameservers = [ "192.168.0.1" "1.1.1.1" ]; nameservers = [
"192.168.0.1"
"1.1.1.1"
];
}; };
users.users.admin.linger = true; users.users.admin.linger = true;
@ -148,7 +151,7 @@ systemd.services.podman-network-vlan50 = {
# }; # };
# give permissions for zigbee USB transceiver # give permissions for zigbee USB transceiver
system.activationScripts.script.text = ''chmod o+rw /dev/ttyACM0''; system.activationScripts.script.text = "chmod o+rw /dev/ttyACM0";
boot.supportedFilesystems = [ "zfs" ]; boot.supportedFilesystems = [ "zfs" ];
boot.zfs.forceImportRoot = false; boot.zfs.forceImportRoot = false;
@ -167,9 +170,9 @@ systemd.services.podman-network-vlan50 = {
services.zfs.zed = { services.zfs.zed = {
settings = { settings = {
ZED_NTFY_URL="https://ntfy.mektem.com"; ZED_NTFY_URL = "https://ntfy.mektem.com";
ZED_NTFY_TOPIC="zfs"; ZED_NTFY_TOPIC = "zfs";
ZED_NTFY_ACCESS_TOKEN="tk_gtjia7itxhg1qik7j58wkgey2parr"; ZED_NTFY_ACCESS_TOKEN = "tk_gtjia7itxhg1qik7j58wkgey2parr";
ZED_NOTIFY_INTERVAL_SECS = 1; ZED_NOTIFY_INTERVAL_SECS = 1;
ZED_NOTIFY_VERBOSE = true; # Set to false to only get alerts on degradation ZED_NOTIFY_VERBOSE = true; # Set to false to only get alerts on degradation
}; };

1
nixos-apple-silicon Submodule

@ -0,0 +1 @@
Subproject commit f2506ef24a154e2bcc8fb10f2c73579324f9ead0