diff --git a/flake.lock b/flake.lock index 1a5c259..2fd5de1 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,33 @@ }, "locked": { "dir": "pkgs/firefox-addons", - "lastModified": 1775880170, - "narHash": "sha256-63PLZ7lspPAqpV/+d0oNtDHLCWQf1MVFRG2DOeDK+nU=", + "lastModified": 1775966594, + "narHash": "sha256-pnRtaqTr7ut8dz8b04OWAanUM4tGhDUJz8SWmeTRp7U=", "owner": "rycee", "repo": "nur-expressions", - "rev": "28b164d30b5ab6820ef7e17281ae55c539ae9ff5", + "rev": "000d1d2322d28fa0a51b8db9f85a227aa5413b52", + "type": "gitlab" + }, + "original": { + "dir": "pkgs/firefox-addons", + "owner": "rycee", + "repo": "nur-expressions", + "type": "gitlab" + } + }, + "firefox-addons-unstable": { + "inputs": { + "nixpkgs": [ + "nixpkgs-unstable" + ] + }, + "locked": { + "dir": "pkgs/firefox-addons", + "lastModified": 1775966594, + "narHash": "sha256-pnRtaqTr7ut8dz8b04OWAanUM4tGhDUJz8SWmeTRp7U=", + "owner": "rycee", + "repo": "nur-expressions", + "rev": "000d1d2322d28fa0a51b8db9f85a227aa5413b52", "type": "gitlab" }, "original": { @@ -29,6 +51,27 @@ "nixpkgs" ] }, + "locked": { + "lastModified": 1768135262, + "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "nixvim-unstable", + "nixpkgs" + ] + }, "locked": { "lastModified": 1772408722, "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", @@ -43,6 +86,24 @@ "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": [ @@ -50,11 +111,32 @@ ] }, "locked": { - "lastModified": 1775900011, - "narHash": "sha256-QUGu6CJYFQ5AWVV0n3/FsJyV+1/gj7HSDx68/SX9pwM=", + "lastModified": 1775425411, + "narHash": "sha256-KY6HsebJHEe5nHOWP7ur09mb0drGxYSzE3rQxy62rJo=", "owner": "nix-community", "repo": "home-manager", - "rev": "b0569dc6ec1e6e7fefd8f6897184e4c191cd768e", + "rev": "0d02ec1d0a05f88ef9e74b516842900c41f0f2fe", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-25.11", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager-unstable": { + "inputs": { + "nixpkgs": [ + "nixpkgs-unstable" + ] + }, + "locked": { + "lastModified": 1776015217, + "narHash": "sha256-PUb9TTfqsA1g+aHJt5s8tIP7QdX8xHeOtDMPVRuylfM=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "f6196e5b4d3f0168d09feab9ba678fa18ca58cbb", "type": "github" }, "original": { @@ -63,7 +145,51 @@ "type": "github" } }, + "ixx": { + "inputs": { + "flake-utils": [ + "nixvim", + "nuschtosSearch", + "flake-utils" + ], + "nixpkgs": [ + "nixvim", + "nuschtosSearch", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1754860581, + "narHash": "sha256-EM0IE63OHxXCOpDHXaTyHIOk2cNvMCGPqLt/IdtVxgk=", + "owner": "NuschtOS", + "repo": "ixx", + "rev": "babfe85a876162c4acc9ab6fb4483df88fa1f281", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "ref": "v0.1.1", + "repo": "ixx", + "type": "github" + } + }, "nixpkgs": { + "locked": { + "lastModified": 1775811116, + "narHash": "sha256-t+HZK42pB6N+i5RGbuy7Xluez/VvWbembBdvzsc23Ss=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "54170c54449ea4d6725efd30d719c5e505f1c10e", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-unstable": { "locked": { "lastModified": 1775710090, "narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=", @@ -85,14 +211,38 @@ "nixpkgs": [ "nixpkgs" ], - "systems": "systems" + "nuschtosSearch": "nuschtosSearch", + "systems": "systems_2" }, "locked": { - "lastModified": 1775837497, - "narHash": "sha256-L17VI03w/wVXvc1SK7EI1muLqHxD3+esYPPzgQvvdOE=", + "lastModified": 1769049374, + "narHash": "sha256-h0Os2qqNyycDY1FyZgtbn28VF1ySP74/n0f+LDd8j+w=", "owner": "nix-community", "repo": "nixvim", - "rev": "a587a96a48c705609bfd2ad23f9ae5961eb0d373", + "rev": "b8f76bf5751835647538ef8784e4e6ee8deb8f95", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "nixos-25.11", + "repo": "nixvim", + "type": "github" + } + }, + "nixvim-unstable": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": [ + "nixpkgs-unstable" + ], + "systems": "systems_3" + }, + "locked": { + "lastModified": 1775988703, + "narHash": "sha256-gqIk6zAIJ0otdoWWjHeE51ed8ZlCkv4Yz5YD0+JfCl0=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "05a8ad9f006936bf451043afb80821c204264a48", "type": "github" }, "original": { @@ -101,13 +251,41 @@ "type": "github" } }, + "nuschtosSearch": { + "inputs": { + "flake-utils": "flake-utils", + "ixx": "ixx", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768249818, + "narHash": "sha256-ANfn5OqIxq3HONPIXZ6zuI5sLzX1sS+2qcf/Pa0kQEc=", + "owner": "NuschtOS", + "repo": "search", + "rev": "b6f77b88e9009bfde28e2130e218e5123dc66796", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "repo": "search", + "type": "github" + } + }, "root": { "inputs": { "firefox-addons": "firefox-addons", + "firefox-addons-unstable": "firefox-addons-unstable", "home-manager": "home-manager", + "home-manager-unstable": "home-manager-unstable", "nixpkgs": "nixpkgs", + "nixpkgs-unstable": "nixpkgs-unstable", "nixvim": "nixvim", - "sops-nix": "sops-nix" + "nixvim-unstable": "nixvim-unstable", + "sops-nix": "sops-nix", + "sops-nix-unstable": "sops-nix-unstable" } }, "sops-nix": { @@ -117,11 +295,31 @@ ] }, "locked": { - "lastModified": 1775682595, - "narHash": "sha256-0E9PohY/VuESLq0LR4doaH7hTag513sDDW5n5qmHd1Q=", + "lastModified": 1775971308, + "narHash": "sha256-VKp9bhVSm0bT6JWctFy06ocqxGGnWHi1NfoE90IgIcY=", "owner": "Mic92", "repo": "sops-nix", - "rev": "d2e8438d5886e92bc5e7c40c035ab6cae0c41f76", + "rev": "31ac5fe5d015f76b54058c69fcaebb66a55871a4", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" + } + }, + "sops-nix-unstable": { + "inputs": { + "nixpkgs": [ + "nixpkgs-unstable" + ] + }, + "locked": { + "lastModified": 1775971308, + "narHash": "sha256-VKp9bhVSm0bT6JWctFy06ocqxGGnWHi1NfoE90IgIcY=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "31ac5fe5d015f76b54058c69fcaebb66a55871a4", "type": "github" }, "original": { @@ -144,6 +342,36 @@ "repo": "default", "type": "github" } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 4a0ec73..2c2245f 100644 --- a/flake.nix +++ b/flake.nix @@ -1,15 +1,16 @@ { description = "L config"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; home-manager = { - url = "github:nix-community/home-manager"; + url = "github:nix-community/home-manager?ref=release-25.11"; inputs.nixpkgs.follows = "nixpkgs"; }; nixvim = { - url = "github:nix-community/nixvim"; + url = "github:nix-community/nixvim?ref=nixos-25.11"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -22,6 +23,26 @@ url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; inputs.nixpkgs.follows = "nixpkgs"; }; + + home-manager-unstable = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs-unstable"; + }; + + nixvim-unstable = { + url = "github:nix-community/nixvim"; + inputs.nixpkgs.follows = "nixpkgs-unstable"; + }; + + sops-nix-unstable = { + url = "github:Mic92/sops-nix"; + inputs.nixpkgs.follows = "nixpkgs-unstable"; + }; + + firefox-addons-unstable = { + url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; + inputs.nixpkgs.follows = "nixpkgs-unstable"; + }; }; outputs = @@ -33,30 +54,53 @@ nixosConfigurations = let nixosSystem = - name: hostConfig: - inputs.nixpkgs.lib.nixosSystem { - specialArgs = { - inherit inputs system; + name: stable: hostConfig: + if stable then + inputs.nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs system name; + }; + modules = [ + ./hosts/${name}/configuration.nix + inputs.sops-nix.nixosModules.sops + inputs.home-manager.nixosModules.home-manager + { + home-manager.useUserPackages = true; + home-manager.users.vbm = ./hosts/${name}/home.nix; + home-manager.extraSpecialArgs = { inherit inputs system stable; }; + home-manager.sharedModules = [ + inputs.nixvim.homeModules.nixvim + inputs.sops-nix.homeManagerModules.sops + ]; + } + ]; + } + else + inputs.nixpkgs-unstable.lib.nixosSystem { + specialArgs = { + inherit inputs system name; + }; + modules = [ + ./hosts/${name}/configuration.nix + inputs.sops-nix-unstable.nixosModules.sops + inputs.home-manager-unstable.nixosModules.home-manager + { + home-manager-unstable.useUserPackages = true; + home-manager-unstable.users.vbm = ./hosts/${name}/home.nix; + home-manager-unstable.extraSpecialArgs = { inherit inputs system stable; }; + home-manager-unstable.sharedModules = [ + inputs.nixvim-unstable.homeModules.nixvim + inputs.sops-nix-unstable.homeManagerModules.sops + ]; + } + ]; }; - modules = [ - ./hosts/${name}/configuration.nix - inputs.sops-nix.nixosModules.sops - inputs.home-manager.nixosModules.home-manager - { - home-manager.useUserPackages = true; - home-manager.users.vbm = ./hosts/${name}/home.nix; - home-manager.extraSpecialArgs = { inherit inputs system; }; - home-manager.sharedModules = [ - inputs.nixvim.homeModules.nixvim - inputs.sops-nix.homeManagerModules.sops - ]; - } - ]; - }; + in { - talos = nixosSystem "talos" { }; + talos = nixosSystem "talos" false { }; + perseus = nixosSystem "perseus" true { }; }; }; } diff --git a/home/home.nix b/home/home.nix index 80b15e4..4181c46 100644 --- a/home/home.nix +++ b/home/home.nix @@ -2,6 +2,7 @@ lib, pkgs, config, + stable, ... }: { @@ -51,6 +52,8 @@ mime.enable = true; mimeApps.enable = true; userDirs.enable = true; + } + // lib.optionalAttrs (!stable) { userDirs.setSessionVariables = true; }; @@ -75,20 +78,6 @@ services.syncthing.enable = true; - services.batsignal = { - enable = true; - extraArgs = [ - "-w" - "35" - "-c" - "10" - "-d" - "5" - "-f" - "65" - ]; - }; - services.mpd = { enable = true; }; @@ -177,7 +166,7 @@ user = { name = "Vegard Bieker Matthey"; email = "VegardMatthey@protonmail.com"; - signingkey = "~/.ssh/pvv_gitea_sign_id_ed25519.pub"; + signingkey = "~/.ssh/pvv_gitea_id_ed25519.pub"; }; commit.gpgsign = true; tag.gpgsign = true; @@ -210,6 +199,8 @@ }; settings = { show_banner = false; + } + // lib.optionalAttrs (!stable) { show_hints = false; }; environmentVariables = config.home.sessionVariables; diff --git a/home/programs/foot.nix b/home/programs/foot.nix index 36564ce..648b826 100644 --- a/home/programs/foot.nix +++ b/home/programs/foot.nix @@ -1,4 +1,41 @@ -{ ... }: +{ lib, stable, ... }: +let + colors = { + cursor = "11111b f5e0dc"; + foreground = "cdd6f4"; + background = "1e1e2e"; + + regular0 = "45475a"; + regular1 = "f38ba8"; + regular2 = "a6e3a1"; + regular3 = "f9e2af"; + regular4 = "89b4fa"; + regular5 = "f5c2e7"; + regular6 = "94e2d5"; + regular7 = "bac2de"; + + bright0 = "585b70"; + bright1 = "f38ba8"; + bright2 = "a6e3a1"; + bright3 = "f9e2af"; + bright4 = "89b4fa"; + bright5 = "f5c2e7"; + bright6 = "94e2d5"; + bright7 = "a6adc8"; + + "16" = "fab387"; + "17" = "f5e0dc"; + + selection-foreground = "cdd6f4"; + selection-background = "414356"; + + search-box-no-match = "11111b f38ba8"; + search-box-match = "cdd6f4 313244"; + + jump-labels = "11111b fab387"; + urls = "89b4fa"; + }; +in { programs.foot = { enable = true; @@ -11,41 +48,8 @@ hide-when-typing = "yes"; }; - colors-dark = { - cursor = "11111b f5e0dc"; - foreground = "cdd6f4"; - background = "1e1e2e"; - - regular0 = "45475a"; - regular1 = "f38ba8"; - regular2 = "a6e3a1"; - regular3 = "f9e2af"; - regular4 = "89b4fa"; - regular5 = "f5c2e7"; - regular6 = "94e2d5"; - regular7 = "bac2de"; - - bright0 = "585b70"; - bright1 = "f38ba8"; - bright2 = "a6e3a1"; - bright3 = "f9e2af"; - bright4 = "89b4fa"; - bright5 = "f5c2e7"; - bright6 = "94e2d5"; - bright7 = "a6adc8"; - - "16" = "fab387"; - "17" = "f5e0dc"; - - selection-foreground = "cdd6f4"; - selection-background = "414356"; - - search-box-no-match = "11111b f38ba8"; - search-box-match = "cdd6f4 313244"; - - jump-labels = "11111b fab387"; - urls = "89b4fa"; - }; - }; + } + // lib.optionalAttrs stable { inherit colors; } + // lib.optionalAttrs (!stable) { colors-dark = colors; }; }; } diff --git a/home/programs/librewolf.nix b/home/programs/librewolf.nix index 394fbb0..d75c6ff 100644 --- a/home/programs/librewolf.nix +++ b/home/programs/librewolf.nix @@ -2,10 +2,11 @@ pkgs, inputs, system, + stable, ... }: let - channel = "unstable"; + channel = if stable then "25.11" else "unstable"; in { programs.librewolf = { diff --git a/home/programs/neovim.nix b/home/programs/neovim.nix index 977ceea..a3af553 100644 --- a/home/programs/neovim.nix +++ b/home/programs/neovim.nix @@ -1,4 +1,4 @@ -{ ... }: +{ lib, stable, ... }: { programs.nixvim = { enable = true; @@ -15,10 +15,6 @@ mouse = ""; }; globals.mapleader = " "; - lsp-format = { - enable = true; - lspServersToEnable = "all"; - }; plugins.lsp = { enable = true; servers = { @@ -38,17 +34,20 @@ }; }; }; - plugins.tresitter.enable = true; + # There has been some drama, the repo was archived and stuff. + # plugins.tresitter.enable = true; plugins.telescope.enable = true; plugins.fidget.enable = true; plugins.cmp = { enable = false; - autEnableSources = true; settings.sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "buffer"; } ]; + } + // lib.optionalAttrs (!stable) { + autEnableSources = true; }; plugins.web-devicons.enable = true; keymaps = [ @@ -65,5 +64,11 @@ key = "ff"; } ]; + } + // lib.optionalAttrs (!stable) { + lsp-format = { + enable = true; + lspServersToEnable = "all"; + }; }; } diff --git a/hosts/perseus/config_files/dwl/config.h b/hosts/perseus/config_files/dwl/config.h new file mode 100644 index 0000000..b3b53d3 --- /dev/null +++ b/hosts/perseus/config_files/dwl/config.h @@ -0,0 +1,212 @@ +/* Taken from https://github.com/djpohly/dwl/issues/466 */ +#define COLOR(hex) { ((hex >> 24) & 0xFF) / 255.0f, \ + ((hex >> 16) & 0xFF) / 255.0f, \ + ((hex >> 8) & 0xFF) / 255.0f, \ + (hex & 0xFF) / 255.0f } +/* appearance */ +static const int sloppyfocus = 1; /* focus follows mouse */ +static const int bypass_surface_visibility = 0; /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible */ +static const unsigned int borderpx = 1; /* border pixel of windows */ +static const int showbar = 1; /* 0 means no bar */ +static const int topbar = 1; /* 0 means bottom bar */ +static const char *fonts[] = {"Hack:size=10"}; +static const float rootcolor[] = COLOR(0x000000ff); + +static const int refresh_rate = 239972; /* mHz 0 means auto */ +static const int s_width = 2560 /* 0 means auto */; +static const int s_height = 1440 /* 0 means auto */; + +/* This conforms to the xdg-protocol. Set the alpha to zero to restore the old behavior */ +static const float fullscreen_bg[] = {0.0f, 0.0f, 0.0f, 1.0f}; /* You can also use glsl colors */ +static uint32_t colors[][3] = { + /* fg bg border */ + [SchemeNorm] = { 0xbbbbbbff, 0x222222ff, 0x444444ff }, + [SchemeSel] = { 0xeeeeeeff, 0x005577ff, 0x005577ff }, + [SchemeUrg] = { 0, 0, 0x770000ff }, +}; + +/* tagging */ +static char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; + +/* logging */ +static int log_level = WLR_ERROR; + +static const Rule rules[] = { + /* app_id title tags mask isfloating monitor */ + { "Gimp_EXAMPLE", NULL, 0, 1, -1 }, /* Start on currently visible tags floating, not tiled */ + { "firefox_EXAMPLE", NULL, 1 << 8, 0, -1 }, /* Start on ONLY tag "9" */ + /* default/example rule: can be changed but cannot be eliminated; at least one rule must exist */ +}; + +/* layout(s) */ +static const Layout layouts[] = { + /* symbol arrange function */ + { "[]=", tile }, + { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, +}; + +/* monitors */ +/* (x=-1, y=-1) is reserved as an "autoconfigure" monitor position indicator + * WARNING: negative values other than (-1, -1) cause problems with Xwayland clients due to + * https://gitlab.freedesktop.org/xorg/xserver/-/issues/899 */ +static const MonitorRule monrules[] = { + /* name mfact nmaster scale layout rotate/reflect x y + * example of a HiDPI laptop monitor: + { "eDP-1", 0.5f, 1, 2, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 }, */ + { "eDP-1", 0.5f, 1, 2, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 }, + { NULL, 0.55f, 1, 1, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 }, + /* default monitor rule: can be changed but cannot be eliminated; at least one monitor rule must exist */ +}; + +/* keyboard */ +static const struct xkb_rule_names xkb_rules = { + /* can specify fields: rules, model, layout, variant, options */ + /* example: + .options = "ctrl:nocaps", + */ + .layout = "no", + .options = NULL, +}; + +static const int repeat_rate = 25; +static const int repeat_delay = 600; + +/* Trackpad */ +static const int tap_to_click = 1; +static const int tap_and_drag = 1; +static const int drag_lock = 1; +static const int natural_scrolling = 0; +static const int disable_while_typing = 1; +static const int left_handed = 0; +static const int middle_button_emulation = 0; +/* You can choose between: +LIBINPUT_CONFIG_SCROLL_NO_SCROLL +LIBINPUT_CONFIG_SCROLL_2FG +LIBINPUT_CONFIG_SCROLL_EDGE +LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN +*/ +static const enum libinput_config_scroll_method scroll_method = LIBINPUT_CONFIG_SCROLL_2FG; + +/* You can choose between: +LIBINPUT_CONFIG_CLICK_METHOD_NONE +LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS +LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER +*/ +static const enum libinput_config_click_method click_method = LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS; + +/* You can choose between: +LIBINPUT_CONFIG_SEND_EVENTS_ENABLED +LIBINPUT_CONFIG_SEND_EVENTS_DISABLED +LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE +*/ +static const uint32_t send_events_mode = LIBINPUT_CONFIG_SEND_EVENTS_ENABLED; + +/* You can choose between: +LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT +LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE +*/ +static const enum libinput_config_accel_profile accel_profile = LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT; +static const double accel_speed = -0.75; + +/* You can choose between: +LIBINPUT_CONFIG_TAP_MAP_LRM -- 1/2/3 finger tap maps to left/right/middle +LIBINPUT_CONFIG_TAP_MAP_LMR -- 1/2/3 finger tap maps to left/middle/right +*/ +static const enum libinput_config_tap_button_map button_map = LIBINPUT_CONFIG_TAP_MAP_LRM; + +/* If you want to use the windows key for MODKEY, use WLR_MODIFIER_LOGO */ +#define MODKEY WLR_MODIFIER_LOGO + +#define TAGKEYS(KEY,SKEY,TAG) \ + { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ + { MODKEY|WLR_MODIFIER_CTRL, KEY, toggleview, {.ui = 1 << TAG} }, \ + { MODKEY|WLR_MODIFIER_SHIFT, SKEY, tag, {.ui = 1 << TAG} }, \ + { MODKEY|WLR_MODIFIER_CTRL|WLR_MODIFIER_SHIFT,SKEY,toggletag, {.ui = 1 << TAG} } + +/* helper for spawning shell commands in the pre dwm-5.0 fashion */ +#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } + +/* commands */ +static const char *termcmd[] = { "foot", NULL }; +static const char *menucmd[] = { "wmenu-drun", "-i", "-f", "Hack 9", NULL }; +static const char *loudcmd[] = { "wpctl", "set-volume", "@DEFAULT_AUDIO_SINK@", "1%+", NULL }; +static const char *quietcmd[] = { "wpctl", "set-volume", "@DEFAULT_AUDIO_SINK@", "1%-", NULL }; +static const char *silencecmd[] = { "wpctl", "set-mute", "@DEFAULT_AUDIO_SINK@", "toggle", NULL }; +static const char *mutecmd[] = { "wpctl", "set-mute", "@DEFAULT_AUDIO_SOURCE@", "toggle", NULL }; +static const char *brightcmd[] = { "brightnessctl", "set", "+5%", NULL }; +static const char *dimcmd[] = { "brightnessctl", "set", "5%-", NULL }; +static const char *shutdowncmd[] = { "shutdown", "now", NULL }; + + +static const Key keys[] = { + /* Note that Shift changes certain key codes: 2 -> at, etc. */ + /* modifier key function argument */ + { MODKEY, XKB_KEY_p, spawn, {.v = menucmd} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return, spawn, {.v = termcmd} }, + /* custom */ + /* modifier key function argument */ + { 0, XKB_KEY_XF86AudioRaiseVolume, spawn, {.v = loudcmd} }, + { 0, XKB_KEY_XF86AudioLowerVolume, spawn, {.v = quietcmd} }, + { 0, XKB_KEY_XF86AudioMute, spawn, {.v = silencecmd} }, + { 0, XKB_KEY_XF86AudioMicMute, spawn, {.v = mutecmd} }, + { 0, XKB_KEY_XF86MonBrightnessUp, spawn, {.v = brightcmd} }, + { 0, XKB_KEY_XF86MonBrightnessDown, spawn, {.v = dimcmd} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Delete, spawn, {.v = shutdowncmd} }, + /* custom */ + { MODKEY, XKB_KEY_b, togglebar, {0} }, + { MODKEY, XKB_KEY_j, focusstack, {.i = +1} }, + { MODKEY, XKB_KEY_k, focusstack, {.i = -1} }, + { MODKEY, XKB_KEY_i, incnmaster, {.i = +1} }, + { MODKEY, XKB_KEY_d, incnmaster, {.i = -1} }, + { MODKEY, XKB_KEY_h, setmfact, {.f = -0.05f} }, + { MODKEY, XKB_KEY_l, setmfact, {.f = +0.05f} }, + { MODKEY, XKB_KEY_Return, zoom, {0} }, + { MODKEY, XKB_KEY_Tab, view, {0} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_c, killclient, {0} }, + { MODKEY, XKB_KEY_t, setlayout, {.v = &layouts[0]} }, + { MODKEY, XKB_KEY_f, setlayout, {.v = &layouts[1]} }, + { MODKEY, XKB_KEY_m, setlayout, {.v = &layouts[2]} }, + { MODKEY, XKB_KEY_space, setlayout, {0} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} }, + { MODKEY, XKB_KEY_e, togglefullscreen, {0} }, + { MODKEY, XKB_KEY_0, view, {.ui = ~0} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_equal, tag, {.ui = ~0} }, + { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, + { MODKEY, XKB_KEY_period, focusmon, {.i = WLR_DIRECTION_RIGHT} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_less, tagmon, {.i = WLR_DIRECTION_LEFT} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_greater, tagmon, {.i = WLR_DIRECTION_RIGHT} }, + TAGKEYS( XKB_KEY_1, XKB_KEY_exclam, 0), + TAGKEYS( XKB_KEY_2, XKB_KEY_quotedbl, 1), + TAGKEYS( XKB_KEY_3, XKB_KEY_numbersign, 2), + TAGKEYS( XKB_KEY_4, XKB_KEY_currency, 3), + TAGKEYS( XKB_KEY_5, XKB_KEY_percent, 4), + TAGKEYS( XKB_KEY_6, XKB_KEY_ampersand, 5), + TAGKEYS( XKB_KEY_7, XKB_KEY_slash, 6), + TAGKEYS( XKB_KEY_8, XKB_KEY_parenleft, 7), + TAGKEYS( XKB_KEY_9, XKB_KEY_parenright, 8), + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_q, quit, {0} }, + + /* Ctrl-Alt-Backspace and Ctrl-Alt-Fx used to be handled by X server */ + { WLR_MODIFIER_CTRL|WLR_MODIFIER_ALT,XKB_KEY_Terminate_Server, quit, {0} }, + /* Ctrl-Alt-Fx is used to switch to another VT, if you don't know what a VT is + * do not remove them. + */ +#define CHVT(n) { WLR_MODIFIER_CTRL|WLR_MODIFIER_ALT,XKB_KEY_XF86Switch_VT_##n, chvt, {.ui = (n)} } + CHVT(1), CHVT(2), CHVT(3), CHVT(4), CHVT(5), CHVT(6), + CHVT(7), CHVT(8), CHVT(9), CHVT(10), CHVT(11), CHVT(12), +}; + +static const Button buttons[] = { + { ClkLtSymbol, 0, BTN_LEFT, setlayout, {.v = &layouts[0]} }, + { ClkLtSymbol, 0, BTN_RIGHT, setlayout, {.v = &layouts[2]} }, + { ClkTitle, 0, BTN_MIDDLE, zoom, {0} }, + { ClkStatus, 0, BTN_MIDDLE, spawn, {.v = termcmd} }, + { ClkClient, MODKEY, BTN_LEFT, moveresize, {.ui = CurMove} }, + { ClkClient, MODKEY, BTN_MIDDLE, togglefloating, {0} }, + { ClkClient, MODKEY, BTN_RIGHT, moveresize, {.ui = CurResize} }, + { ClkTagBar, 0, BTN_LEFT, view, {0} }, + { ClkTagBar, 0, BTN_RIGHT, toggleview, {0} }, + { ClkTagBar, MODKEY, BTN_LEFT, tag, {0} }, + { ClkTagBar, MODKEY, BTN_RIGHT, toggletag, {0} }, +}; diff --git a/hosts/perseus/config_files/slstatus/config.h b/hosts/perseus/config_files/slstatus/config.h new file mode 100644 index 0000000..c0611ad --- /dev/null +++ b/hosts/perseus/config_files/slstatus/config.h @@ -0,0 +1,9 @@ +const unsigned int interval = 1000; +static const char unknown_str[] = "n/a"; +#define MAXLEN 2048 +static const struct arg args[] = { + { run_command, "VOL: %s | ", "wpctl get-volume @DEFAULT_AUDIO_SINK@ | sed 's/Volume: //'" }, + { disk_free, "FDS: %s | ", "/" }, + { cpu_perc, "CPU: %s%% | ", NULL }, + { datetime, "%s", "%F %T" }, +}; diff --git a/hosts/perseus/configuration.nix b/hosts/perseus/configuration.nix new file mode 100644 index 0000000..fbe0682 --- /dev/null +++ b/hosts/perseus/configuration.nix @@ -0,0 +1,97 @@ +{ + pkgs, + lib, + name, + ... +}: +{ + imports = [ + ./hardware-configuration.nix + ../../base.nix + ]; + + networking.hostName = name; + + nixpkgs.overlays = import ../../overlays.nix ++ import ./overlays.nix; + + services.thermald.enable = true; + + fonts.fontconfig.enable = true; + fonts.fontconfig.defaultFonts = { + monospace = [ + "Hack" + ]; + sansSerif = [ + "Notonoto Sans" + "Noto Sans" + ]; + serif = [ + "Notonoto Serif" + "Noto Serif" + ]; + emoji = [ + "Noto Color Emoji" + ]; + }; + fonts.packages = with pkgs; [ + hack-font + nerd-fonts.hack + noto-fonts + noto-fonts-cjk-sans + noto-fonts-cjk-serif + noto-fonts-color-emoji + ]; + + services.pipewire = { + enable = true; + pulse.enable = true; + audio.enable = true; + }; + + services.libinput.enable = true; + + services.udisks2.enable = true; + + users.users.vbm = { + packages = with pkgs; [ + (import ../../scripts/dwls.nix { inherit pkgs lib; }) + wmenu + dwl + tree + dust + eza + wl-clipboard + ripgrep + fd + keepassxc + btop + fluffychat + cargo + rustc + upx + gcc + nixfmt + imv + unzip + zip + qbittorrent + typst + calibre + signal-desktop + rustfmt + umu-launcher + cachix + grim + slurp + brightnessctl + ]; + }; + + security.rtkit.enable = true; + + # Necessary for gtk config, see: https://github.com/nix-community/home-manager/issues/3113 + programs.dconf.enable = true; + + # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . + system.stateVersion = "25.11"; # Did you read the comment? +} diff --git a/hosts/perseus/hardware-configuration.nix b/hosts/perseus/hardware-configuration.nix new file mode 100644 index 0000000..ff2751f --- /dev/null +++ b/hosts/perseus/hardware-configuration.nix @@ -0,0 +1,34 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/11e6969c-4d63-4fb4-99c8-5f1c7fc9f7f7"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/3FC4-6E10"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + + hardware.graphics.enable = true; + hardware.graphics.enable32Bit = true; +} diff --git a/hosts/perseus/home.nix b/hosts/perseus/home.nix new file mode 100644 index 0000000..fcde324 --- /dev/null +++ b/hosts/perseus/home.nix @@ -0,0 +1,20 @@ +{ + ... +}: +{ + + imports = [ + ../../home/home.nix + ../../home/programs/foot.nix + ../../home/programs/neovim.nix + ../../home/programs/retroarch.nix + ../../home/programs/librewolf.nix + ]; + + home = { + stateVersion = "25.11"; + }; + + home.file.".ssh/allowed_signers".text = + "* ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF2DTzB0rAnUUrSx/xOcyn1WL6Gp088yC/p93YSxkMfQ vbm@nixos-radeon"; +} diff --git a/hosts/perseus/overlays.nix b/hosts/perseus/overlays.nix new file mode 100644 index 0000000..74bf5a4 --- /dev/null +++ b/hosts/perseus/overlays.nix @@ -0,0 +1,14 @@ +[ + (final: prev: { + dwl = ( + prev.dwl.override { + configH = ./config_files/dwl/config.h; + enableXWayland = true; + } + ); + }) + + (final: prev: { + slstatus = prev.slstatus.override { conf = ./config_files/slstatus/config.h; }; + }) +] diff --git a/hosts/talos/configuration.nix b/hosts/talos/configuration.nix index dca3c66..0634dd7 100644 --- a/hosts/talos/configuration.nix +++ b/hosts/talos/configuration.nix @@ -1,6 +1,7 @@ { pkgs, lib, + name, ... }: { @@ -9,7 +10,7 @@ ../../base.nix ]; - networking.hostName = "talos"; + networking.hostName = name; nixpkgs.overlays = import ../../overlays.nix ++ import ./overlays.nix; diff --git a/hosts/talos/home.nix b/hosts/talos/home.nix index 53c371a..8f24e98 100644 --- a/hosts/talos/home.nix +++ b/hosts/talos/home.nix @@ -18,4 +18,18 @@ home.file.".ssh/allowed_signers".text = "* ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFI0JYlUwTrHgvjvd4q03ZxDOmoQJ8rSAUDw0dlUMAXb vbm@nixos-xenon"; + + services.batsignal = { + enable = true; + extraArgs = [ + "-w" + "35" + "-c" + "10" + "-d" + "5" + "-f" + "65" + ]; + }; }