diff --git a/common/auto-upgrade.nix b/common/auto-upgrade.nix
index 51d9468..f4c30b4 100644
--- a/common/auto-upgrade.nix
+++ b/common/auto-upgrade.nix
@@ -3,11 +3,11 @@
{
system.autoUpgrade = {
enable = true;
- flake = "git+https://git.feal.no/felixalb/nixos-config.git";
+ flake = "git+https://git.feal.no/felixalb/nixos-config.git?ref=nixos-26.05"; # TODO - restore to main
flags = [
# Override nixpkgs (only). Notably does not include home-manager, sops or other utility/application flake inputs.
"--refresh"
- "--override-input" "nixpkgs" "github:NixOS/nixpkgs/nixos-25.11-small"
+ "--override-input" "nixpkgs" "github:NixOS/nixpkgs/nixos-26.05-small"
"--override-input" "nixpkgs-unstable" "github:nixos/nixpkgs/nixos-unstable"
"--no-write-lock-file"
];
diff --git a/common/metrics-exporters.nix b/common/metrics-exporters.nix
index 57fdd24..7566251 100644
--- a/common/metrics-exporters.nix
+++ b/common/metrics-exporters.nix
@@ -17,41 +17,6 @@ in {
'';
};
- services.promtail = {
- enable = true;
- configuration = {
- server = {
- http_listen_port = 28183;
- grpc_listen_port = 0;
- };
- clients = [
- {
- url = "http://${metricsHost}:3100/loki/api/v1/push";
- }
- ];
- scrape_configs = [
- {
- job_name = "systemd-journal";
- journal = {
- max_age = "12h";
- labels = {
- job = "systemd-journal";
- host = config.networking.hostName;
- };
- };
- relabel_configs = [
- {
- source_labels = [ "__journal__systemd_unit" ];
- target_label = "unit";
- }
- {
- source_labels = [ "__journal_priority_keyword" ];
- target_label = "level";
- }
- ];
- }
- ];
- };
- };
+ # TODO: Configure fluent-bit or rsyslog
}
diff --git a/flake.lock b/flake.lock
index cb74fa6..79fa4d1 100644
--- a/flake.lock
+++ b/flake.lock
@@ -31,24 +31,6 @@
"type": "github"
}
},
- "flake-utils": {
- "inputs": {
- "systems": "systems"
- },
- "locked": {
- "lastModified": 1731533236,
- "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- },
"home-manager": {
"inputs": {
"nixpkgs": [
@@ -56,16 +38,16 @@
]
},
"locked": {
- "lastModified": 1778401693,
- "narHash": "sha256-OVHdCqXXUF5UdGkH+FF2ZL06OLZjj2kvP2dIUmzVWoo=",
+ "lastModified": 1779726825,
+ "narHash": "sha256-RUkMrREjKDQrA+dA9+xZviGAxM5W1aVdyOr/bSYpHrE=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "389b83002efc26f1145e89a6a8e6edc5a6435948",
+ "rev": "b179bde238977f7d4454fc770b1a727eaf55111c",
"type": "github"
},
"original": {
"owner": "nix-community",
- "ref": "release-25.11",
+ "ref": "release-26.05",
"repo": "home-manager",
"type": "github"
}
@@ -97,16 +79,16 @@
]
},
"locked": {
- "lastModified": 1764161084,
- "narHash": "sha256-HN84sByg9FhJnojkGGDSrcjcbeioFWoNXfuyYfJ1kBE=",
+ "lastModified": 1779036909,
+ "narHash": "sha256-zXcwYQGCT6pzinK+1dBB2ekTVtfxGZAapb3Evdcu4fY=",
"owner": "nix-darwin",
"repo": "nix-darwin",
- "rev": "e95de00a471d07435e0527ff4db092c84998698e",
+ "rev": "56c666e108467d87d13508936aade6d567f2a501",
"type": "github"
},
"original": {
"owner": "nix-darwin",
- "ref": "nix-darwin-25.11",
+ "ref": "nix-darwin-26.05",
"repo": "nix-darwin",
"type": "github"
}
@@ -114,17 +96,17 @@
"nix-minecraft": {
"inputs": {
"flake-compat": "flake-compat",
- "flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
- ]
+ ],
+ "systems": "systems"
},
"locked": {
- "lastModified": 1764813963,
- "narHash": "sha256-Vs7Mamto+T8r1evk9myHepgHGNJkS2Kr0BF64NIei94=",
+ "lastModified": 1780113881,
+ "narHash": "sha256-AMOOt682Odr4GZwCwZ08/Q/21/Sh3DxfmOAoiQbTKhk=",
"owner": "Infinidoge",
"repo": "nix-minecraft",
- "rev": "491200d6848402bbab1421cccbc15a46f08c7f78",
+ "rev": "d9bd57f218cda7d6aac4b52546240da0df76a1f9",
"type": "github"
},
"original": {
@@ -135,22 +117,23 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1778452785,
- "narHash": "sha256-7zDRz1Jr69CiWDvJSjqIF2/X8wY+d8PACt4xIvesruE=",
+ "lastModified": 1780203844,
+ "narHash": "sha256-K5sT4jTpGs15ADhviMKNBH38REpPf5Q6mM1+N6cArVE=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "9700a8ef2f85813ee04a956ab2747a22d0b67b95",
+ "rev": "b51242d7d43689db2f3be91bd05d5b24fbb469c4",
"type": "github"
},
"original": {
"owner": "NixOS",
- "ref": "nixos-25.11-small",
+ "ref": "nixos-26.05-small",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-2211": {
"locked": {
+ "lastModified": 1658083977,
"narHash": "sha256-yqLXI+viN5+Vx5YpG9gNapKL3/+P6Pkprc36xNdyqSU=",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/34bfa9403e42eece93d1a3740e9d8a02fceafbca.tar.gz"
@@ -162,27 +145,27 @@
},
"nixpkgs-darwin": {
"locked": {
- "lastModified": 1764806471,
- "narHash": "sha256-NsPsz003eWD8wp8vj5BnQzPoDyeQKRUfS2dvan2Y30M=",
+ "lastModified": 1780020239,
+ "narHash": "sha256-ik+V883hTc6GG7TzjxMdhEoMV0hCbQPfsRtNsB1qWUQ=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "6707b1809330d0f912f5813963bb29f6f194ee81",
+ "rev": "c85dc29a9bcafa665b8ce0654ca019cdb05e63c6",
"type": "github"
},
"original": {
"owner": "NixOS",
- "ref": "nixpkgs-25.11-darwin",
+ "ref": "nixpkgs-26.05-darwin",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
- "lastModified": 1777954456,
- "narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=",
+ "lastModified": 1779560665,
+ "narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1",
+ "rev": "64c08a7ca051951c8eae34e3e3cb1e202fe36786",
"type": "github"
},
"original": {
@@ -202,11 +185,11 @@
"uv2nix": "uv2nix"
},
"locked": {
- "lastModified": 1771451240,
- "narHash": "sha256-qA8rm0zxrFBVbleYEOJziggyJtZEu1DFeAo3OAkbmB4=",
+ "lastModified": 1780187278,
+ "narHash": "sha256-vIC3RsPexOT2zcacHBcIQ5CPrPIisSLiMBS6tblGLDw=",
"owner": "pwndbg",
"repo": "pwndbg",
- "rev": "5eb91f443cefb75fae9567aa23931670dc2277a9",
+ "rev": "07a27367b17e2b7172d6c7a2b891e4c5471275b6",
"type": "github"
},
"original": {
@@ -287,11 +270,11 @@
]
},
"locked": {
- "lastModified": 1764483358,
- "narHash": "sha256-EyyvCzXoHrbL467YSsQBTWWg4sR96MH1sPpKoSOelB4=",
+ "lastModified": 1777944972,
+ "narHash": "sha256-VfGRo1qTBKOe3s2gOv8LSoA6Fk19PvBlwQ1ECN0Evn8=",
"owner": "Mic92",
"repo": "sops-nix",
- "rev": "5aca6ff67264321d47856a2ed183729271107c9c",
+ "rev": "c591bf665727040c6cc5cb409079acb22dcce33c",
"type": "github"
},
"original": {
diff --git a/flake.nix b/flake.nix
index 656070c..deb0897 100644
--- a/flake.nix
+++ b/flake.nix
@@ -3,15 +3,15 @@
inputs = {
# Nixpkgs and friends
- nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11-small"; # Remember to update ./common/auto-upgrade.nix
- nixpkgs-darwin.url = "github:NixOS/nixpkgs/nixpkgs-25.11-darwin";
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05-small"; # Remember to update ./common/auto-upgrade.nix
+ nixpkgs-darwin.url = "github:NixOS/nixpkgs/nixpkgs-26.05-darwin";
nixpkgs-2211.url = "https://github.com/NixOS/nixpkgs/archive/34bfa9403e42eece93d1a3740e9d8a02fceafbca.tar.gz"; # old nixpgks for e.g. remmina
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
- nix-darwin.url = "github:nix-darwin/nix-darwin/nix-darwin-25.11";
+ nix-darwin.url = "github:nix-darwin/nix-darwin/nix-darwin-26.05";
nix-darwin.inputs.nixpkgs.follows = "nixpkgs-darwin";
- home-manager.url = "github:nix-community/home-manager/release-25.11";
+ home-manager.url = "github:nix-community/home-manager/release-26.05";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
# Other inputs
diff --git a/home/base.nix b/home/base.nix
index a8e76be..fcb1229 100644
--- a/home/base.nix
+++ b/home/base.nix
@@ -10,7 +10,6 @@
bat
bottom
# ncdu
- neofetch
pwgen
sshfs
sshuttle
diff --git a/home/hypr/default.nix b/home/hypr/default.nix
new file mode 100644
index 0000000..6be1e44
--- /dev/null
+++ b/home/hypr/default.nix
@@ -0,0 +1,47 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+let
+ cfg = config.wayland.windowManager.hyprland;
+in
+{
+ imports = [
+ ./hypridle.nix
+ ./hyprland.nix
+ ./hyprlock.nix
+ ./hyprpaper.nix
+ ./keybinds.nix
+ ];
+
+ config = lib.mkIf cfg.enable {
+ systemd.user.sessionVariables = {
+ NIXOS_OZONE_WL = "1";
+ WLR_NO_HARDWARE_CURSORS = "1";
+ WLR_RENDERER_ALLOW_SOFTWARE = "1";
+ XDG_CURRENT_DESKTOP = "Hyprland";
+ XDG_SESSION_DESKTOP = "Hyprland";
+ XDG_SESSION_TYPE = "wayland";
+ };
+
+ home.packages = with pkgs; [
+ bibata-cursors
+ swaynotificationcenter
+ wl-clipboard
+ ];
+
+ home.pointerCursor = {
+ name = "Bibata-Modern-Ice";
+ package = pkgs.bibata-cursors;
+ size = 24;
+ gtk.enable = true;
+ x11 = {
+ enable = true;
+ defaultCursor = true;
+ };
+ };
+
+ };
+}
diff --git a/home/hypr/hypridle.nix b/home/hypr/hypridle.nix
new file mode 100644
index 0000000..bf17025
--- /dev/null
+++ b/home/hypr/hypridle.nix
@@ -0,0 +1,45 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+let
+ cfg = config.wayland.windowManager.hyprland;
+in
+{
+ config = lib.mkIf cfg.enable {
+ services.hypridle = {
+ enable = true;
+ settings = {
+ general = {
+ ignore_dbus_inhibit = false;
+ lock_cmd = "pidof hyprlock || ${config.programs.hyprlock.package}/bin/hyprlock";
+ before_sleep_cmd = "${pkgs.systemd}/bin/loginctl lock-session";
+ after_sleep_cmd = "${cfg.finalPackage}/bin/hyprctl dispatch dpms on";
+ };
+
+ listener = [
+ {
+ timeout = 8 * 60;
+ on-timeout = "${pkgs.libnotify}/bin/notify-send \"You are idle!\"";
+ }
+ {
+ timeout = 10 * 60;
+ on-timeout = "${config.programs.hyprlock.package}/bin/hyprlock";
+ }
+ {
+ timeout = 15 * 60;
+ on-timeout = "${pkgs.systemd}/bin/systemctl suspend";
+ }
+ ];
+ };
+ };
+
+ # TODO - Remove?
+ systemd.user.services.hypridle = {
+ Unit.After = lib.mkForce "graphical-session.target";
+ Service.Slice = "session.slice";
+ };
+ };
+}
diff --git a/home/hypr/hyprland.nix b/home/hypr/hyprland.nix
new file mode 100644
index 0000000..8c67f22
--- /dev/null
+++ b/home/hypr/hyprland.nix
@@ -0,0 +1,180 @@
+{
+ lib,
+ config,
+ osConfig,
+ ...
+}:
+{
+ wayland.windowManager.hyprland = {
+ systemd.enable = false; # Required for UWSM
+ systemd.enableXdgAutostart = false;
+ configType = "lua";
+
+ settings =
+ let
+ wpDir = "${config.home.homeDirectory}/Pictures/wallpapers";
+ in
+ {
+ on._args = [
+ "hyprland.start"
+ (lib.generators.mkLuaInline (
+ ''
+ function()
+ ''
+ +
+
+ lib.concatMapStringsSep "\n" (cmd: ''hl.exec_cmd("${cmd}")'') (
+ [
+ "swaync"
+ "hyprswitch init --size-factor 5 &"
+ "wl-paste --type text --watch cliphist store #Stores only text data"
+ "wl-paste --type image --watch cliphist store #Stores only image data"
+ ]
+ ++ (
+ {
+ # TODO: the hyprpaper hm-module still generates the old config format, use ipc temporarily
+ "sisko" = [
+ "hyprctl hyprpaper wallpaper 'DP-1, ${wpDir}/Ultrawide_Stray_City.png'"
+ "hyprctl hyprpaper wallpaper 'DP-2, ${wpDir}/cyberpunk-gas-station-1.jpg'"
+ ];
+ "fa-t14-2025" = [
+ "hyprctl hyprpaper wallpaper ', ${wpDir}/mktv-wallpaper-01.png'"
+ ];
+ }
+ ."${osConfig.networking.hostName}"
+ )
+ )
+ + ''
+ end
+ ''
+ ))
+ ];
+
+ monitor = [
+ # Sisko
+ {
+ output = "desc:Philips Consumer Electronics Company 49M2C8900 AU42525000628";
+ mode = "highres@highrr";
+ position = "0x0";
+ scale = "1";
+ supports_hdr = 1;
+ }
+ {
+ output = "desc:LG Electronics LG ULTRAWIDE 407NTABCV312";
+ mode = "highres@highrr";
+ position = "600x-1440";
+ scale = "1";
+ supports_hdr = 1;
+ }
+
+ # fa-t14-2025
+ {
+ output = "desc:Lenovo Group Limited 0x403D";
+ mode = "highres@highrr";
+ position = "0x0";
+ scale = "1";
+ supports_hdr = 1;
+ }
+ {
+ output = "desc:Samsung Electric Company LS32D70xE HK2XC00156";
+ mode = "3840x2160@30.00";
+ position = "-3840x0";
+ scale = "1";
+ }
+ {
+ output = "desc:Samsung Electric Company C24F390 H4ZM501656";
+ mode = "1920x1080@60.00";
+ position = "-5760x0";
+ scale = "1";
+ }
+
+ # Other
+ {
+ output = "";
+ mode = "preferred";
+ position = "auto";
+ scale = "auto";
+ }
+ ];
+
+ config = {
+ general = {
+ gaps_in = 8;
+ gaps_out = 12;
+
+ border_size = 1;
+
+ "col.active_border" = {
+ colors = [
+ "rgba(33ccffee)"
+ "rgba(00ff99ee)"
+ ];
+ angle = 45;
+ };
+ "col.inactive_border" = "rgba(595959aa)";
+
+ resize_on_border = false;
+ allow_tearing = false;
+ layout = "dwindle";
+ };
+
+ decoration = {
+ rounding = 8;
+
+ active_opacity = 1.0;
+ inactive_opacity = 1.0;
+
+ shadow = {
+ enabled = true;
+ range = 4;
+ render_power = 3;
+ color = "rgba(1a1a1aee)";
+ };
+
+ blur = {
+ enabled = true;
+ size = 3;
+ passes = 1;
+
+ vibrancy = 0.1696;
+ };
+ };
+
+ animations.enabled = false; # TODO
+
+ dwindle = {
+ preserve_split = true;
+ };
+
+ master = {
+ new_status = "master";
+ };
+
+ binds = {
+ movefocus_cycles_fullscreen = 1;
+ };
+
+ misc = {
+ force_default_wallpaper = 0;
+ disable_hyprland_logo = true;
+ };
+
+ input = {
+ kb_layout = lib.mkDefault "us";
+ kb_variant = lib.mkDefault "intl";
+ kb_model = "";
+ kb_options = "ctrl:nocaps";
+ kb_rules = "";
+
+ follow_mouse = 1;
+
+ sensitivity = 0;
+
+ touchpad = {
+ natural_scroll = false;
+ };
+ };
+ };
+ };
+ };
+}
diff --git a/home/hypr/hyprlock.nix b/home/hypr/hyprlock.nix
new file mode 100644
index 0000000..85e706d
--- /dev/null
+++ b/home/hypr/hyprlock.nix
@@ -0,0 +1,47 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+let
+ cfg = config.wayland.windowManager.hyprland;
+in
+{
+ config = lib.mkIf cfg.enable {
+ programs.hyprlock = {
+ enable = true;
+ settings = {
+ general = {
+ hide_cursor = true;
+ no_fade_in = false;
+ };
+
+ background = [
+ {
+ path = "screenshot";
+ blur_passes = 3;
+ blur_size = 8;
+ }
+ ];
+
+ input-field = [
+ {
+ size = "200, 50";
+ position = "0, -80";
+ monitor = "";
+ dots_center = true;
+ fade_on_empty = false;
+ font_color = "rgb(202, 211, 245)";
+ inner_color = "rgb(91, 96, 120)";
+ outer_color = "rgb(24, 25, 38)";
+ outline_thickness = 5;
+ placeholder_text = "Password...";
+ shadow_passes = 2;
+ }
+ ];
+
+ };
+ };
+ };
+}
diff --git a/home/hypr/hyprpaper.nix b/home/hypr/hyprpaper.nix
new file mode 100644
index 0000000..8b640b1
--- /dev/null
+++ b/home/hypr/hyprpaper.nix
@@ -0,0 +1,17 @@
+{ config, lib, ... }:
+let
+ cfg = config.wayland.windowManager.hyprland;
+in
+{
+ config = lib.mkIf cfg.enable {
+ services.hyprpaper = {
+ enable = true;
+ settings.ipc = true;
+ };
+
+ systemd.user.services.hyprpaper = {
+ Unit.After = lib.mkForce "graphical-session.target";
+ Service.Slice = "session.slice";
+ };
+ };
+}
diff --git a/home/hypr/keybinds.nix b/home/hypr/keybinds.nix
new file mode 100644
index 0000000..35ec074
--- /dev/null
+++ b/home/hypr/keybinds.nix
@@ -0,0 +1,291 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+let
+ cfg = config.wayland.windowManager.hyprland;
+in
+{
+ config = lib.mkIf cfg.enable {
+ wayland.windowManager.hyprland.settings =
+ let
+ exe = lib.getExe;
+ terminalCommand = "alacritty";
+ resizeAmount = toString 10;
+ in
+ {
+ mod._var = "SUPER";
+
+ # https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h
+ bind =
+ let
+ lua = lib.generators.mkLuaInline;
+ mod = key: args: {
+ _args = [
+ (lua "mod .. \" + ${key}\"")
+ ]
+ ++ args;
+ };
+ in
+ [
+ # Layout actions
+
+ (mod "U" [
+ (lua "hl.dsp.layout(\"togglesplit\")")
+ ])
+
+ (mod "Y" [
+ (lua "hl.dsp.window.float({ action = \"toggle\" })")
+ ])
+
+ (mod "T" [
+ (lua "hl.dsp.window.fullscreen({ action = \"toggle\", mode = \"maximized\" })")
+ ])
+
+ (mod "C" [
+ (lua "hl.dsp.exec_cmd(\"hyprctl reload\")")
+ ])
+
+ # Left click drag
+ (mod "mouse:272" [
+ (lua "hl.dsp.window.drag()")
+ (lua "{ mouse = true }")
+ ])
+
+ # Right click drag
+ (mod "mouse:273" [
+ (lua "hl.dsp.window.resize()")
+ (lua "{ mouse = true }")
+ ])
+
+ # Scroll through workspaces on this monitor
+ (mod "mouse_up" [
+ (lua "hl.dsp.focus({ workspace = \"r+1\" })")
+ ])
+ (mod "mouse_down" [
+ (lua "hl.dsp.focus({ workspace = \"r-1\" })")
+ ])
+
+ # Window actions
+ (mod "W" [
+ (lua "hl.dsp.window.close()")
+ ])
+
+ (mod "SHIFT + W" [
+ (lua "hl.dsp.window.kill()")
+ ])
+
+ # Application launches
+ (mod "RETURN" [
+ (lua "hl.dsp.exec_cmd(\"${terminalCommand}\")")
+ ])
+
+ (mod "SPACE" [
+ (lua "hl.dsp.exec_cmd(\"rofi -show drun\")")
+ ])
+
+ (mod "A" [
+ (lua "hl.dsp.exec_cmd(\"${exe pkgs.pavucontrol}\")")
+ ])
+
+ (mod "B" [
+ (lua "hl.dsp.exec_cmd(\"rofi-rbw\")")
+ ])
+
+ (mod "N" [
+ (lua "hl.dsp.exec_cmd(\"swaync-client -t -sw\")")
+ ])
+
+ (mod "P" [
+ (lua "hl.dsp.exec_cmd(\"${terminalCommand} -e python3\")")
+ ])
+
+ (mod "V" [
+ (lua "hl.dsp.exec_cmd(\"rofi -modi clipboard:${pkgs.cliphist}/bin/cliphist-rofi-img -show clipboard\")")
+ ])
+
+ # Focus workspace
+ (mod "1" [ (lua "hl.dsp.focus({ workspace = 1 })") ])
+ (mod "2" [ (lua "hl.dsp.focus({ workspace = 2 })") ])
+ (mod "3" [ (lua "hl.dsp.focus({ workspace = 3 })") ])
+ (mod "4" [ (lua "hl.dsp.focus({ workspace = 4 })") ])
+ (mod "5" [ (lua "hl.dsp.focus({ workspace = 5 })") ])
+ (mod "6" [ (lua "hl.dsp.focus({ workspace = 6 })") ])
+ (mod "7" [ (lua "hl.dsp.focus({ workspace = 7 })") ])
+ (mod "8" [ (lua "hl.dsp.focus({ workspace = 8 })") ])
+ (mod "9" [ (lua "hl.dsp.focus({ workspace = 9 })") ])
+
+ # Move window to workspace
+ (mod "SHIFT + 1" [ (lua "hl.dsp.window.move({ workspace = 1 })") ])
+ (mod "SHIFT + 2" [ (lua "hl.dsp.window.move({ workspace = 2 })") ])
+ (mod "SHIFT + 3" [ (lua "hl.dsp.window.move({ workspace = 3 })") ])
+ (mod "SHIFT + 4" [ (lua "hl.dsp.window.move({ workspace = 4 })") ])
+ (mod "SHIFT + 5" [ (lua "hl.dsp.window.move({ workspace = 5 })") ])
+ (mod "SHIFT + 6" [ (lua "hl.dsp.window.move({ workspace = 6 })") ])
+ (mod "SHIFT + 7" [ (lua "hl.dsp.window.move({ workspace = 7 })") ])
+ (mod "SHIFT + 8" [ (lua "hl.dsp.window.move({ workspace = 8 })") ])
+ (mod "SHIFT + 9" [ (lua "hl.dsp.window.move({ workspace = 9 })") ])
+
+ # Focus window
+ (mod "LEFT" [ (lua "hl.dsp.focus({ direction=\"left\" })") ])
+ (mod "RIGHT" [ (lua "hl.dsp.focus({ direction=\"right\" })") ])
+ (mod "UP" [ (lua "hl.dsp.focus({ direction=\"up\" })") ])
+ (mod "DOWN" [ (lua "hl.dsp.focus({ direction=\"down\" })") ])
+ (mod "H" [ (lua "hl.dsp.focus({ direction=\"left\" })") ])
+ (mod "L" [ (lua "hl.dsp.focus({ direction=\"right\" })") ])
+ (mod "K" [ (lua "hl.dsp.focus({ direction=\"up\" })") ])
+ (mod "J" [ (lua "hl.dsp.focus({ direction=\"down\" })") ])
+
+ # Move window
+ (mod "SHIFT + LEFT" [ (lua "hl.dsp.window.move({ direction=\"left\" })") ])
+ (mod "SHIFT + RIGHT" [ (lua "hl.dsp.window.move({ direction=\"right\" })") ])
+ (mod "SHIFT + UP" [ (lua "hl.dsp.window.move({ direction=\"up\" })") ])
+ (mod "SHIFT + DOWN" [ (lua "hl.dsp.window.move({ direction=\"down\" })") ])
+ (mod "SHIFT + H" [ (lua "hl.dsp.window.move({ direction=\"left\" })") ])
+ (mod "SHIFT + L" [ (lua "hl.dsp.window.move({ direction=\"right\" })") ])
+ (mod "SHIFT + K" [ (lua "hl.dsp.window.move({ direction=\"up\" })") ])
+ (mod "SHIFT + J" [ (lua "hl.dsp.window.move({ direction=\"down\" })") ])
+
+ # Resize window
+ (mod "CONTROL + LEFT" [
+ (lua "hl.dsp.window.resize({ x = -${resizeAmount}, y = 0, relative = true })")
+ (lua "{ repeating = true }")
+ ])
+ (mod "CONTROL + RIGHT" [
+ (lua "hl.dsp.window.resize({ x = ${resizeAmount}, y = 0, relative = true })")
+ (lua "{ repeating = true }")
+ ])
+ (mod "CONTROL + UP" [
+ (lua "hl.dsp.window.resize({ x = 0, y = -${resizeAmount}, relative = true })")
+ (lua "{ repeating = true }")
+ ])
+ (mod "CONTROL + DOWN" [
+ (lua "hl.dsp.window.resize({ x = 0, y = ${resizeAmount}, relative = true })")
+ (lua "{ repeating = true }")
+ ])
+ (mod "CONTROL + H" [
+ (lua "hl.dsp.window.resize({ x = -${resizeAmount}, y = 0, relative = true })")
+ (lua "{ repeating = true }")
+ ])
+ (mod "CONTROL + L" [
+ (lua "hl.dsp.window.resize({ x = ${resizeAmount}, y = 0, relative = true })")
+ (lua "{ repeating = true }")
+ ])
+ (mod "CONTROL + K" [
+ (lua "hl.dsp.window.resize({ x = 0, y = -${resizeAmount}, relative = true })")
+ (lua "{ repeating = true }")
+ ])
+ (mod "CONTROL + J" [
+ (lua "hl.dsp.window.resize({ x = 0, y = ${resizeAmount}, relative = true })")
+ (lua "{ repeating = true }")
+ ])
+
+ # TODO - replace with hyprlock?
+ (mod "F1" [ (lua "hl.dsp.exec_cmd(\"${pkgs.systemd}/bin/loginctl lock-session\")") ])
+
+ # Screenshots
+ {
+ _args = [
+ (lua "\"PRINT\"")
+ (lua "hl.dsp.exec_cmd(\"${exe pkgs.hyprshot} -m output --clipboard-only\")")
+ ];
+ }
+ {
+ _args = [
+ (lua "\"CTRL + PRINT\"")
+ (lua "hl.dsp.exec_cmd(\"${exe pkgs.hyprshot} -m region --clipboard-only\")")
+ ];
+ }
+
+ {
+ _args = [
+ (lua "\"CTRL + SHIFT + PRINT\"")
+ (lua "hl.dsp.exec_cmd(\"HYPRSHOT_DIR=/home/felixalb/images/screenshots ${exe pkgs.hyprshot} -m region \")")
+ ];
+ }
+
+ # Media controls
+ {
+ _args = [
+ (lua "\"XF86AudioPlay\"")
+ (lua "hl.dsp.exec_cmd(\"${exe pkgs.playerctl} play-pause\")")
+ (lua "{ locked = true }")
+ ];
+ }
+
+ {
+ _args = [
+ (lua "\"XF86AudioPause\"")
+ (lua "hl.dsp.exec_cmd(\"${exe pkgs.playerctl} play-pause\")")
+ (lua "{ locked = true }")
+ ];
+ }
+
+ {
+ _args = [
+ (lua "\"XF86AudioPrev\"")
+ (lua "hl.dsp.exec_cmd(\"${exe pkgs.playerctl} previous\")")
+ (lua "{ locked = true }")
+ ];
+ }
+
+ {
+ _args = [
+ (lua "\"XF86AudioNext\"")
+ (lua "hl.dsp.exec_cmd(\"${exe pkgs.playerctl} next\")")
+ (lua "{ locked = true }")
+ ];
+ }
+
+ {
+ _args = [
+ (lua "\"XF86AudioMute\"")
+ (lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle\")")
+ (lua "{ locked = true, repeating = true }")
+ ];
+ }
+
+ {
+ _args = [
+ (lua "\"XF86AudioMicMute\"")
+ (lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle\")")
+ (lua "{ locked = true, repeating = true }")
+ ];
+ }
+
+ {
+ _args = [
+ (lua "\"XF86AudioLowerVolume\"")
+ (lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-\")")
+ (lua "{ locked = true, repeating = true }")
+ ];
+ }
+ {
+ _args = [
+ (lua "\"XF86AudioRaiseVolume\"")
+ (lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+\")")
+ (lua "{ locked = true, repeating = true }")
+ ];
+ }
+
+ # Laptop controls
+ {
+ _args = [
+ (lua "\"XF86MonBrightnessUp\"")
+ (lua "hl.dsp.exec_cmd(\"${exe pkgs.brightnessctl} s 10%+\")")
+ (lua "{ locked = true, repeating = true }")
+ ];
+ }
+ {
+ _args = [
+ (lua "\"XF86MonBrightnessDown\"")
+ (lua "hl.dsp.exec_cmd(\"${exe pkgs.brightnessctl} s 10%-\")")
+ (lua "{ locked = true, repeating = true }")
+ ];
+ }
+ ];
+ };
+ };
+}
diff --git a/home/neovim.nix b/home/neovim.nix
index 6ae0967..03056fe 100644
--- a/home/neovim.nix
+++ b/home/neovim.nix
@@ -24,16 +24,19 @@ in {
nvim-treesitter
coc-css
- coc-go
coc-html
coc-json
coc-nvim
vim-nix
vim-puppet
+
+ go-nvim
];
withNodeJs = true;
+ withPython3 = true;
+ withRuby = false;
extraConfig = ''
let mapleader = ','
diff --git a/home/waybar.nix b/home/waybar.nix
new file mode 100644
index 0000000..15dac7b
--- /dev/null
+++ b/home/waybar.nix
@@ -0,0 +1,264 @@
+{ config, lib, ... }:
+let
+ cfg = config.programs.waybar;
+ cfgs = cfg.settings.mainBar;
+in
+{
+ programs.waybar = {
+ systemd.enable = true;
+
+ settings = {
+ mainBar = {
+ layer = "top";
+ position = "top";
+ height = 26;
+
+ modules-left = [ "hyprland/workspaces" ];
+ modules-center = [ "hyprland/window" ];
+ modules-right = [
+ "tray"
+ "network"
+ "pulseaudio"
+ "battery"
+ "clock#date"
+ "clock"
+ ];
+
+ "hyprland/workspaces" = {
+ persistent-workspaces = {
+ "*" = 8;
+ };
+ };
+
+ "hyprland/window" = {
+ "format" = "{initialTitle}";
+ };
+
+ tray = {
+ spacing = 10;
+ };
+
+ clock = {
+ "tooltip-format" = "{:%Y %B}\n{calendar}";
+ format = " {:%H:%M:%S}";
+ "format-alt" = " {:%Y-%m-%d}";
+ interval = 1;
+ };
+
+ "clock#date" = {
+ format = " {:%d.%m.%Y}";
+ "tooltip-format" = "{:%Y %B}\n{calendar}";
+ };
+
+ "battery" = {
+ "states" = {
+ "warning" = 30;
+ "critical" = 15;
+ };
+ "format" = "{icon} {capacity}%";
+ "format-charging" = " {capacity}%";
+ "format-plugged" = " {capacity}%";
+ "format-icons" = [
+ ""
+ ""
+ ""
+ ""
+ ""
+ ];
+ "on-click" = "ags -t quicksettings";
+ };
+ "pulseaudio" = {
+ "format" = "{icon} {volume}% {format_source}";
+ "format-bluetooth" = " {icon} {volume}% {format_source}";
+ "format-bluetooth-muted" = " {icon} {format_source}";
+ "format-muted" = " {format_source}";
+ "format-source" = "";
+ "format-source-muted" = "";
+ "format-icons" = {
+ "default" = [
+ ""
+ ""
+ ""
+ ];
+ };
+ "on-click" = "pavucontrol";
+ };
+ "network" = {
+ "format-wifi" = " {essid}";
+ "format-ethernet" = "⬇{bandwidthDownBytes} ⬆{bandwidthUpBytes}";
+ "interval" = 3;
+ "format-linked" = "{ifname} (No IP) ";
+ "format" = "";
+ "format-disconnected" = "";
+ "on-click" = "alacritty -e nmtui";
+ "tooltip-format" = " {bandwidthUpBits} {bandwidthDownBits}\n{ifname}\n{ipaddr}/{cidr}\n";
+ "tooltip-format-wifi" =
+ " {essid} {frequency}MHz\nStrength: {signaldBm}dBm ({signalStrength}%)\nIP: {ipaddr}/{cidr}\n {bandwidthUpBits} {bandwidthDownBits}";
+ "min-length" = 10;
+ "max-length" = 17;
+ };
+ };
+ };
+
+ style =
+ let
+ c = config.colors.defaultColorSet;
+ in
+ ''
+ /*
+ *
+ * Catppuccin Mocha palette
+ * Maintainer: rubyowo
+ *
+ */
+
+ @define-color background #1e1e2e;
+ @define-color foreground #cdd6f4;
+ @define-color mantle #181825;
+ @define-color crust #11111b;
+
+ @define-color subtext0 #a6adc8;
+ @define-color subtext1 #bac2de;
+
+ @define-color surface0 #313244;
+ @define-color surface1 #45475a;
+ @define-color surface2 #585b70;
+
+ @define-color overlay0 #6c7086;
+ @define-color overlay1 #7f849c;
+ @define-color overlay2 #9399b2;
+
+ @define-color blue #89b4fa;
+ @define-color lavender #b4befe;
+ @define-color sapphire #74c7ec;
+ @define-color sky #89dceb;
+ @define-color teal #94e2d5;
+ @define-color green #a6e3a1;
+ @define-color yellow #f9e2af;
+ @define-color peach #fab387;
+ @define-color maroon #eba0ac;
+ @define-color red #f38ba8;
+ @define-color mauve #cba6f7;
+ @define-color pink #f5c2e7;
+ @define-color flamingo #f2cdcd;
+ @define-color rosewater #f5e0dc;
+
+ * {
+ font-family: "Hack Nerd Font";
+ font-size: 14px;
+ min-height: 0;
+ font-weight: normal;
+ }
+
+ window#waybar {
+ background: transparent;
+ background-color: @background;
+ color: @foreground;
+ transition-property: background-color;
+ transition-duration: 0.1s;
+ }
+
+ #window {
+ margin: 2;
+ padding-left: 8;
+ padding-right: 8;
+ }
+
+ button {
+ box-shadow: inset 0 -3px transparent;
+ border: none;
+ border-radius: 0;
+ }
+
+ button:hover {
+ background: inherit;
+ border-top: 2px solid @hover;
+ }
+
+ #workspaces button {
+ padding: 0 4px;
+ color: gray;
+ font-weight: 300;
+ }
+
+ #workspaces button.empty {
+ color: #404040;
+ font-weight: 100;
+ }
+
+ #workspaces button.active {
+ background-color: rgba(0, 0, 0, 0.3);
+ color: white;
+ border-top: 2px solid @blue;
+ }
+
+ #workspaces button.urgent {
+ background-color: #eb4d4b;
+ }
+
+ #pulseaudio,
+ #clock,
+ #battery,
+ #cpu,
+ #memory,
+ #disk,
+ #temperature,
+ #backlight,
+ #wireplumber,
+ #tray,
+ #mode,
+ #scratchpad {
+ margin-left: 4px;
+ margin-right: 4px;
+ padding-left: 4px;
+ padding-right: 4px;
+ }
+
+ #clock {
+ color: @maroon;
+ border-bottom: 2px solid @maroon;
+ }
+
+ #clock.date {
+ color: @mauve;
+ border-bottom: 2px solid @mauve;
+ }
+
+ #pulseaudio {
+ color: @blue;
+ border-bottom: 2px solid @blue;
+ }
+
+ #network {
+ color: @yellow;
+ border-bottom: 2px solid @yellow;
+ }
+
+ #idle_inhibitor {
+ margin-right: 12px;
+ color: #7cb342;
+ }
+
+ #idle_inhibitor.activated {
+ color: @red;
+ }
+
+ #battery.charging,
+ #battery.plugged {
+ color: @green;
+ border-bottom: 2px solid @green;
+ }
+
+ /* If workspaces is the leftmost module, omit left margin */
+ .modules-left>widget:first-child>#workspaces {
+ margin-left: 0;
+ }
+ '';
+ };
+
+ systemd.user.services.waybar = lib.mkIf (cfg.enable && cfg.systemd.enable) {
+ Service.Environment = [
+ "DISPLAY=:0"
+ ];
+ };
+}
diff --git a/hosts/challenger/configuration.nix b/hosts/challenger/configuration.nix
index e48a31a..32c72ee 100644
--- a/hosts/challenger/configuration.nix
+++ b/hosts/challenger/configuration.nix
@@ -49,13 +49,23 @@
security.polkit.enable = true; # Required for nextcloud
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
- "nvidia-x11"
- "nvidia-settings"
+ "nvidia-kernel-modules"
+ "nvidia-settings"
+ "nvidia-x11"
];
hardware.nvidia = {
modesetting.enable = true;
open = false;
+ # https://github.com/sircam-html/nixos-conf/blob/main/guides/nvidia-nixos-guide.md
+ package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
+ version = "580.142";
+ sha256_64bit = "sha256-IJFfzz/+icNVDPk7YKBKKFRTFQ2S4kaOGRGkNiBEdWM=";
+ sha256_aarch64 = "sha256-0000000000000000000000000000000000000000000=";
+ openSha256 = "sha256-0000000000000000000000000000000000000000000=";
+ settingsSha256 = "sha256-BnrIlj5AvXTfqg/qcBt2OS9bTDDZd3uhf5jqOtTMTQM=";
+ persistencedSha256 = "sha256-0000000000000000000000000000000000000000000=";
+ };
};
hardware.graphics.enable = true;
diff --git a/hosts/challenger/exports.nix b/hosts/challenger/exports.nix
index 6ca446c..dc1e17e 100644
--- a/hosts/challenger/exports.nix
+++ b/hosts/challenger/exports.nix
@@ -4,6 +4,7 @@
"/export/riker-backup" = {
device = "/tank/backup/riker";
options = [ "bind" ];
+ fsType = "none";
};
};
diff --git a/hosts/challenger/filesystems.nix b/hosts/challenger/filesystems.nix
index a4c3889..c7f2483 100644
--- a/hosts/challenger/filesystems.nix
+++ b/hosts/challenger/filesystems.nix
@@ -9,6 +9,7 @@
zfs = {
extraPools = [ "tank" ];
requestEncryptionCredentials = false;
+ forceImportRoot = false;
};
supportedFilesystems = [ "zfs" ];
};
diff --git a/hosts/challenger/services/frigate.nix b/hosts/challenger/services/frigate.nix
index ab07f96..b8c3298 100644
--- a/hosts/challenger/services/frigate.nix
+++ b/hosts/challenger/services/frigate.nix
@@ -5,6 +5,7 @@
device = "/tank/nvr/frigate";
depends = [ "/tank/nvr/frigate" ];
options = [ "bind" ];
+ fsType = "none";
};
};
diff --git a/hosts/challenger/services/nextcloud.nix b/hosts/challenger/services/nextcloud.nix
index 73af9ad..62be5bb 100644
--- a/hosts/challenger/services/nextcloud.nix
+++ b/hosts/challenger/services/nextcloud.nix
@@ -5,7 +5,7 @@ let
in {
services.nextcloud = {
enable = true;
- package = pkgs.nextcloud32;
+ package = pkgs.nextcloud33;
inherit hostName;
home = "/tank/nextcloud";
https = true;
@@ -75,7 +75,7 @@ in {
environment.systemPackages = [
cfg.occ # "occ CMD" in the docs -> "sudo -u nextcloud nextcloud-occ CMD"
- pkgs.nodejs_20 # For Recognize; Put /run/current-system/sw/bin/node in the "node_binary" field in the web UI -> Memories
+ pkgs.nodejs # For Recognize; Put /run/current-system/sw/bin/node in the "node_binary" field in the web UI -> Memories
];
sops.secrets."nextcloud/adminpass" = {
diff --git a/hosts/defiant/filesystems.nix b/hosts/defiant/filesystems.nix
index e355fe1..4081db1 100644
--- a/hosts/defiant/filesystems.nix
+++ b/hosts/defiant/filesystems.nix
@@ -3,7 +3,11 @@
# Boot drives are defined in ./hardware-configuration.nix
boot = {
- zfs.extraPools = [ "tank" ];
+ zfs = {
+ extraPools = [ "tank" ];
+ forceImportRoot = false;
+ };
+
supportedFilesystems = [ "zfs" ];
};
services.prometheus.exporters.zfs.enable = true;
diff --git a/hosts/defiant/libvirt.nix b/hosts/defiant/libvirt.nix
index d69d1ce..3d6ee80 100644
--- a/hosts/defiant/libvirt.nix
+++ b/hosts/defiant/libvirt.nix
@@ -11,6 +11,7 @@
fileSystems."/var/lib/libvirt/images" = {
device = "/tank/iso";
options = [ "bind" ];
+ fsType = "none";
};
# On a gui-enabled machine, connect with:
diff --git a/hosts/defiant/services/gitea.nix b/hosts/defiant/services/gitea.nix
index 4301876..6bd7382 100644
--- a/hosts/defiant/services/gitea.nix
+++ b/hosts/defiant/services/gitea.nix
@@ -44,7 +44,7 @@ in {
ui = {
THEMES="gitea,arc-green,nord";
- #DEFAULT_THEME="nord";
+ DEFAULT_THEME="nord";
};
};
diff --git a/hosts/defiant/services/monitoring/grafana.nix b/hosts/defiant/services/monitoring/grafana.nix
index 6c61b0c..cb8d5cd 100644
--- a/hosts/defiant/services/monitoring/grafana.nix
+++ b/hosts/defiant/services/monitoring/grafana.nix
@@ -9,10 +9,15 @@ in {
# TODO: Migrate sqlite to postgres
- settings.server = {
- domain = "grafana.home.feal.no";
- http_port = 2342;
- http_addr = "127.0.0.1";
+ settings = {
+ server = {
+ domain = "grafana.home.feal.no";
+ http_port = 2342;
+ http_addr = "127.0.0.1";
+ };
+ security = {
+ secret_key = "SW2YcwTIb9zpOOhoPsMm"; # TODO - Rotate
+ };
};
provision = {
diff --git a/hosts/defiant/services/monitoring/snmp-exporter.nix b/hosts/defiant/services/monitoring/snmp-exporter.nix
index e68ae2f..7b20e65 100644
--- a/hosts/defiant/services/monitoring/snmp-exporter.nix
+++ b/hosts/defiant/services/monitoring/snmp-exporter.nix
@@ -1,12 +1,13 @@
{ config, pkgs, ... }:
{
- services.prometheus.exporters.snmp = {
- enable = true;
- configurationPath = ./snmp-exporter-conf.yml;
- # snmp.yml is built from
- # https://github.com/prometheus/snmp_exporter/blob/main/snmp.yml
- # and
- # https://global.download.synology.com/download/Document/Software/DeveloperGuide/Firmware/DSM/All/enu/Synology_DiskStation_MIB_Guide.pdf
- };
+ # TODO - Fix. Broken in 26.05
+ # services.prometheus.exporters.snmp = {
+ # enable = true;
+ # configurationPath = ./snmp-exporter-conf.yml;
+ # # snmp.yml is built from
+ # # https://github.com/prometheus/snmp_exporter/blob/main/snmp.yml
+ # # and
+ # # https://global.download.synology.com/download/Document/Software/DeveloperGuide/Firmware/DSM/All/enu/Synology_DiskStation_MIB_Guide.pdf
+ # };
}
diff --git a/hosts/defiant/services/pihole.nix b/hosts/defiant/services/pihole.nix
index 66a6ca2..21a0ad7 100644
--- a/hosts/defiant/services/pihole.nix
+++ b/hosts/defiant/services/pihole.nix
@@ -4,7 +4,7 @@ let
dnsHost = "192.168.10.175";
webuiListen = "127.0.1.2:5053";
in {
- # Flame - Homelab dashboard/linktree
+ # Pihole - Ad-blocking DNS recursor and authoritative DNS/DHCP
virtualisation.oci-containers.containers = {
pihole = {
image = "pihole/pihole";
diff --git a/hosts/defiant/services/wireguard.nix b/hosts/defiant/services/wireguard.nix
index e0886e9..9098109 100644
--- a/hosts/defiant/services/wireguard.nix
+++ b/hosts/defiant/services/wireguard.nix
@@ -16,10 +16,10 @@ in {
privateKeyFile = "/etc/wireguard/defiant.private";
postSetup = ''
- ${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -d 192.168.10.0/24 -o eth0 -j MASQUERADE
+ ${pkgs.iptables}/bin/iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -d 192.168.10.0/24 -o enp3s0 -j MASQUERADE
'';
postShutdown = ''
- ${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -s 10.100.0.0/24 -d 192.168.10.0/24 -o eth0 -j MASQUERADE
+ ${pkgs.iptables}/bin/iptables -t nat -D POSTROUTING -s 10.100.0.0/24 -d 192.168.10.0/24 -o enp3s0 -j MASQUERADE
'';
peers = (import ../../../common/wireguard-peers.nix);
diff --git a/hosts/fa-t14-2025/configuration.nix b/hosts/fa-t14-2025/configuration.nix
index 72dd41e..5274433 100644
--- a/hosts/fa-t14-2025/configuration.nix
+++ b/hosts/fa-t14-2025/configuration.nix
@@ -1,12 +1,16 @@
-{ config, pkgs, lib, ... }:
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
{
- imports =
- [
- ../../base.nix
- ./hardware-configuration.nix
+ imports = [
+ ../../base.nix
+ ./hardware-configuration.nix
- ./desktop.nix
+ ./desktop.nix
];
networking = {
@@ -49,10 +53,13 @@
console.keyMap = "no";
nixpkgs.config = {
- allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
- "securecrt"
- "securefx"
- ];
+ allowUnfreePredicate =
+ pkg:
+ builtins.elem (lib.getName pkg) [
+ "microsoft-edge"
+ "securecrt"
+ "securefx"
+ ];
};
system.stateVersion = "25.05";
diff --git a/hosts/fa-t14-2025/desktop.nix b/hosts/fa-t14-2025/desktop.nix
index 69ed1d4..2922aec 100644
--- a/hosts/fa-t14-2025/desktop.nix
+++ b/hosts/fa-t14-2025/desktop.nix
@@ -1,4 +1,9 @@
-{ config, pkgs, lib, ... }:
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
{
hardware.graphics.enable = true;
services.xserver = {
@@ -12,7 +17,9 @@
services.gnome.gnome-keyring.enable = true;
programs.hyprland = {
+ # See configuration (through home-manager) in home/hypr
enable = true;
+ withUWSM = true;
xwayland.enable = true;
};
diff --git a/hosts/fa-t14-2025/home.nix b/hosts/fa-t14-2025/home.nix
index 703d79e..89b9b85 100644
--- a/hosts/fa-t14-2025/home.nix
+++ b/hosts/fa-t14-2025/home.nix
@@ -1,10 +1,13 @@
{ pkgs, lib, ... }:
let
emailAddress = "felix.albrigtsen@mktv.no";
-in {
+in
+{
imports = [
./../../home/base.nix
./../../home/alacritty.nix
+ ./../../home/waybar.nix
+ ./../../home/hypr
];
home.packages = with pkgs; [
@@ -19,7 +22,9 @@ in {
iperf3
jq
libreoffice
+ microsoft-edge
mpv
+ nixpkgs-2211.remmina
oauth2ms
oldssh
openssl
@@ -29,43 +34,42 @@ in {
traceroute
virt-manager
w3m
- nixpkgs-2211.remmina
-
- unstable.microsoft-edge
- # (unstable.microsoft-edge.overrideAttrs ({ installPhase ? "", ... }: {
- # installPhase = installPhase + ''
- # ln -s $out/bin/microsoft-edge $out/bin/microsoft-edge-stable
- # '';
- # }))
# Window Manager Extras
- bibata-cursors
brightnessctl
cliphist
- hyprcursor
- hypridle
- hyprlock
- hyprpaper
- hyprshot
nautilus
rofi-rbw-wayland
swaynotificationcenter
- waybar
wl-clipboard
- (python312.withPackages (ps: with ps; [
- numpy
- pycryptodome
- requests
- ]))
+ (python312.withPackages (
+ ps: with ps; [
+ numpy
+ pycryptodome
+ requests
+ ]
+ ))
];
+ wayland.windowManager.hyprland = {
+ enable = true;
+ # Override settings from home/hypr/hyprland.nix
+ settings.config.input = {
+ kb_layout = "no";
+ kb_variant = "";
+ };
+ };
+
programs = {
aerc = {
enable = true;
package = pkgs.aerc;
};
- firefox.enable = true;
+ firefox = {
+ enable = true;
+ configPath = ".mozilla/firefox"; # Old default before 26.05
+ };
git.settings.user.email = emailAddress;
rbw = {
enable = true;
@@ -73,7 +77,7 @@ in {
base_url = "https://vault.mktv.no";
email = emailAddress;
pinentry = pkgs.pinentry-rofi;
- lock_timeout = 60*60*8;
+ lock_timeout = 60 * 60 * 8;
};
};
rofi = {
@@ -81,10 +85,12 @@ in {
# theme = "iggy";
theme = "Arc-Dark";
};
+ waybar.enable = true;
zsh = {
shellAliases = {
"kssh" = "ssh -t controlnode ssh";
- "ossh" = "oldssh -oHostKeyAlgorithms=+ssh-dss -oCiphers=+aes256-cbc -oKexAlgorithms=+diffie-hellman-group14-sha1";
+ "ossh" =
+ "oldssh -oHostKeyAlgorithms=+ssh-dss -oCiphers=+aes256-cbc -oKexAlgorithms=+diffie-hellman-group14-sha1";
"rebuild" = "sudo nixos-rebuild switch --flake /config";
};
prezto.pmodules = [ "ssh" ];
diff --git a/hosts/sisko/configuration.nix b/hosts/sisko/configuration.nix
index 5ad6a51..a30e1c5 100644
--- a/hosts/sisko/configuration.nix
+++ b/hosts/sisko/configuration.nix
@@ -1,14 +1,13 @@
{ config, pkgs, lib, ... }:
{
- imports =
- [
- ../../base.nix
- ../../common/metrics-exporters.nix
- ./hardware-configuration.nix
- ./desktop.nix
+ imports = [
+ ../../base.nix
+ ../../common/metrics-exporters.nix
+ ./hardware-configuration.nix
];
+ # Networking
networking = {
hostName = "sisko";
# networkmanager.enable = true;
@@ -23,11 +22,25 @@
};
hostId = "b716d781";
};
-
hardware.bluetooth.enable = true;
+
+ # Video
+ hardware.graphics = {
+ enable = true;
+ enable32Bit = true;
+ };
+ hardware.amdgpu.opencl.enable = true;
+
+ # Audio
+ services.pipewire = {
+ enable = true;
+ alsa.enable = true;
+ pulse.enable = true;
+ jack.enable = true;
+ };
+
+ # Other hardware / devices
hardware.rtl-sdr.enable = true;
- sops.defaultSopsFile = ../../secrets/sisko/sisko.yaml;
- environment.variables = { EDITOR = "vim"; };
users.users.felixalb.extraGroups = [
"dialout"
@@ -36,6 +49,32 @@
"plugdev"
];
+ # Desktop
+ programs.hyprland = {
+ # See configuration (through home-manager) in home/hypr
+ enable = true;
+ withUWSM = true;
+ };
+ services.displayManager.ly.enable = true;
+ services.xserver.enable = true;
+ services.xserver.desktopManager.xfce.enable = true;
+
+ fonts = {
+ fontDir.enable = true;
+ packages = with pkgs; [
+ fira-code
+ font-awesome
+ hack-font
+ nerd-fonts.hack
+ noto-fonts
+ noto-fonts-cjk-sans
+ noto-fonts-color-emoji
+ ];
+ };
+
+
+ # Programs
+ # TODO - Move to Home-Manager
programs = {
alvr = {
enable = true;
@@ -58,7 +97,12 @@
virt-manager.enable = true;
};
+ environment.variables = {
+ SSH_AUTH_SOCK = "/run/user/${toString config.users.users.felixalb.uid}/keyring/ssh";
+ EDITOR = "vim";
+ };
+ # Virtualization
virtualisation = {
libvirtd.enable = true;
spiceUSBRedirection.enable = true;
@@ -71,6 +115,7 @@
virtualisation.docker.enable = true;
virtualisation.oci-containers.backend = "docker";
+ # Nix / meta
nixpkgs.config = {
allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
"discord"
@@ -85,6 +130,7 @@
rocmSupport = true;
};
+ sops.defaultSopsFile = ../../secrets/sisko/sisko.yaml;
services.fwupd.enable = true;
system.stateVersion = "24.11";
}
diff --git a/hosts/sisko/desktop.nix b/hosts/sisko/desktop.nix
deleted file mode 100644
index 6ed3c66..0000000
--- a/hosts/sisko/desktop.nix
+++ /dev/null
@@ -1,70 +0,0 @@
-{ config, pkgs, lib, ... }:
-{
- # Video
- hardware.graphics = {
- enable = true;
- enable32Bit = true;
- };
- hardware.amdgpu.opencl.enable = true;
- services.displayManager.ly.enable = true;
- services.xserver.enable = true;
-
- services.xserver.desktopManager.xfce.enable = true;
-
- programs.hyprland = {
- enable = true;
- xwayland.enable = true;
- };
-
- # Audio
- services.pipewire = {
- enable = true;
- alsa.enable = true;
- pulse.enable = true;
- jack.enable = true;
- };
-
- # Misc
- fonts = {
- fontDir.enable = true;
- packages = with pkgs; [
- fira-code
- font-awesome
- hack-font
- nerd-fonts.hack
- noto-fonts
- noto-fonts-cjk-sans
- noto-fonts-color-emoji
- ];
- };
-
- environment.sessionVariables = {
- NIXOS_OZONE_WL = "1";
- SSH_AUTH_SOCK = "/run/user/${toString config.users.users.felixalb.uid}/keyring/ssh";
- };
-
- services.gnome.gnome-keyring.enable = true;
-
- # Dark mode
- home-manager.users.felixalb = {
- dconf.settings = {
- "org/gnome/desktop/interface" = {
- color-scheme = "prefer-dark";
- };
- };
-
- gtk = {
- enable = true;
- theme = {
- name = "Adwaita-dark";
- package = pkgs.gnome-themes-extra;
- };
- };
- };
-
- qt = {
- enable = true;
- platformTheme = "gnome";
- style = "adwaita-dark";
- };
-}
diff --git a/hosts/sisko/home.nix b/hosts/sisko/home.nix
index 09e08db..ee3192f 100644
--- a/hosts/sisko/home.nix
+++ b/hosts/sisko/home.nix
@@ -4,8 +4,12 @@
imports = [
./../../home/base.nix
./../../home/alacritty.nix
+ ./../../home/hypr/default.nix
+ ./../../home/waybar.nix
];
+ wayland.windowManager.hyprland.enable = true;
+
home.packages = with pkgs; [
# GUI Applications
cantata
@@ -41,19 +45,10 @@
snicat
# Window Manager Extras
- bibata-cursors
cliphist
- hyprcursor
- hypridle
- hyprlock
- hyprpaper
- hyprshot
nautilus
networkmanager
rofi-rbw-wayland
- swaynotificationcenter
- waybar
- wl-clipboard
# Misc tools
abcde
@@ -95,7 +90,7 @@
rbw = {
enable = true;
settings = {
- base_url = "https://pw.feal.no";
+ base_url = "https://pw.home.feal.no";
email = "felix@albrigtsen.it";
pinentry = pkgs.pinentry-gnome3;
};
@@ -104,6 +99,7 @@
enable = true;
theme = "iggy";
};
+ waybar.enable = true;
zsh = {
shellAliases."rebuild" = "sudo nixos-rebuild switch --flake /config";
prezto.pmodules = [ "ssh" ];
@@ -111,6 +107,8 @@
};
services = {
+ gnome-keyring.enable = true;
+
mpd = let
home = config.home.homeDirectory;
in {
@@ -127,17 +125,29 @@
};
};
- home.pointerCursor = {
- name = "Bibata-Modern-Ice";
- package = pkgs.bibata-cursors;
- size = 24;
- gtk.enable = true;
- x11 = {
- enable = true;
- defaultCursor = true;
+
+ # Dark mode
+ dconf.settings = {
+ "org/gnome/desktop/interface" = {
+ color-scheme = "prefer-dark";
};
};
+ gtk = {
+ enable = true;
+ theme = {
+ name = "Adwaita-dark";
+ package = pkgs.gnome-themes-extra;
+ };
+ gtk4.theme = config.gtk.theme;
+ };
+
+ qt = {
+ enable = true;
+ platformTheme.name = "adwaita";
+ style.name = "adwaita-dark";
+ };
+
xdg.mimeApps = {
enable = true;
diff --git a/hosts/worf/home.nix b/hosts/worf/home.nix
index edb4e35..45a7cf5 100644
--- a/hosts/worf/home.nix
+++ b/hosts/worf/home.nix
@@ -26,7 +26,7 @@
prismlauncher
restic
snicat
- # spotify # TODO - broken in 25.11
+ spotify
tldr
w3m
zellij