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