diff --git a/flake.lock b/flake.lock
index 972fe87..a1082ed 100644
--- a/flake.lock
+++ b/flake.lock
@@ -100,6 +100,24 @@
"type": "github"
}
},
+ "catppuccin": {
+ "inputs": {
+ "nixpkgs": "nixpkgs"
+ },
+ "locked": {
+ "lastModified": 1759572023,
+ "narHash": "sha256-2fzYq/m2PXie5WZO5LhyiZrTIUdUFp1SCLZAwvPL5xo=",
+ "owner": "catppuccin",
+ "repo": "nix",
+ "rev": "eeada12912d80d04733383d231a9d66172858718",
+ "type": "github"
+ },
+ "original": {
+ "owner": "catppuccin",
+ "repo": "nix",
+ "type": "github"
+ }
+ },
"firefox-gnome-theme": {
"flake": false,
"locked": {
@@ -455,7 +473,7 @@
"hyprlang": "hyprlang",
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
- "nixpkgs": "nixpkgs",
+ "nixpkgs": "nixpkgs_2",
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems",
"xdph": "xdph"
@@ -673,7 +691,7 @@
"git-hooks": "git-hooks",
"hercules-ci-effects": "hercules-ci-effects",
"neovim-src": "neovim-src",
- "nixpkgs": "nixpkgs_2",
+ "nixpkgs": "nixpkgs_3",
"treefmt-nix": "treefmt-nix"
},
"locked": {
@@ -707,6 +725,22 @@
}
},
"nixpkgs": {
+ "locked": {
+ "lastModified": 1759381078,
+ "narHash": "sha256-gTrEEp5gEspIcCOx9PD8kMaF1iEmfBcTbO0Jag2QhQs=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "7df7ff7d8e00218376575f0acdcc5d66741351ee",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_2": {
"locked": {
"lastModified": 1757487488,
"narHash": "sha256-zwE/e7CuPJUWKdvvTCB7iunV4E/+G0lKfv4kk/5Izdg=",
@@ -722,7 +756,7 @@
"type": "github"
}
},
- "nixpkgs_2": {
+ "nixpkgs_3": {
"locked": {
"lastModified": 1758029226,
"narHash": "sha256-TjqVmbpoCqWywY9xIZLTf6ANFvDCXdctCjoYuYPYdMI=",
@@ -738,7 +772,7 @@
"type": "github"
}
},
- "nixpkgs_3": {
+ "nixpkgs_4": {
"locked": {
"lastModified": 1758035966,
"narHash": "sha256-qqIJ3yxPiB0ZQTT9//nFGQYn8X/PBoJbofA7hRKZnmE=",
@@ -754,7 +788,7 @@
"type": "github"
}
},
- "nixpkgs_4": {
+ "nixpkgs_5": {
"locked": {
"lastModified": 1744536153,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
@@ -820,11 +854,12 @@
},
"root": {
"inputs": {
+ "catppuccin": "catppuccin",
"home-manager": "home-manager",
"hyprland": "hyprland",
"minimal-tmux": "minimal-tmux",
"neovim-nightly-overlay": "neovim-nightly-overlay",
- "nixpkgs": "nixpkgs_3",
+ "nixpkgs": "nixpkgs_4",
"sops-nix": "sops-nix",
"stylix": "stylix",
"typsite": "typsite"
@@ -832,7 +867,7 @@
},
"rust-overlay": {
"inputs": {
- "nixpkgs": "nixpkgs_4"
+ "nixpkgs": "nixpkgs_5"
},
"locked": {
"lastModified": 1749004659,
diff --git a/flake.nix b/flake.nix
index 99c5154..ba30575 100644
--- a/flake.nix
+++ b/flake.nix
@@ -17,6 +17,8 @@
inputs.nixpkgs.follows = "nixpkgs";
};
+ catppuccin.url = "github:catppuccin/nix";
+
# Neovim
neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay";
@@ -39,7 +41,7 @@
home-manager,
stylix,
sops-nix,
- typsite,
+ catppuccin,
...
}@inputs:
let
@@ -81,6 +83,7 @@
stylix.nixosModules.stylix
home-manager.nixosModules.home-manager
sops-nix.nixosModules.sops
+ catppuccin.nixosModules.catppuccin
];
};
archive = nixpkgs.lib.nixosSystem {
diff --git a/machines/test/hardware-configuration.nix b/machines/test/hardware-configuration.nix
new file mode 100644
index 0000000..54932ff
--- /dev/null
+++ b/machines/test/hardware-configuration.nix
@@ -0,0 +1,17 @@
+# Do not modify this file! It was generated by ‘nixos-generate-config’
+# and may be overwritten by future invocations. Please make changes
+# to /etc/nixos/configuration.nix instead.
+{ config, lib, pkgs, modulesPath, ... }:
+
+{
+ imports =
+ [ (modulesPath + "/profiles/qemu-guest.nix")
+ ];
+
+ boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ];
+ boot.initrd.kernelModules = [ ];
+ boot.kernelModules = [ "kvm-intel" ];
+ boot.extraModulePackages = [ ];
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+}
diff --git a/maskiner/archive/configuration.nix b/maskiner/archive/configuration.nix
index 09330ce..c7099db 100644
--- a/maskiner/archive/configuration.nix
+++ b/maskiner/archive/configuration.nix
@@ -35,12 +35,26 @@
security.sudo.wheelNeedsPassword = false;
users.users.root.openssh.authorizedKeys.keys = [
- "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDALsdpwvC0w/Aj+1fWtzJyyWoUrGkdh8o2thVHeQQBNo0D7cmVberYmi4Cv9gWGX6PaElrnOl0KRdGyro2wxOYokSxgk2VgWW67BFITAQAbKyG2NhXXPbhb4jccDo7WH7TtOG8IofuJTPRu1Duda6k4RN0I0CkyAN6LGX+zy49cq0qKf9ijXYhCDYNih3+Fu/ig0aW/SYmsVoUl2VFTWdI5x5/wLvIjTEZhmAtYIeYADaLnom356cFrUysZa++FUujQAz3Ow236BvP95XZdTsqvfWNZFNIpC9VYF72JeIDCs5wDIr0GFmanF2On1nar+jJpoOE8SdHt357p5g/PqXV5TisN2xQRkqVwO9tWtMl4sF84jA4ULnY2gQWv9jErMxymUQ1IwuPUzDDlbRHCtfexAtkBy7wv6xslKAzG1QahvF/btNs5Caj3LN31rgAuxyooCbKGKTeBP3kHPKcz1iupgidfbO/QqVXBRQJTEdGyAKa8hVmLQZZPC/XUhxESAk= fw@fw-nix"
- "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8ku8iCb7tXd/tfxYDW+Tj8K9kpfrYZciYUZ6tBpO80inm4EImtfyEeJTuqDWMKov2BftUKs8brNeTBCXUEvU1P0+cpOP9RtYA5tfBXf3su+iVSswJJStIxNboXHrEGKdJJRNsTv/9agshDSUBy6G5TI1cXhv/updornfA4fwOMqOmtlYEn6XCRnsrO6NBLc/uLckdbF75HOsoLvezRvuqTLjpapjaUKGVPrgNXiclIKHmuOx71kgD4FX3rSz9FgKjnfu3a7DBbrHsf/g+N9PjNF1muN9UOV6nK3WwiO9BMWi7NpAWfzJOeZg9chqzI+U6CcsqYVeESgL41so+dnv3 fw@laptop"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP34dnsZSnWdDvd+3BXDwcw7wP0PjPEx2eCdBQJyGD6O fw@laptop"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII60tdNsG0z9q2jHmoTKvkeLQE6OF0bmTsDX1bpqpoG7 fw@jobb"
];
+ # Restic
+ users.users.restic = {
+ isNormalUser = true;
+ createHome = true;
+ home = "/home/restic";
+ openssh.authorizedKeys.keys = [
+ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP34dnsZSnWdDvd+3BXDwcw7wP0PjPEx2eCdBQJyGD6O fw@laptop"
+ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII60tdNsG0z9q2jHmoTKvkeLQE6OF0bmTsDX1bpqpoG7 fw@jobb"
+ ];
+ };
+
+ # Where repos will live (you can choose a different path/disk)
+ systemd.tmpfiles.rules = [
+ "d /srv/restic 0750 restic restic -"
+ ];
+
networking.firewall.allowedUDPPorts = [
22000
21027
@@ -49,6 +63,7 @@
services = {
openssh = {
enable = true;
+ allowSFTP = true;
};
};
diff --git a/maskiner/core/configuration.nix b/maskiner/core/configuration.nix
index ea0110d..a34a024 100644
--- a/maskiner/core/configuration.nix
+++ b/maskiner/core/configuration.nix
@@ -10,7 +10,7 @@
...
}:
let
- btusb = pkgs.callPackage ../../moduler/btusb.nix { inherit (config.boot.kernelPackages) kernel; };
+ # btusb = pkgs.callPackage ../../moduler/btusb.nix { inherit (config.boot.kernelPackages) kernel; };
in
{
imports = [
@@ -19,7 +19,7 @@ in
../../moduler/base.nix
../../moduler/users.nix
- ../../moduler/git.nix
+ ../../moduler/git.nix
../../moduler/network.nix
../../moduler/programs.nix
../../moduler/system.nix
@@ -34,7 +34,7 @@ in
stylix = {
enable = true;
- base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-latte.yaml";
+ base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
};
programs.ssh.knownHosts = {
@@ -51,7 +51,16 @@ in
home-manager.users.fw = {
imports = [
./../../moduler/home.nix
+ ./../../moduler/programs/waybar
+ inputs.catppuccin.homeModules.catppuccin
];
+ catppuccin = {
+ librewolf = {
+ enable = true;
+ flavor = "latte";
+ accent = "peach";
+ };
+ };
programs.ranger.enable = true;
stylix.targets = {
lazygit.enable = false;
@@ -64,11 +73,11 @@ in
};
boot.kernelPackages = pkgs.linuxPackages_latest;
- boot.extraModulePackages = [
- (btusb.overrideAttrs (_: {
- patches = [ ../../moduler/btusb-add-mt7925.patch ];
- }))
- ];
+ # boot.extraModulePackages = [
+ # (btusb.overrideAttrs (_: {
+ # patches = [ ../../moduler/btusb-add-mt7925.patch ];
+ # }))
+ # ];
networking.hostName = myhostname;
diff --git a/maskiner/node/configuration.nix b/maskiner/node/configuration.nix
index bc46a98..3347c3d 100644
--- a/maskiner/node/configuration.nix
+++ b/maskiner/node/configuration.nix
@@ -8,24 +8,27 @@
myhostname,
...
}:
+let
+ modulesDirectory = ../../moduler;
+in
{
# You can import other NixOS modules here
imports = [
./hardware-configuration.nix
- ../../moduler/base.nix
- ../../moduler/users.nix
- ../../moduler/kitchenowl.nix
- ../../moduler/radicale.nix
- ../../moduler/vaultwarden.nix
- ../../moduler/signal.nix
- ../../moduler/uptime-kuma.nix
- ../../moduler/services/monitoring
- ../../moduler/services/headscale
- ../../moduler/services/mpd
- ../../moduler/services/actual
- ../../moduler/services/forgejo
- # ../../moduler/wastring.nix
- ../../moduler/wedding.nix
+ ( modulesDirectory + /base.nix )
+ ( modulesDirectory + /users.nix )
+ ( modulesDirectory + /kitchenowl.nix )
+ ( modulesDirectory + /radicale.nix )
+ ( modulesDirectory + /vaultwarden.nix )
+ ( modulesDirectory + /signal.nix )
+ ( modulesDirectory + /uptime-kuma.nix )
+ ( modulesDirectory + /wedding.nix )
+
+ ( modulesDirectory + /services/monitoring )
+ ( modulesDirectory + /services/headscale )
+ ( modulesDirectory + /services/mpd )
+ ( modulesDirectory + /services/actual )
+ ( modulesDirectory + /services/forgejo )
];
sops.defaultSopsFile = ../../secrets/sops.yaml;
diff --git a/moduler/dev.nix b/moduler/dev.nix
index 03afa7e..a530c23 100644
--- a/moduler/dev.nix
+++ b/moduler/dev.nix
@@ -24,6 +24,7 @@ in
# Nix
devenv
nixfmt-rfc-style
+ opentofu
# Docker
dive
diff --git a/moduler/hyprland.nix b/moduler/hyprland.nix
index 9c6860d..01b6e59 100644
--- a/moduler/hyprland.nix
+++ b/moduler/hyprland.nix
@@ -12,11 +12,9 @@ in
{
environment.systemPackages = with pkgs; [
swww
- grim
- slurp
- wl-clipboard
swappy
ydotool
+ wl-clipboard
hyprpolkitagent
hyprland-qtutils
waypipe
@@ -28,7 +26,7 @@ in
enable = true;
settings = {
default_session = {
- command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd hyprland";
+ command = "${pkgs.tuigreet}/bin/tuigreet --time --cmd hyprland";
user = "greeter";
};
};
@@ -57,138 +55,6 @@ in
enable = true;
font = lib.mkForce "ComicShannsMono Nerd Font 18";
};
- waybar = {
- enable = true;
- systemd = {
- enable = true;
- };
- settings = {
- mainBar = {
- modules-left = [
- "hyprland/workspaces"
- ];
- modules-right = [
- "tray"
- "clock"
- ];
- "custom/arrow1" = {
- format = "";
-
- };
- tray = {
- format = "{icon}";
- "icon-size" = 14;
- spacing = 5;
- };
-
- clock = {
- format = " {:%c}";
- };
- };
- };
- style = ''
- @define-color bg #eff1f5;
- @define-color fg #4c4f69;
- @define-color lbg #e6e9ef;
- @define-color yellow #df8e1d;
- @define-color lavender #7287fd;
- @define-color peach #fe640b;
- @define-color red #d20f39;
- @define-color green #40a02b;
- @define-color blue #1e66f5;
- @define-color border #dce0e8;
-
- * {
- min-height: 0;
- margin: 0px 0px 0px 0px;
- padding: 0;
- border-radius: 7px;
- font-family: "ComicShannsMono Nerd Font";
- font-size: 14pt;
- font-weight: 700;
- padding-bottom: 0px;
- }
-
- tooltip {
- background: @bg;
- border-radius: 7px;
- border: 2px solid @border;
- }
-
- #window {
- margin: 0px 0px 0px 0px;
- padding-left: 10px;
- padding-right: 7px;
- border-radius: 3px;
- border-color: @lbg;
- background-color: @yellow;
- color: @bg;
- }
-
- window#waybar.empty #window {
- background-color: @bg;
- border-bottom: none;
- border-right: none;
- }
-
- window#waybar {
- background-color: @bg;
- color: @lavender;
- }
-
- /* Workspaces */
- @keyframes button_activate {
- from { opacity: .3 }
- to { opacity: 1.; }
- }
-
- #workspaces {
- margin: 0px 0px 0px 0px;
- border-radius: 3px;
- padding: 1px;
- background-color: @bg;
- color: @bg;
- }
-
- #workspaces button {
- margin: 0px 0px 0px 0px;
- border-radius: 3px;
- padding-left: 3px;
- padding-right: 9px;
- background-color: @bg;
- color: @fg;
- }
-
- #workspaces button.active {
- background-color:@blue;
- color: @bg;
- }
-
- #workspaces button.urgent {
- color: #F38BA8;
- }
-
- #workspaces button:hover {
- border: solid transparent;
- }
- #tray {
- margin: 0px 0px 0px 0px;
- border-radius: 3px;
- padding-left: 10px;
- padding-right: 10px;
- background-color: @bg;
- color: @fg;
- }
- #clock {
- margin: 0px 0px 0px 0px;
- padding-left: 10px;
- padding-right: 10px;
- border-radius: 3px;
- color: @bg;
- background-color: @green;
- }
- '';
- };
};
services = {
cliphist = {
@@ -244,7 +110,7 @@ in
"$mod" = "ALT";
monitor = [
- "desc: ASUSTek COMPUTER INC ASUS PA279CV S4LMTF159462 (DP-1), 3840x2160@60, 0x0, 1.5"
+ "desc: ASUSTek COMPUTER INC ASUS PA279CV S4LMTF159462 (DP-1), 3840x2160@60, 0x0, 1.5, transform, 1"
"desc: ASUSTek COMPUTER INC VG279 JBLMQS021792 (DP-1), 1920x1080@144, 0x0, 1"
"eDP-1, 1920x1080@60, 0x0, 1, transform, 2"
",prefered,auto,1"
@@ -298,36 +164,32 @@ in
};
};
- animations = {
- enabled = false;
+ animations = {
+ enabled = true;
bezier = [
- "linear, 0, 0, 1, 1"
- "md3_standard, 0.2, 0, 0, 1"
- "md3_decel, 0.05, 0.7, 0.1, 1"
- "md3_accel, 0.3, 0, 0.8, 0.15"
- "overshot, 0.05, 0.9, 0.1, 1.1"
- "crazyshot, 0.1, 1.5, 0.76, 0.92"
- "hyprnostretch, 0.05, 0.9, 0.1, 1.0"
- "menu_decel, 0.1, 1, 0, 1"
- "menu_accel, 0.38, 0.04, 1, 0.07"
- "easeInOutCirc, 0.85, 0, 0.15, 1"
- "easeOutCirc, 0, 0.55, 0.45, 1"
- "easeOutExpo, 0.16, 1, 0.3, 1"
- "softAcDecel, 0.26, 0.26, 0.15, 1"
- "md2, 0.4, 0, 0.2, 1"
+ "easeOutQuint,0.23,1,0.32,1"
+ "easeInOutCubic,0.65,0.05,0.36,1"
+ "linear,0,0,1,1"
+ "almostLinear,0.5,0.5,0.75,1.0#fffff"
+ "quick,0.15,0,0.1,1"
];
animation = [
- "windows, 1, 1.2, md3_decel, popin 60%"
- "windowsIn, 1, 1.2, md3_decel, popin 60%"
- "windowsOut, 1, 1.2, md3_accel, popin 60%"
- "border, 1, 2, default"
- "fade, 1, 1.2, md3_decel"
- "layersIn, 1, 1.2, menu_decel, slide"
- "layersOut, 1, 1.2, menu_accel"
- "fadeLayersIn, 1, 1.2, menu_decel"
- "fadeLayersOut, 1, 1.2, menu_accel"
- "workspaces, 1, 2, menu_decel, slide"
- "specialWorkspace, 1, 1.2, md3_decel, slidevert"
+ "global, 1, 10, default"
+ "border, 1, 5.39, easeOutQuint"
+ "windows, 1, 4.79, easeOutQuint"
+ "windowsIn, 1, 4.1, easeOutQuint, popin 87%"
+ "windowsOut, 1, 1.49, linear, popin 87%"
+ "fadeIn, 1, 1.73, almostLinear"
+ "fadeOut, 1, 1.46, almostLinear"
+ "fade, 1, 3.03, quick"
+ "layers, 1, 3.81, easeOutQuint"
+ "layersIn, 1, 4, easeOutQuint, fade"
+ "layersOut, 1, 1.5, linear, fade"
+ "fadeLayersIn, 1, 1.79, almostLinear"
+ "fadeLayersOut, 1, 1.39, almostLinear"
+ "workspaces, 1, 1.94, almostLinear, fade"
+ "workspacesIn, 1, 1.21, almostLinear, fade"
+ "workspacesOut, 1, 1.94, almostLinear, fade"
];
};
@@ -405,8 +267,7 @@ in
"$mod, d, exec, ${pkgs.rofi}/bin/rofi -show drun -p 'Run: '"
# Screencapture
- "$mod, S, exec, ${pkgs.grim}/bin/grim | wl-copy"
- "$mod SHIFT+ALT, S, exec, ${pkgs.grim}/bin/grim -g \"$(slurp)\" ~/$(date +%Y-%m-%d-%H%M%S).png"
+ "$mod SHIFT, s, exec, ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" - | ${pkgs.wl-clipboard}/bin/wl-copy -t image/png"
];
bindm = [
diff --git a/moduler/kitty.nix b/moduler/kitty.nix
index 4e5bfeb..8dbe1ab 100644
--- a/moduler/kitty.nix
+++ b/moduler/kitty.nix
@@ -8,7 +8,8 @@
programs.kitty = {
enable = true;
font = {
- name = "ComicShannsMono Nerd Font";
+ # name = "ComicShannsMono Nerd Font";
+ name = "FiraCode Nerd Font Mono";
size = 14;
};
shellIntegration = {
diff --git a/moduler/lsp.nix b/moduler/lsp.nix
index c052aa8..717df71 100644
--- a/moduler/lsp.nix
+++ b/moduler/lsp.nix
@@ -28,5 +28,6 @@
lua-language-server
marksman
typstfmt
+ tofu-ls
];
}
diff --git a/moduler/programs.nix b/moduler/programs.nix
index 172cb7a..6886ced 100644
--- a/moduler/programs.nix
+++ b/moduler/programs.nix
@@ -4,64 +4,68 @@
inputs,
lib,
config,
- pkgs, myhostname,
+ pkgs,
+ myhostname,
...
-}: {
- services.udev = {
- extraRules = ''
- KERNEL=="ttyACM0", MODE:="666"
- ACTION=="add", KERNEL=="sd[a-e][0-9]", ENV{ID_FS_UUID}=="3039-3932", RUN+="${pkgs.systemd}/bin/systemd-mount --no-block -A -G -o gid=users,fmask=113,dmask=002 /dev/%k /mnt/sdcard"
- ACTION=="add", KERNEL=="sd[a-e]", ENV{ID_FS_UUID}=="66BA-4EBA", RUN+="${pkgs.systemd}/bin/systemd-mount --no-block -A -G -o gid=users,fmask=113,dmask=002 /dev/%k /mnt/kobo"
- '';
- packages = with pkgs; [
- vial
- via
- ];
- };
+}:
+{
+ services.udev = {
+ extraRules = ''
+ KERNEL=="ttyACM0", MODE:="666"
+ ACTION=="add", KERNEL=="sd[a-e][0-9]", ENV{ID_FS_UUID}=="3039-3932", RUN+="${pkgs.systemd}/bin/systemd-mount --no-block -A -G -o gid=users,fmask=113,dmask=002 /dev/%k /mnt/sdcard"
+ ACTION=="add", KERNEL=="sd[a-e]", ENV{ID_FS_UUID}=="66BA-4EBA", RUN+="${pkgs.systemd}/bin/systemd-mount --no-block -A -G -o gid=users,fmask=113,dmask=002 /dev/%k /mnt/kobo"
+ '';
+ packages = with pkgs; [
+ vial
+ via
+ ];
+ };
- environment.systemPackages = with pkgs; [
- # GUI
- feishin
- signal-desktop
- thunderbird
- libreoffice
- discord
- slack
- speedcrunch
- remmina
- vial
- via
- drawio
- freecad-wayland
- kdePackages.okular
- angryipscanner
- # TUI
- mpc
+ environment.systemPackages = with pkgs; [
+ # GUI
+ feishin
+ signal-desktop
+ thunderbird
+ libreoffice
+ discord
+ slack
+ speedcrunch
+ remmina
+ vial
+ via
+ drawio
+ freecad-wayland
+ kdePackages.okular
+ angryipscanner
- # Browsers
- librewolf
- chawan
+ # TUI
+ mpc
+ codex
- # Displaying
- zathura
- feh
- mpv
+ # Browsers
+ librewolf
+ chawan
- # System
- pavucontrol
- pulseaudio
- devour # Swallow windows
- caligula # Burn ISOs
- ptouch-print
+ # Displaying
+ zathura
+ feh
+ mpv
- # Transforms
- yt-dlp
- imagemagick
- pandoc
- pinta
- pastel
- ffmpeg
- darktable
- ];
+ # System
+ pavucontrol
+ pulseaudio
+ devour # Swallow windows
+ caligula # Burn ISOs
+ ptouch-print
+
+ # Transforms
+ yt-dlp
+ imagemagick
+ pandoc
+ pinta
+ pastel
+ ffmpeg
+ darktable
+ ];
}
diff --git a/moduler/programs/waybar/default.nix b/moduler/programs/waybar/default.nix
new file mode 100644
index 0000000..3c18973
--- /dev/null
+++ b/moduler/programs/waybar/default.nix
@@ -0,0 +1,25 @@
+{
+ config,
+ inputs,
+ pkgs,
+ ...
+}:
+
+let
+in
+{
+ programs = {
+ waybar = {
+ enable = true;
+ systemd = {
+ enable = true;
+ };
+ };
+ };
+ xdg.configFile."waybar/config.jsonc".source = ./waybar.jsonc;
+ xdg.configFile."waybar/style.css".source = ./waybar.css;
+ # catppuccin.waybar = {
+ # enable = true;
+ # flavor = "latte";
+ # };
+}
diff --git a/moduler/programs/waybar/waybar.css b/moduler/programs/waybar/waybar.css
new file mode 100644
index 0000000..e22cf61
--- /dev/null
+++ b/moduler/programs/waybar/waybar.css
@@ -0,0 +1,107 @@
+* {
+ /* `otf-font-awesome` is required to be installed for icons */
+ font-family: FiraCode Nerd Font Bold, sans-serif;
+ font-size: 16px;
+ color: #4C4F69; /* Default text color */
+}
+
+window#waybar {
+ background-color: #EFF1F5; /* Catppuccin Base */
+ border-bottom: 3px solid #B2BCC8; /* Catppuccin Crust */
+ color: #4C4F69; /* Default text color */
+ transition-property: background-color;
+ transition-duration: 0.5s;
+}
+
+window#waybar.hidden {
+ opacity: 0.2;
+}
+
+window#waybar.termite {
+ background-color: #D7DBE6; /* Catppuccin Mantle */
+}
+
+window#waybar.chromium {
+ background-color: #B2BCC8; /* Catppuccin Crust */
+ border: none;
+}
+
+button {
+ /* Use box-shadow instead of border so the text isn't offset */
+ box-shadow: inset 0 -3px transparent;
+ /* Avoid rounded borders under each button name */
+ border: none;
+ border-radius: 0;
+ color: #4C4F69; /* Default text color */
+ transition: background-color 0.3s ease, box-shadow 0.3s ease;
+}
+
+/* Hover effect for buttons */
+button:hover {
+ background: inherit;
+ box-shadow: inset 0 -3px #F9E2AF; /* Catppuccin Yellow for hover effect */
+}
+
+/* Workspace button styles */
+#workspaces button {
+ padding: 0 5px;
+ background-color: transparent;
+ color: #4C4F69; /* Default text color */
+ transition: background-color 0.3s ease, box-shadow 0.3s ease;
+}
+
+/* Hover effect for workspace buttons */
+#workspaces button:hover {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+/* Focused or active workspace styles */
+#workspaces button.focused, #workspaces button.active {
+ background-color: #A6E3A1; /* Catppuccin Green for active workspace */
+ box-shadow: inset 0 -3px #76C7E3; /* Catppuccin Sky for focus highlight */
+ color: #4C4F69; /* Default text color */
+}
+
+/* Urgent workspace styles */
+#workspaces button.urgent {
+ background-color: #F28A8C; /* Catppuccin Rose for urgent workspace */
+}
+
+/* Mode (e.g., dark/light mode indicator) */
+#mode {
+ background-color: #A6E3A1; /* Catppuccin Green */
+ box-shadow: inset 0 -3px #F9E2AF; /* Catppuccin Yellow for highlight */
+}
+
+/* Spacing for workspaces and other modules */
+#clock,
+#window,
+#workspaces {
+ margin: 0 4px;
+}
+
+/* If workspaces is the leftmost module, omit left margin */
+.modules-left > widget:first-child > #workspaces {
+ margin-left: 0;
+}
+
+/* If workspaces is the rightmost module, omit right margin */
+.modules-right > widget:last-child > #workspaces {
+ margin-right: 0;
+}
+
+#clock {
+ background-color: #F9E2AF; /* Catppuccin Yellow for clock */
+ color: #4C4F69; /* Default text color */
+ font-family: FiraCode Nerd Font Bold, sans-serif;
+ font-size: 16px;
+ color: #4C4F69; /* Default text color */
+}
+
+/* Keyframes for blinking effect (e.g., battery critical) */
+@keyframes blink {
+ to {
+ background-color: #F9E2AF; /* Catppuccin Yellow */
+ color: #4C4F69; /* Default text color */
+ }
+}
diff --git a/moduler/programs/waybar/waybar.jsonc b/moduler/programs/waybar/waybar.jsonc
new file mode 100644
index 0000000..aa438ec
--- /dev/null
+++ b/moduler/programs/waybar/waybar.jsonc
@@ -0,0 +1,4 @@
+{
+ "modules-left": ["hyprland/workspaces"],
+ "modules-right": ["clock"]
+}
diff --git a/moduler/services/adguardhome/default.nix b/moduler/services/adguardhome/default.nix
new file mode 100644
index 0000000..7956052
--- /dev/null
+++ b/moduler/services/adguardhome/default.nix
@@ -0,0 +1,79 @@
+{
+ lib,
+ config,
+ ...
+}:
+let
+ cfg = config.adguardhome;
+in
+with lib;
+{
+ options = {
+ adguardhome = {
+ enable = mkEnableOption "enables AdGuardHome";
+ port = lib.mkOption {
+ type = lib.types.int;
+ default = 3000;
+ description = "The port that AdGuardHome is served on.";
+ };
+ };
+ };
+
+ config = mkMerge [
+ (mkIf cfg.enable {
+ networking.firewall.allowedTCPPorts = [ 53 cfg.port ];
+ networking.firewall.allowedUDPPorts = [ 53 ];
+ services.adguardhome = {
+ enable = true;
+ settings = {
+ http = {
+ # You can select any ip and port, just make sure to open firewalls where needed
+ address = "0.0.0.0:${cfg.port toString}";
+ };
+ dns = {
+ upstream_dns = [
+ # Example config with quad9
+ "9.9.9.9#dns.quad9.net"
+ "149.112.112.112#dns.quad9.net"
+ # Uncomment the following to use a local DNS service (e.g. Unbound)
+ # Additionally replace the address & port as needed
+ # "127.0.0.1:5335"
+ ];
+ rewrites = [
+ {
+ domain = "macmini.local";
+ answer = "192.168.1.100";
+ }
+ {
+ domain = "centre.local";
+ answer = "192.168.1.227";
+ }
+ ];
+ };
+ filtering = {
+ protection_enabled = true;
+ filtering_enabled = true;
+
+ parental_enabled = false; # Parental control-based DNS requests filtering.
+ safe_search = {
+ enabled = false; # Enforcing "Safe search" option for search engines, when possible.
+ };
+ };
+ # The following notation uses map
+ # to not have to manually create {enabled = true; url = "";} for every filter
+ # This is, however, fully optional
+ # filters =
+ # map
+ # (url: {
+ # enabled = true;
+ # url = url;
+ # })
+ # [
+ # "https://adguardteam.github.io/HostlistsRegistry/assets/filter_9.txt" # The Big List of Hacked Malware Web Sites
+ # "https://adguardteam.github.io/HostlistsRegistry/assets/filter_11.txt" # malicious url blocklist
+ # ];
+ };
+ };
+ })
+ ];
+}
diff --git a/moduler/services/github-runners/default.nix b/moduler/services/github-runners/default.nix
new file mode 100644
index 0000000..9aa163d
--- /dev/null
+++ b/moduler/services/github-runners/default.nix
@@ -0,0 +1,54 @@
+{
+ lib,
+ pkgs,
+ config,
+ ...
+}:
+with lib;
+{
+ options = {
+ mpd = {
+ enable = mkEnableOption "enables MPD";
+ port = lib.mkOption {
+ type = lib.types.int;
+ default = 6600;
+ description = "The port that MPD is served on.";
+ };
+ httpPort = lib.mkOption {
+ type = lib.types.int;
+ default = 8006;
+ description = "The port that MPD is served on.";
+ };
+ musicDir = lib.mkOption {
+ type = lib.types.str;
+ default = "/home/fw/Music";
+ description = "the path to the Music";
+ };
+ };
+ };
+ config = mkMerge [
+ (mkIf config.mpd.enable {
+ services.mpd = {
+ enable = true;
+ user = "fw";
+ group = "users";
+ network = {
+ port = config.mpd.port;
+ listenAddress = "any";
+ };
+ musicDirectory = config.mpd.musicDir;
+ extraConfig = ''
+ audio_output {
+ type "httpd"
+ name "My HTTP Stream"
+ encoder "vorbis" # or "mp3" if you have lame installed
+ port "${toString config.mpd.httpPort}" # default HTTP port
+ bind_to_address "0.0.0.0" # listen on all network interfaces
+ quality "5.0" # Ogg Vorbis quality
+ }
+ '';
+ };
+ })
+ ];
+
+}
diff --git a/moduler/services/headscale/default.nix b/moduler/services/headscale/default.nix
index 1df2a51..9173a2f 100644
--- a/moduler/services/headscale/default.nix
+++ b/moduler/services/headscale/default.nix
@@ -38,10 +38,10 @@ with lib;
logtail.enabled = false;
dns = {
base_domain = config.headscale.baseDomain;
- nameservers.global = [
- "1.1.1.1"
- "8.8.8.8"
- ];
+ nameservers.global = [
+ "1.1.1.1"
+ "8.8.8.8"
+ ];
};
};
};