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..42e7737 --- /dev/null +++ b/home/hypr/hyprland.nix @@ -0,0 +1,146 @@ +{ lib, config, ... }: +{ + 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 + "hyprctl hyprpaper wallpaper 'DP-1, ${wpDir}/Ultrawide_Stray_City.png'" + "hyprctl hyprpaper wallpaper 'DP-2, ${wpDir}/cyberpunk-gas-station-1.jpg'" + ] + + + '' + 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 + # TODO + + # 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 = "us"; + kb_variant = "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..76b5ca1 --- /dev/null +++ b/home/hypr/keybinds.nix @@ -0,0 +1,283 @@ +{ + 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 }") + ]) + + # 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/waybar.nix b/home/waybar.nix new file mode 100644 index 0000000..28b05a2 --- /dev/null +++ b/home/waybar.nix @@ -0,0 +1,263 @@ +{ 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" + "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/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;