treewide: huge refactor, move everything into modules

As my configuration was getting more and more complex, I thought it was
time to switch to a completely modular approach. A local module system
has been created, containing profiles (some will be added later, as I
went with as generic as I could, but I would like to make them more
specialized).

NixOS and home-manager modules have also been separated, which I don't
like too much, and will switch to a cleaner implementation of home
management systems.

commit 09a07b15da
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Wed Jan 15 22:56:32 2025 +0100

    treewide: config/home-manager -> modules/hm

    Moved every remaining home-manager piece of configuration to its own
hm
    module.

commit d7356d3fde
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Wed Jan 15 14:55:03 2025 +0100

    modules/nix/services: add keyd

commit c846cc95ae
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 21:41:13 2025 +0100

    flake: update inputs

commit 94d59b47b3
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 21:41:09 2025 +0100

    modules/nix/services: remove kanata

commit 4429b604dd
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 21:41:01 2025 +0100

    config/home-manager: remove services/udiskie.nix

commit 376024d4a5
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 20:06:31 2025 +0100

    treewide: config/home-manager/services -> modules/hm/services

commit b808281674
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 19:33:31 2025 +0100

    treewide: config/home-manager -> modules/hm

    Started moving HM config to the new local modules system.
Conditionally
    toggling based on profiles and modules.

commit 2b77ac239e
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 15:10:49 2025 +0100

    treewide: config/nixos/services -> modules/nix/services

    Moved every service in their own module, and conditionally enable
them
    based on profiles.

commit 7aadc0c8fe
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 14:44:38 2025 +0100

    modules/nix/programs/hyprland: make chromium/electron apps run on
Wayland

commit ec285bcc52
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 13:58:52 2025 +0100

    treewide: config/nixos/programs -> modules/nix/programs

    Here, we also use the option we just added,
`local.modules.hyprland.enable` to toggle Hyprland, as well as the
profiles. Also removed other unused configuration, such as KDE/Gnome.

commit 76a2caa9c7
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 14:07:41 2025 +0100

    options/modules: add options for Hyprland

commit 9f3d6ae768
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 13:56:56 2025 +0100

    config/nix/programs: cleanup unused files

commit f3c08b8431
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 13:55:17 2025 +0100

    treewide: config/nixos/programs/fonts -> modules/nix/core/fonts

commit c37f00205b
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 13:49:29 2025 +0100

    treewide: config/nixos/nix -> modules/nix/core/nix.nix

commit a734372732
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 13:43:23 2025 +0100

    treewide: config/nixos/network -> modules/nix/core/networking

commit 07a9c5f510
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 12:34:01 2025 +0100

    treewide: move hardware into modules

commit 7d1baf7eb5
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 12:33:21 2025 +0100

    options: use mkIf for assertions

commit 9b01b40253
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 12:33:00 2025 +0100

    hosts: set profiles

    We set profiles before moving the config so nothing breaks and we
keep a
    working commit history :)

commit 65ea8beba0
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 12:22:06 2025 +0100

    options: remove isServer since we have server profile

commit 7906864ae1
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 12:21:49 2025 +0100

    options/profiles: add laptop profile

commit 99b6b41de3
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 12:01:33 2025 +0100

    treewide: migrate config/system/core to modules

    Moved everything from core into modules. I want to get all the NixOS
    stuff moved first, and do home-manager after. I used the different
    profiles to disable configuration that might break my server, as it
has
    its own configuration already. This will need to be refactored
later, as
    I want to ultimately only use the local module system.

commit b89a42ef13
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 11:59:59 2025 +0100

    modules/options: add profiles

    The next step in the refactoring is to add different profiles, so
that
    we may toggle them easily in our hosts. Here's the profiles I went
for:

    - desktop: enables everything a desktop computer needs (graphics,
    productivity apps, base apps such as browsers...)
    - gaming: enables gaming configurations (steam, gamescope...)
    - server: enables server configurations (website hosting, git
forge...)

    I made sure the server profile can not be enabled if desktop/gaming
are
    enabled, as it would not make sense to have desktop applications and
    configurations on a server.

commit 851024052d
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 11:02:13 2025 +0100

    modules: move style to nix/style

    This is temporary, as we're going to get rid of that awkward style
    module that was meant to be shared, but ended up being too specific
to
    my use-case. We just put it in a nix directory for now, as we will
with
    everything else. This will be refactored later to be mixed with the
    relevant program's configuration.

commit bb55875491
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Tue Jan 14 10:56:34 2025 +0100

    treewide: move shared/nixosModules to modules

    The idea of this refactor is, as the configuration is getting bigger
and
    more complex, to move everything into a local modules system. The
idea
    is to simplify hosts declaration and add a new layer of abstraction
to
    avoid the long and redundant imports in hosts/default.nix, that I am
    currently using.

    First, we're going to move everything to the modules directory, and
    split options from the proper configuration. That allows us to have
an
    easier time understanding how the options are structured, as they
will
    follow the directory structure and won't be mixed with the module
    configuration.
This commit is contained in:
Anthony Rodriguez 2025-01-15 22:57:01 +01:00
parent acf42ca5e7
commit de6052693e
Signed by: nezia
GPG key ID: EE3BE97C040A86CE
206 changed files with 2801 additions and 3061 deletions

View file

@ -1,7 +0,0 @@
_: {
imports = [
./services/udiskie.nix
./terminal
./programs
];
}

View file

@ -1,4 +0,0 @@
{
imports = [./firefox.nix];
home.sessionVariables.BROWSER = "firefox";
}

View file

@ -1,172 +0,0 @@
{
inputs,
pkgs,
...
}: let
betterfox = pkgs.fetchFromGitHub {
owner = "yokoffing";
repo = "betterfox";
rev = "e026ed7d3a763c5d3f96c2680d7bc3340831af4f";
hash = "sha256-hpkEO5BhMVtINQG8HN4xqfas/R6q5pYPZiFK8bilIDs=";
};
in {
programs.firefox = {
enable = true;
package = pkgs.wrapFirefox pkgs.firefox-unwrapped {
extraPolicies = {
DisableTelemetry = true;
DisablePocket = true;
DisableFeedbackCommands = true;
DisableFirefoxStudies = true;
OfferToSaveLogins = false;
OffertosaveloginsDefault = false;
PasswordManagerEnabled = false;
SearchSuggestEnabled = true;
# https://github.com/Sly-Harvey/NixOS/blob/f9da2691ea46565256ad757959cfc26ec6cee10d/modules/programs/browser/firefox/default.nix#L58-L163
"3rdparty".Extensions = {
"addon@darkreader.org" = {
permissions = ["internal:privateBrowsingAllowed"];
enabled = true;
automation = {
enabled = true;
behavior = "OnOff";
mode = "system";
};
detectDarkTheme = true;
enabledByDefault = true;
changeBrowserTheme = false;
enableForProtectedPages = true;
fetchNews = false;
previewNewDesign = true;
};
"uBlock0@raymondhill.net" = {
permissions = ["internal:privateBrowsingAllowed"];
advancedSettings = [
[
"userResourcesLocation"
"https://raw.githubusercontent.com/pixeltris/TwitchAdSolutions/master/video-swap-new/video-swap-new-ublock-origin.js"
]
];
adminSettings = {
userSettings = {
uiTheme = "dark";
advancedUserEnabled = true;
userFiltersTrusted = true;
importedLists = [
"https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
];
selectedFilterLists = [
"FRA-0"
"adguard-cookies"
"adguard-mobile-app-banners"
"adguard-other-annoyances"
"adguard-popup-overlays"
"adguard-social"
"adguard-spyware-url"
"adguard-widgets"
"easylist"
"easylist-annoyances"
"easylist-chat"
"easylist-newsletters"
"easylist-notifications"
"easyprivacy"
"fanboy-cookiemonster"
"https://filters.adtidy.org/extension/ublock/filters/3.txt"
"https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
"plowe-0"
"ublock-annoyances"
"ublock-badware"
"ublock-cookies-adguard"
"ublock-cookies-easylist"
"ublock-filters"
"ublock-privacy"
"ublock-quick-fixes"
"ublock-unbreak"
"urlhaus-1"
"https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
];
};
};
};
};
};
};
profiles = {
nezia = {
settings = {
"browser.search.suggest.enabled" = true;
"ui.key.menuAccessKeyFocuses" = false;
};
extensions = with inputs.firefox-addons.packages.${pkgs.system}; [
darkreader
proton-pass
shinigami-eyes
stylus
ublock-origin
violentmonkey
];
# https://git.jacekpoz.pl/poz/niksos/src/commit/a48647a1c5bc6877a1100a65f4dc169b2fc11ed7/hosts/hape/firefox.nix
search = {
force = true;
default = "SearxNG";
engines = {
"SearxNG" = {
urls = [
{
rels = ["results"];
template = "https://search.nezia.dev/search";
params = [
{
name = "q";
value = "{searchTerms}";
}
];
}
{
rels = ["suggestions"];
template = "https://search.nezia.dev/autocompleter";
params = [
{
name = "q";
value = "{searchTerms}";
}
];
"type" = "application/x-suggestions+json";
}
];
};
"MyNixOS" = {
urls = [{template = "https://mynixos.com/search?q={searchTerms}";}];
iconUpdateURL = "https://mynixos.com/favicon.ico";
updateInterval = 24 * 60 * 60 * 1000;
definedAliases = ["@nx"];
};
"Noogle" = {
urls = [{template = "https://noogle.dev/q?term={searchTerms}";}];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["@ng"];
};
"GitHub Nix" = {
# https://github.com/search?q=language%3Anix+NOT+is%3Afork+programs.neovim&type=code
urls = [{template = "https://github.com/search?q=language:nix NOT is:fork {searchTerms}&type=code";}];
iconUpdateURL = "https://github.com/favicon.ico";
updateInterval = 24 * 60 * 60 * 1000;
definedAliases = ["@ghn"];
};
"Google".metaData.alias = "@g"; # builtin engines only support specifying one additional alias
};
};
# https://github.com/oddlama/nix-config/blob/main/users/myuser/graphical/firefox.nix#L53-L57
extraConfig = builtins.concatStringsSep "\n" [
(builtins.readFile "${betterfox}/user.js")
(builtins.readFile "${betterfox}/Securefox.js")
(builtins.readFile "${betterfox}/Fastfox.js")
(builtins.readFile "${betterfox}/Peskyfox.js")
(builtins.readFile "${betterfox}/Smoothfox.js")
];
};
};
};
}

View file

@ -1,45 +0,0 @@
{pkgs, ...}: {
imports = [
./browsers
./gnome
./media
./xdg.nix
./editors/helix.nix
./editors/neovim.nix
];
# idk where to put this
programs = {
fzf.enable = true;
fastfetch.enable = true;
hyfetch = {
enable = true;
settings = {
preset = "nonbinary";
mode = "rgb";
backend = "fastfetch";
color_align.mode = "horizontal";
};
};
};
# miscellaneous programs that do not need to be configured
home.packages = with pkgs; [
cinny-desktop
entr
fractal
geary
gns3-gui
gns3-server
imhex
logisim-evolution
mission-center
nautilus
obsidian
playerctl
proton-pass
simple-scan
vesktop
wl-clipboard
];
}

View file

@ -1,61 +0,0 @@
{
lib,
pkgs,
...
}: {
programs.helix = {
enable = true;
settings = {
theme = "catppuccin_macchiato";
editor = {
line-number = "relative";
lsp.display-messages = true;
auto-format = true;
auto-completion = true;
completion-timeout = 5;
color-modes = true;
completion-trigger-len = 1;
completion-replace = true;
cursorline = true;
cursor-shape = {
insert = "bar";
normal = "block";
select = "underline";
};
indent-guides.render = true;
lsp.display-inlay-hints = true;
statusline.center = ["position-percentage"];
true-color = true;
whitespace.characters = {
newline = "";
tab = "";
};
};
keys.normal = {
space = {
space = "file_picker";
w = ":w";
q = ":q";
};
esc = ["collapse_selection" "keep_primary_selection"];
};
};
languages = {
language = [
{
name = "nix";
auto-format = true;
}
];
language-server = {
nil = {
command = lib.getExe pkgs.nil;
config.nil.formatting.command = ["${lib.getExe pkgs.alejandra}" "-q"];
};
};
};
};
}

View file

@ -1,244 +0,0 @@
{
inputs,
lib,
pkgs,
...
}: {
imports = [inputs.nvf.homeManagerModules.default];
programs.nvf = {
enable = true;
settings.vim = {
viAlias = true;
vimAlias = true;
enableLuaLoader = true;
preventJunkFiles = true;
useSystemClipboard = true;
options = {
tabstop = 4;
autoindent = false;
};
luaConfigPost = ''
vim.opt.formatoptions:remove('c')
vim.opt.formatoptions:remove('r')
vim.opt.formatoptions:remove('o')
'';
maps = {
normal = {
"<leader>m" = {
silent = true;
action = "<cmd>make<CR>";
}; # Same as nnoremap <leader>m <silent> <cmd>make<CR>
"<leader>t" = {
silent = true;
action = "<cmd>Neotree toggle<CR>";
};
};
};
theme = lib.mkDefault {
enable = true;
name = "catppuccin";
style = "macchiato";
};
ui = {
noice.enable = true;
};
notify.nvim-notify.enable = true;
statusline = {
lualine = {
enable = true;
theme = "auto";
componentSeparator = {
left = "";
};
sectionSeparator = {
left = "";
right = "";
};
activeSection = {
a = [
''
{
"mode",
separator = { right = "" },
right_padding = 2
}
''
];
b = [
''
{
"branch",
icon = '',
separator = { right = "" }
}
''
];
c = [
''
"filename"
''
];
x = [
''
{
"diagnostics",
sources = {'nvim_lsp', 'nvim_diagnostic', 'nvim_diagnostic', 'vim_lsp', 'coc'},
symbols = {error = '󰅙 ', warn = ' ', info = ' ', hint = '󰌵 '},
colored = true,
update_in_insert = false,
always_visible = false,
diagnostics_color = {
color_error = { fg = 'red' },
color_warn = { fg = 'yellow' },
color_info = { fg = 'cyan' },
},
}
''
''
"filetype"
''
];
y = [
''
{
"progress",
separator = { left = "" },
}
''
''
''
];
z = [
''
{
"location",
separator = { left = "" },
left_padding = 2
}
''
''
{
"fileformat",
color = {fg='black'},
symbols = {
unix = '', -- e712
dos = '', -- e70f
mac = '', -- e711
},
}
''
];
};
inactiveSection = {
a = [
''
"filename"
''
];
z = [
''
"location"
''
];
};
};
};
git.enable = true;
utility = {
vim-wakatime.enable = true;
surround.enable = true;
};
lsp = {
enable = true;
lspSignature.enable = true;
lspconfig.enable = true;
formatOnSave = true;
mappings = {
addWorkspaceFolder = "<leader>wa";
codeAction = "<leader>a";
goToDeclaration = "gD";
goToDefinition = "gd";
hover = "K";
listImplementations = "gi";
listReferences = "gr";
listWorkspaceFolders = "<leader>wl";
nextDiagnostic = "<leader>k";
previousDiagnostic = "<leader>j";
openDiagnosticFloat = "<leader>e";
removeWorkspaceFolder = "<leader>wr";
renameSymbol = "<leader>r";
signatureHelp = "<C-k>";
};
};
autocomplete.nvim-cmp = {
enable = true;
};
autopairs.nvim-autopairs.enable = true;
languages = {
enableExtraDiagnostics = true;
enableFormat = true;
enableLSP = true;
enableTreesitter = true;
nix.enable = true;
clang.enable = true;
python.enable = true;
ts.enable = true;
css.enable = true;
typst.enable = true;
};
treesitter = {
enable = true;
fold = true;
context.enable = true;
grammars = [
pkgs.vimPlugins.nvim-treesitter.builtGrammars.nix
pkgs.vimPlugins.nvim-treesitter.builtGrammars.c
pkgs.vimPlugins.nvim-treesitter.builtGrammars.python
];
};
binds.whichKey.enable = true;
filetree.neo-tree.enable = true;
telescope.enable = true;
};
};
programs.neovide = {
enable = true;
settings = {
fork = false;
frame = "full";
idle = true;
maximized = false;
no-multigrid = false;
srgb = false;
tabs = true;
theme = "auto";
title-hidden = true;
vsync = true;
wsl = false;
font = {
normal = [];
size = 14.0;
};
};
};
}

View file

@ -1,10 +0,0 @@
{pkgs, ...}: {
home.packages = [
pkgs.mangohud
pkgs.bolt-launcher
pkgs.ankama-launcher
pkgs.lutris
pkgs.qbittorrent
pkgs.protonplus
];
}

View file

@ -1,10 +0,0 @@
_: {
dconf = {
enable = true;
settings = {
"org/gnome/desktop/wm/preferences" = {
button-layout = "";
};
};
};
}

View file

@ -1,55 +0,0 @@
{
inputs,
pkgs,
lib,
config,
...
}: {
services.hypridle = {
enable = true;
package = inputs.hypridle.packages.${pkgs.system}.hypridle;
settings = {
general = {
lock_cmd = "pidof hyprlock || hyprlock";
unlock_cmd = "pkill --signal SIGUSR1 hyprlock";
before_sleep_cmd = "loginctl lock-session";
after_sleep_cmd = "hyprctl dispatch dpms on";
};
listener = [
{
timeout = 300; # 5m
on-timeout = "loginctl lock-session";
}
{
timeout = 330; # 5.5m
on-timeout = "hyprctl dipsatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
{
timeout = 600; # 10m
on-timeout = "systemctl suspend";
}
];
};
};
# needed when using uwsm as the session manager
systemd.user.services."hypridle" = lib.mkForce {
Unit = {
Description = "Hyprland's Idle Daemon";
After = "graphical-session.target";
X-Restart-Triggers = ["${config.xdg.configFile."hypr/hypridle.conf".source}"];
};
Service = {
Type = "exec";
ExecStart = lib.getExe pkgs.hypridle;
Restart = "on-failure";
Slice = "background-graphical.slice";
};
Install = {
WantedBy = ["graphical-session.target"];
};
};
}

View file

@ -1,79 +0,0 @@
{lib, ...}: let
# thanks https://github.com/fufexan/dotfiles/blob/c0b3c77d95ce1f574a87e7f7ead672ca0d951245/home/programs/wayland/hyprland/binds.nix#L16-L20
toggle = program: uwsm: let
prog = builtins.substring 0 14 program;
in "pkill ${prog} || ${lib.optionalString uwsm "uwsm app --"} ${program}";
runOnce = program: "pgrep ${program} || uwsm app -- ${program}";
run = program: "uwsm app -- ${program}";
in {
wayland.windowManager.hyprland.settings = {
"$mod" = "SUPER";
bindr = [
"$mod, SUPER_L, exec, walker"
];
bind = [
"$mod, Return, exec, ${run "foot"}"
"$mod, n, exec, ${run "neovide"}"
"$mod, w, exec, ${run "firefox"}"
", Print, exec, ${runOnce "grimblast"} --notify --cursor copysave output"
"$mod, q, killactive"
"$mod SHIFT, q, exec, loginctl terminate-user ''"
"$mod, period, exec, walker -m emojis" # not using uwsm as it already runs as a service
"CTRL, Print, exec, ${runOnce "grimblast"} --notify --cursor --freeze copysave area"
"$mod, h, movefocus, l"
"$mod, j, movefocus, d"
"$mod, k, movefocus, u"
"$mod, l, movefocus, r"
"$mod SHIFT, h, movewindow, l"
"$mod SHIFT, j, movewindow, d"
"$mod SHIFT, k, movewindow, u"
"$mod SHIFT, l, movewindow, r"
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
"$mod, 0, workspace, 10"
"$mod SHIFT, 1, movetoworkspacesilent, 1"
"$mod SHIFT, 2, movetoworkspacesilent, 2"
"$mod SHIFT, 3, movetoworkspacesilent, 3"
"$mod SHIFT, 4, movetoworkspacesilent, 4"
"$mod SHIFT, 5, movetoworkspacesilent, 5"
"$mod SHIFT, 6, movetoworkspacesilent, 6"
"$mod SHIFT, 7, movetoworkspacesilent, 7"
"$mod SHIFT, 8, movetoworkspacesilent, 8"
"$mod SHIFT, 9, movetoworkspacesilent, 9"
"$mod SHIFT, 0, movetoworkspacesilent, 10"
"$mod, t, togglefloating"
", F11, fullscreen, 0"
"$mod, f, fullscreen, 1"
"$mod, e, togglespecialworkspace, file_manager_tui"
"$mod SHIFT, e, togglespecialworkspace, file_manager_gui"
", XF86PowerOff, exec, ${toggle "wlogout" true}"
];
bindel = [
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", XF86MonBrightnessUp, exec, brillo -q -u 300000 -A 5"
", XF86MonBrightnessDown, exec, brillo -q -u 300000 -U 5"
", XF86AudioMedia, exec, XDG_CURRENT_DESKTOP=gnome gnome-control-center"
];
binde = [
"$mod Alt, l, exec, loginctl lock-session"
];
};
}

View file

@ -1,109 +0,0 @@
{
inputs,
pkgs,
...
}: {
imports = [./binds.nix];
home.packages = [
inputs.hyprwm-contrib.packages.${pkgs.system}.grimblast
# disable unused panels - https://github.com/maydayv7/dotfiles/blob/4de45008a6915753834aa7e1cbafbacfff8b7adc/modules/gui/desktop/hyprland/apps/utilities.nix#L42-L57
(pkgs.gnome-control-center.overrideAttrs (old: {
postInstall =
old.postInstall
+ ''
dir=$out/share/applications
for panel in $dir/*
do
[ "$panel" = "$dir/gnome-network-panel.desktop" ] && continue
[ "$panel" = "$dir/gnome-bluetooth-panel.desktop" ] && continue
[ "$panel" = "$dir/gnome-wifi-panel.desktop" ] && continue
[ "$panel" = "$dir/gnome-wwan-panel.desktop" ] && continue
[ "$panel" = "$dir/gnome-sharing-panel.desktop" ] && continue
[ "$panel" = "$dir/gnome-wacom-panel.desktop" ] && continue
rm "$panel"
done
'';
}))
];
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
systemd.enable = false;
settings = {
xwayland = {
force_zero_scaling = true;
};
env = [
"GDK_SCALE,1"
];
monitor = [
"eDP-1, preferred, auto, 1.33"
];
workspace = [
"special:terminal, on-created-empty:foot"
"special:mixer_gui, on-created-empty:pavucontrol"
"special:file_manager_gui, on-created-empty:nautilus"
"special:file_manager_tui, on-created-empty:foot -- yazi"
];
windowrulev2 = [
# fixes fullscreen windows (mostly games)
"stayfocused, initialtitle:^()$, initialclass:^(steam)$"
"minsize 1 1, initialtitle:^()$, initialclass:^(steam)$"
"maximize, initialtitle:^(\S+)$, initialclass:^(steamwebhelper)$"
"immediate, initialclass:^(steam_app_)(.*)$"
"fullscreen, initialclass:^(steam_app_)(.*)$"
# inhibit idle on every fullscreen app except games
"idleinhibit always, fullscreen:1,!initialclass:^(steam_app_)(.*)$"
];
render = {
explicit_sync = 1;
explicit_sync_kms = 1;
expand_undersized_textures = false;
};
animations = {
enabled = true;
bezier = "myBezier, 0.05, 0.9, 0.1, 1.1";
animation = [
"windows, 1, 5, myBezier"
"windowsOut, 1, 5, default, popin 80%"
"windowsMove, 1, 5, default, popin 80%"
"fade, 1, 5, default"
"border, 1, 5, default"
"borderangle, 0, 8, default"
"workspaces, 0"
"specialWorkspace, 0"
];
};
input = {
kb_options = "compose:ralt";
touchpad = {
natural_scroll = true;
scroll_factor = 0.8;
tap-to-click = true;
clickfinger_behavior = true;
};
};
gestures = {
workspace_swipe = true;
workspace_swipe_direction_lock = false;
workspace_swipe_cancel_ratio = 0.15;
};
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
middle_click_paste = false;
};
};
};
}

View file

@ -1,10 +0,0 @@
{
inputs,
pkgs,
...
}: {
programs.hyprlock = {
enable = true;
package = inputs.hyprlock.packages.${pkgs.system}.hyprlock;
};
}

View file

@ -1,20 +0,0 @@
{
lib,
osConfig,
inputs,
pkgs,
...
}: {
services.hyprpaper = {
enable = true;
package = inputs.hyprpaper.packages.${pkgs.system}.default;
settings = {
preload = ["${osConfig.local.style.wallpaper}"];
wallpaper = [", ${osConfig.local.style.wallpaper}"];
};
};
systemd.user.services.hyprpaper.Unit.After = lib.mkForce "graphical-session.target";
systemd.user.services.hyprpaper.Service.Slice = "background-graphical.slice";
}

View file

@ -1,12 +0,0 @@
{pkgs, ...}: {
imports = [./zathura.nix];
programs.mpv.enable = true;
home.packages = [
pkgs.gnome-calculator
pkgs.gthumb
pkgs.spotify
pkgs.stremio
pkgs.tidal-hifi
pkgs.celluloid
];
}

View file

@ -1,17 +0,0 @@
_: {
programs.zathura = {
enable = true;
options = {
font = "Inter 12";
selection-notification = true;
selection-clipboard = "clipboard";
adjust-open = "best-fit";
pages-per-row = "1";
scroll-page-aware = "true";
scroll-full-overlap = "0.01";
scroll-step = "100";
zoom-min = "10";
};
};
}

View file

@ -1,168 +0,0 @@
{
config,
pkgs,
lib,
...
}: let
appLauncher = "fuzzel";
terminal = "foot";
browser = "firefox";
prefix = "Mod";
guiFileManager = "nautilus";
cliFileManager = "yazi";
in {
programs.niri.settings.binds = {
"${prefix}+D".action.spawn = appLauncher;
"${prefix}+Return".action.spawn = terminal;
"${prefix}+W".action.spawn = browser;
"${prefix}+E".action.spawn = guiFileManager;
"${prefix}+Shift+E".action.spawn = [terminal "-e" cliFileManager];
"${prefix}+Shift+Slash".action = config.lib.niri.actions.show-hotkey-overlay;
"${prefix}+Q".action = config.lib.niri.actions.close-window;
"${prefix}+Shift+Q".action.quit.skip-confirmation = true;
"${prefix}+F".action = config.lib.niri.actions.maximize-column;
"${prefix}+Shift+F".action = config.lib.niri.actions.fullscreen-window;
"${prefix}+C".action = config.lib.niri.actions.center-column;
# Focus
"${prefix}+Left".action = config.lib.niri.actions.focus-column-left;
"${prefix}+Down".action = config.lib.niri.actions.focus-window-down;
"${prefix}+Up".action = config.lib.niri.actions.focus-window-up;
"${prefix}+Right".action = config.lib.niri.actions.focus-column-right;
"${prefix}+H".action = config.lib.niri.actions.focus-column-left;
"${prefix}+J".action = config.lib.niri.actions.focus-window-down;
"${prefix}+K".action = config.lib.niri.actions.focus-window-up;
"${prefix}+L".action = config.lib.niri.actions.focus-column-right;
"${prefix}+Home".action = config.lib.niri.actions.focus-column-first;
"${prefix}+End".action = config.lib.niri.actions.focus-column-last;
# Move
"${prefix}+Ctrl+Left".action = config.lib.niri.actions.move-column-left;
"${prefix}+Ctrl+Down".action = config.lib.niri.actions.move-window-down;
"${prefix}+Ctrl+Up".action = config.lib.niri.actions.move-window-up;
"${prefix}+Ctrl+Right".action = config.lib.niri.actions.move-column-right;
"${prefix}+Ctrl+H".action = config.lib.niri.actions.move-column-left;
"${prefix}+Ctrl+J".action = config.lib.niri.actions.move-window-down;
"${prefix}+Ctrl+K".action = config.lib.niri.actions.move-window-up;
"${prefix}+Ctrl+L".action = config.lib.niri.actions.move-column-right;
"${prefix}+Ctrl+Home".action = config.lib.niri.actions.move-column-to-first;
"${prefix}+Ctrl+End".action = config.lib.niri.actions.move-column-to-last;
# Monitor focus
"${prefix}+Shift+Left".action = config.lib.niri.actions.focus-monitor-left;
"${prefix}+Shift+Down".action = config.lib.niri.actions.focus-monitor-down;
"${prefix}+Shift+Up".action = config.lib.niri.actions.focus-monitor-up;
"${prefix}+Shift+Right".action = config.lib.niri.actions.focus-monitor-right;
"${prefix}+Shift+H".action = config.lib.niri.actions.focus-monitor-left;
"${prefix}+Shift+J".action = config.lib.niri.actions.focus-monitor-down;
"${prefix}+Shift+K".action = config.lib.niri.actions.focus-monitor-up;
"${prefix}+Shift+L".action = config.lib.niri.actions.focus-monitor-right;
# Move to monitor
"${prefix}+Shift+Ctrl+Left".action = config.lib.niri.actions.move-column-to-monitor-left;
"${prefix}+Shift+Ctrl+Down".action = config.lib.niri.actions.move-column-to-monitor-down;
"${prefix}+Shift+Ctrl+Up".action = config.lib.niri.actions.move-column-to-monitor-up;
"${prefix}+Shift+Ctrl+Right".action = config.lib.niri.actions.move-column-to-monitor-right;
"${prefix}+Shift+Ctrl+H".action = config.lib.niri.actions.move-column-to-monitor-left;
"${prefix}+Shift+Ctrl+J".action = config.lib.niri.actions.move-column-to-monitor-down;
"${prefix}+Shift+Ctrl+K".action = config.lib.niri.actions.move-column-to-monitor-up;
"${prefix}+Shift+Ctrl+L".action = config.lib.niri.actions.move-column-to-monitor-right;
# Workspace navigation
"${prefix}+Page_Down".action = config.lib.niri.actions.focus-workspace-down;
"${prefix}+Page_Up".action = config.lib.niri.actions.focus-workspace-up;
"${prefix}+U".action = config.lib.niri.actions.focus-workspace-down;
"${prefix}+I".action = config.lib.niri.actions.focus-workspace-up;
"${prefix}+Ctrl+Page_Down".action = config.lib.niri.actions.move-column-to-workspace-down;
"${prefix}+Ctrl+Page_Up".action = config.lib.niri.actions.move-column-to-workspace-up;
"${prefix}+Ctrl+U".action = config.lib.niri.actions.move-column-to-workspace-down;
"${prefix}+Ctrl+I".action = config.lib.niri.actions.move-column-to-workspace-up;
"${prefix}+Shift+Page_Down".action = config.lib.niri.actions.move-workspace-down;
"${prefix}+Shift+Page_Up".action = config.lib.niri.actions.move-workspace-up;
"${prefix}+Shift+U".action = config.lib.niri.actions.move-workspace-down;
# Workspace focus
"${prefix}+1".action.focus-workspace = 1;
"${prefix}+2".action.focus-workspace = 2;
"${prefix}+3".action.focus-workspace = 3;
"${prefix}+4".action.focus-workspace = 4;
"${prefix}+5".action.focus-workspace = 5;
"${prefix}+6".action.focus-workspace = 6;
"${prefix}+7".action.focus-workspace = 7;
"${prefix}+8".action.focus-workspace = 8;
"${prefix}+9".action.focus-workspace = 9;
# Move to workspace
"${prefix}+Ctrl+1".action.move-column-to-workspace = 1;
"${prefix}+Ctrl+2".action.move-column-to-workspace = 2;
"${prefix}+Ctrl+3".action.move-column-to-workspace = 3;
"${prefix}+Ctrl+4".action.move-column-to-workspace = 4;
"${prefix}+Ctrl+5".action.move-column-to-workspace = 5;
"${prefix}+Ctrl+6".action.move-column-to-workspace = 6;
"${prefix}+Ctrl+7".action.move-column-to-workspace = 7;
"${prefix}+Ctrl+8".action.move-column-to-workspace = 8;
"${prefix}+Ctrl+9".action.move-column-to-workspace = 9;
"${prefix}+Shift+I".action = config.lib.niri.actions.move-workspace-up;
# Window management
"${prefix}+Comma".action = config.lib.niri.actions.consume-window-into-column;
"${prefix}+Period".action = config.lib.niri.actions.expel-window-from-column;
"${prefix}+BracketLeft".action = config.lib.niri.actions.consume-or-expel-window-left;
"${prefix}+BracketRight".action = config.lib.niri.actions.consume-or-expel-window-right;
# Column management
"${prefix}+R".action = config.lib.niri.actions.switch-preset-column-width;
"${prefix}+Shift+R".action = config.lib.niri.actions.switch-preset-window-height;
"${prefix}+Ctrl+R".action = config.lib.niri.actions.reset-window-height;
"${prefix}+Minus".action = config.lib.niri.actions.set-column-width "-10%";
"${prefix}+Equal".action = config.lib.niri.actions.set-column-width "+10%";
"${prefix}+Shift+Minus".action = config.lib.niri.actions.set-window-height "-10%";
"${prefix}+Shift+Equal".action = config.lib.niri.actions.set-window-height "+10%";
# Screenshots
"Print".action = config.lib.niri.actions.screenshot-screen;
"Ctrl+Print".action = config.lib.niri.actions.screenshot;
# System
"${prefix}+Alt+L".action.spawn = [
"${lib.getExe' pkgs.systemd "loginctl"}"
"lock-session"
];
# Media keys
"XF86AudioRaiseVolume" = {
action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"];
allow-when-locked = true;
};
"XF86AudioLowerVolume" = {
action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"];
allow-when-locked = true;
};
"XF86AudioMute" = {
action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"];
allow-when-locked = true;
};
"XF86AudioMicMute" = {
action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"];
allow-when-locked = true;
};
"XF86AudioPlay" = {
action.spawn = ["playerctl" "play-pause"];
};
"XF86MonBrightnessUp" = {
action.spawn = ["brillo" "-q" "-u 300000" "-A 5"];
allow-when-locked = true;
};
"XF86MonBrightnessDown" = {
action.spawn = ["brillo" "-q" "-u 300000" "-U 5"];
allow-when-locked = true;
};
# set on media key since framework laptops have a gear as the button label
"XF86AudioMedia" = {
action.spawn = ["sh" "-c" "env XDG_CURRENT_DESKTOP=gnome gnome-control-center"];
};
"XF86PowerOff".action.spawn = "wlogout";
};
}

View file

@ -1,173 +0,0 @@
{
lib,
pkgs,
config,
...
}: {
imports = [./binds.nix];
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
extraPortals = [pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal-gnome pkgs.gnome-keyring];
config = {
common = {
default = ["gtk"];
"org.freedesktop.impl.portal.ScreenCast" = ["gnome"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
};
};
programs.niri = {
settings = {
input = {
power-key-handling.enable = false;
keyboard.xkb = {
layout = "us";
options = "compose:ralt";
};
};
prefer-no-csd = true;
hotkey-overlay.skip-at-startup = true;
layout = {
focus-ring = {
enable = true;
};
always-center-single-column = true;
};
# https://github.com/sodiboo/system/blob/2978f4d79c51a5bd7e38a9cd75e3ec9046aa7e75/niri.mod.nix#L418-L434
outputs = let
cfg = config.programs.niri.settings.outputs;
in {
"HDMI-A-1" = {
mode = {
width = 1920;
height = 1080;
refresh = 60.0;
};
position.x = -cfg."HDMI-A-1".mode.width;
position.y = 0;
};
"DP-1" = {
mode = {
width = 2560;
height = 1440;
refresh = 144.0;
};
position.x = 0;
position.y = 0;
};
};
window-rules = [
{
draw-border-with-background = false;
geometry-corner-radius = let
r = 8.0;
in {
top-left = r;
top-right = r;
bottom-left = r;
bottom-right = r;
};
clip-to-geometry = true;
}
{
matches = [
{app-id = "foot";}
];
default-column-width = {proportion = 0.5;};
}
];
environment = {
"NIXOS_OZONE_WL" = "1";
"DISPLAY" = ":0";
"_JAVA_AWT_WM_NONREPARENTING" = "1"; # https://wiki.archlinux.org/title/Sway#Java_applications
};
};
};
# copied from https://github.com/linyinfeng/dotfiles/blob/c00fe3b1562ad947672863a43e455bc2f01a56b6/home-manager/profiles/niri/default.nix#L594-L611
systemd.user.services.xwayland-satellite = {
Unit = {
PartOf = ["graphical-session.target"];
After = ["graphical-session.target"];
Requisite = ["graphical-session.target"];
};
Install = {
WantedBy = ["niri.service"];
};
Service = {
Type = "simple";
ExecStart = "${lib.getExe pkgs.xwayland-satellite} :0";
NotifyAccess = "all";
StandardOutput = "journal";
Restart = "on-failure";
};
};
programs.wlogout = {
enable = true;
layout = let
systemd = let
systemd = lib.getExe' pkgs.systemd;
in {
loginctl = systemd "loginctl";
systemctl = systemd "systemctl";
};
in [
{
action = "${systemd.loginctl} lock-session";
keybind = "l";
label = "lock";
text = "Lock";
}
{
action = "${systemd.systemctl} hibernate";
keybind = "h";
label = "hibernate";
text = "Hibernate";
}
{
action = "${
systemd.loginctl
} terminate-user ${
config.home.username
}";
keybind = "q";
label = "logout";
text = "Logout";
}
{
action = "${systemd.systemctl} poweroff";
keybind = "p";
label = "shutdown";
text = "Shutdown";
}
{
action = "${systemd.systemctl} suspend";
keybind = "s";
label = "suspend";
text = "Suspend";
}
{
action = "${systemd.systemctl} reboot";
keybind = "r";
label = "reboot";
text = "Reboot";
}
];
};
}

View file

@ -1,19 +0,0 @@
# stolen from https://raw.githubusercontent.com/carlsvelz/dotfiles/a7a109b2e19f73062b4961e7be75836e6d13408c/home/wayland/swaybg.nix
{
pkgs,
lib,
osConfig,
...
}: {
systemd.user.services.swaybg = {
Unit = {
Description = "Wayland wallpaper daemon";
PartOf = ["graphical-session.target"];
};
Service = {
ExecStart = "${lib.getExe pkgs.swaybg} -i ${osConfig.local.style.wallpaper} -m fill";
Restart = "on-failure";
};
Install.WantedBy = ["graphical-session.target"];
};
}

View file

@ -1,20 +0,0 @@
{
lib,
config,
...
}: {
services.swayidle = {
enable = true;
events = [
{
event = "lock";
command = "${lib.getExe config.programs.swaylock.package} --daemonize";
}
{
event = "before-sleep";
command = "${lib.getExe config.programs.swaylock.package} --daemonize";
}
];
};
systemd.user.services.swayidle.Unit.After = lib.mkForce ["graphical-session.target"];
}

View file

@ -1,24 +0,0 @@
{pkgs, ...}: {
# requires `security.pam.services.swaylock = { };` at the system level or else
# unlock will not work.
programs.swaylock = {
enable = true;
package = pkgs.swaylock-effects;
settings = {
clock = true;
timestr = "%H:%M";
indicator = true;
indicator-radius = 111;
indicator-thickness = 9;
screenshots = true;
effect-blur = "7x5";
effect-vignette = "0.75:0.75";
effect-pixelate = 5;
ignore-empty-password = false; # needed for PAM to work with fprintd / password
};
};
}

View file

@ -1,32 +0,0 @@
{
lib,
inputs,
...
}: {
imports = [
inputs.walker.homeManagerModules.default
];
programs.walker = {
enable = true;
runAsService = true;
# All options from the config.json can be used here.
config = {
list = {
height = 200;
};
app_launch_prefix = "uwsm app -- ";
websearch.prefix = "?";
switcher.prefix = "/";
};
};
systemd.user.services.walker = {
Unit = {
PartOf = lib.mkForce [];
After = lib.mkForce ["graphical-session.target"];
};
Service = {
Slice = lib.mkForce "background-graphical.slice";
};
};
}

View file

@ -1,187 +0,0 @@
{
pkgs,
lib,
...
}: {
programs.waybar = {
enable = true;
systemd.enable = true;
settings = {
mainBar = {
layer = "top";
position = "top";
modules-left = [
"hyprland/window"
"pulseaudio"
"cpu"
"memory"
"idle_inhibitor"
];
modules-center = ["hyprland/workspaces"];
modules-right = [
"custom/swaync"
"custom/power"
"network"
"battery"
"tray"
"clock"
];
tray = {
icon-size = 16;
spacing = 12;
};
battery = {
interval = 10;
states = {
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-charging = " {capacity}% - {time}";
format-full = " {capacity}% - Full";
format-icons = [
""
""
""
""
""
];
max-length = 25;
};
"pulseaudio" = {
format = "{icon} {volume}%";
format-bluetooth = "{icon} {volume}%";
format-muted = "";
format-icons = {
"alsa_output.pci-0000_00_1f.3.analog-stereo" = "";
"alsa_output.pci-0000_00_1f.3.analog-stereo-muted" = "";
headphone = "";
hands-free = "";
headset = "";
phone = "";
phone-muted = "";
portable = "";
car = "";
default = [
""
""
];
};
scroll-step = 1;
on-click = "pavucontrol";
ignored-sinks = [
"Easy Effects Sink"
];
};
"power-profiles-daemon" = {
format-icons = {
default = "";
performance = "";
balanced = "";
power-saver = "";
};
};
"custom/power" = {
format = "";
tooltip = false;
on-click = lib.getExe pkgs.wlogout;
};
"memory" = {
interval = 5;
format = " {}%";
tooltip = true;
};
"cpu" = {
interval = 5;
format = " {usage:2}%";
tooltip = true;
};
"idle_inhibitor" = {
format = "{icon}";
format-icons = {
activated = "";
deactivated = "";
};
tooltip = "true";
};
"clock" = {
format = " {:L%H:%M}";
tooltip = true;
tooltip-format = "<big>{:%A, %d.%B %Y }</big>\n<tt><small>{calendar}</small></tt>";
};
"network" = {
format-icons = [
"󰤯"
"󰤟"
"󰤢"
"󰤥"
"󰤨"
];
format-ethernet = " {bandwidthDownOctets}";
format-wifi = "{icon} {signalStrength}%";
format-disconnected = "󰤮";
tooltip = false;
on-click = "XDG_CURRENT_DESKTOP=gnome gnome-control-center";
};
"hyprland/window" = {
max-length = 22;
separate-outputs = false;
};
"hyprland/workspaces" = {
format = "{name}";
format-icons = {
default = " ";
active = " ";
urgent = " ";
};
on-scroll-up = "hyprctl dispatch workspace e+1";
on-scroll-down = "hyprctl dispatch workspace e-1";
};
"custom/swaync" = {
tooltip = false;
format = "<big>{icon}</big>";
format-icons = {
none = "";
notification = "<span foreground='red'><sup></sup></span>";
dnd-notification = "<span foreground='red'><sup></sup></span>";
dnd-none = "";
inhibited-notification = "<span foreground='red'><sup></sup></span>";
inhibited-none = "";
dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
dnd-inhibited-none = "";
};
return-type = "json";
escape = true;
exec-if = "which ${pkgs.swaynotificationcenter}/bin/swaync-client";
exec = "${pkgs.swaynotificationcenter}/bin/swaync-client --subscribe-waybar";
on-click = "${pkgs.swaynotificationcenter}/bin/swaync-client --toggle-panel --skip-wait";
on-click-middle = "${pkgs.swaynotificationcenter}/bin/swaync-client --toggle-dnd --skip-wait";
};
};
};
};
systemd.user.services.waybar = {
Unit.After = lib.mkForce "graphical-session.target";
Service.Slice = "app-graphical.slice";
};
home.packages = [
pkgs.pavucontrol
];
}

View file

@ -1,66 +0,0 @@
{
config,
lib,
pkgs,
...
}: {
programs.wlogout = {
enable = true;
layout = let
systemd = let
systemd = lib.getExe' pkgs.systemd;
in {
loginctl = systemd "loginctl";
systemctl = systemd "systemctl";
};
in [
{
action = "${systemd.loginctl} lock-session";
keybind = "l";
label = "lock";
text = "Lock";
}
{
action = "${systemd.systemctl} hibernate";
keybind = "h";
label = "hibernate";
text = "Hibernate";
}
{
action = "${
systemd.loginctl
} terminate-user ${
config.home.username
}";
keybind = "q";
label = "logout";
text = "Logout";
}
{
action = "${systemd.systemctl} poweroff";
keybind = "p";
label = "shutdown";
text = "Shutdown";
}
{
action = "${systemd.systemctl} suspend";
keybind = "s";
label = "suspend";
text = "Suspend";
}
{
action = "${systemd.systemctl} reboot";
keybind = "r";
label = "reboot";
text = "Reboot";
}
];
};
}

View file

@ -1,35 +0,0 @@
{config, ...}: {
xdg = {
enable = true;
cacheHome = config.home.homeDirectory + "/.local/cache";
mimeApps = {
enable = true;
defaultApplications = {
"default-web-browser" = ["firefox.desktop"];
"text/html" = ["firefox.desktop"];
"x-scheme-handler/http" = ["firefox.desktop"];
"x-scheme-handler/https" = ["firefox.desktop"];
"x-scheme-handler/about" = ["firefox.desktop"];
"x-scheme-handler/unknown" = ["firefox.desktop"];
"x-scheme-handler/chrome" = ["chromium-browser.desktop"];
"inode/directory" = ["yazi.desktop"];
"application/pdf" = ["org.pwmt.zathura-pdf-mupdf.desktop"];
"image/png" = ["org.gnome.gThumb.desktop"];
"image/svg" = [" org.gnome.gThumb.desktop"];
"image/jpeg" = ["org.gnome.gThumb.desktop"];
"image/gif" = [" org.gnome.gThumb.desktop"];
"video/mp4" = ["io.github.celluloid_player.Celluloid.desktop"];
"video/avi" = ["io.github.celluloid_player.Celluloid.desktop"];
"video/mkv" = ["io.github.celluloid_player.Celluloid.desktop"];
};
};
userDirs = {
enable = true;
createDirectories = true;
extraConfig = {
XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots";
};
};
};
}

View file

@ -1,9 +0,0 @@
{inputs, ...}: {
imports = [inputs.nix-flatpak.homeManagerModules.nix-flatpak];
services.flatpak.packages = [
{
flatpakref = "https://sober.vinegarhq.org/sober.flatpakref";
sha256 = "1pj8y1xhiwgbnhrr3yr3ybpfis9slrl73i0b1lc9q89vhip6ym2l";
}
];
}

View file

@ -1,17 +0,0 @@
{lib, ...}: {
services.gammastep = {
enable = true;
tray = true;
provider = "geoclue2";
};
systemd.user.services.gammastep = {
Unit = {
PartOf = lib.mkForce [];
After = lib.mkForce ["graphical-session.target"];
};
Service = {
Slice = lib.mkForce "background-graphical.slice";
};
};
}

View file

@ -1,27 +0,0 @@
{lib, ...}: let
inherit (builtins) readFile;
in {
services.swaync = {
enable = true;
style = readFile ./style.css;
settings = {
positionX = "right";
positionY = "top";
layer = "overlay";
control-center-layer = "top";
layer-shell = true;
cssPriority = "application";
control-center-margin-top = 0;
control-center-margin-bottom = 0;
control-center-margin-right = 0;
control-center-margin-left = 0;
notification-2fa-action = true;
notification-inline-replies = false;
notification-icon-size = 64;
notification-body-image-height = 100;
notification-body-image-width = 200;
};
};
# systemd.user.services.swaync.Service.Environment = "WAYLAND_DISPLAY=wayland-1";
systemd.user.services.swaync.Unit.ConditionEnvironment = lib.mkForce "";
}

View file

@ -1,5 +0,0 @@
_: {
services.syncthing = {
enable = true;
};
}

View file

@ -1,3 +0,0 @@
{
services.udiskie.enable = true;
}

View file

@ -1,10 +0,0 @@
_: {
imports = [
./programs
./shell
];
home.sessionVariables = {
EDITOR = "nvim";
};
}

View file

@ -1,18 +0,0 @@
{
osConfig,
config,
lib,
...
}: let
in {
programs.foot = {
enable = true;
settings = {
main = {
term = "xterm-256color";
font = "monospace:size=14";
shell = "${lib.getExe config.programs.fish.package}";
};
};
};
}

View file

@ -1,16 +0,0 @@
_: {
programs.gnome-terminal = {
enable = true;
showMenubar = true;
profile = {
"4621184a-b921-42cf-80a0-7784516606f2" = {
default = true;
audibleBell = false;
allowBold = true;
boldIsBright = true;
visibleName = "default";
font = "Intel One Mono 14";
};
};
};
}

View file

@ -1,71 +0,0 @@
{
programs.wezterm = {
enable = true;
# package = inputs.wezterm.packages.${pkgs.system}.default;
extraConfig = ''
local w = require('wezterm')
local function is_vim(pane)
return pane:get_user_vars().IS_NVIM == 'true'
end
local direction_keys = {
h = 'Left',
j = 'Down',
k = 'Up',
l = 'Right',
}
local function split_nav(resize_or_move, key)
return {
key = key,
mods = resize_or_move == 'resize' and 'META' or 'CTRL',
action = w.action_callback(function(win, pane)
if is_vim(pane) then
win:perform_action({
SendKey = { key = key, mods = resize_or_move == 'resize' and 'META' or 'CTRL' },
}, pane)
else
if resize_or_move == 'resize' then
win:perform_action({ AdjustPaneSize = { direction_keys[key], 3 } }, pane)
else
win:perform_action({ ActivatePaneDirection = direction_keys[key] }, pane)
end
end
end),
}
end
return {
enable_wayland = false,
front_end = "WebGpu",
hide_tab_bar_if_only_one_tab = true,
show_new_tab_button_in_tab_bar = false,
harfbuzz_features = { "ss01", "ss03" },
leader = { key = " ", mods = "CTRL", timeout_milliseconds = 1000 },
keys = {
{
mods = "LEADER",
key = "-",
action = wezterm.action.SplitVertical { domain = "CurrentPaneDomain" }
},
{
mods = "LEADER",
key = "=",
action = wezterm.action.SplitHorizontal { domain = "CurrentPaneDomain" }
},
split_nav('move', 'h'),
split_nav('move', 'j'),
split_nav('move', 'k'),
split_nav('move', 'l'),
split_nav('resize', 'h'),
split_nav('resize', 'j'),
split_nav('resize', 'k'),
split_nav('resize', 'l'),
},
}
'';
};
}

View file

@ -1,19 +0,0 @@
{pkgs, ...}: {
programs.bat = {
enable = true;
config.theme = "base16";
};
home = {
sessionVariables = {
MANPAGER = "sh -c 'col -bx | bat --language man' ";
MANROFFOPT = "-c";
};
packages = with pkgs.bat-extras; [
batman
];
shellAliases.man = "batman";
};
}

View file

@ -1,23 +0,0 @@
{pkgs, ...}: {
imports = [
./bat.nix
./git.nix
./gnupg.nix
./tmux.nix
./direnv.nix
./nix-index.nix
./yazi.nix
];
home.packages = with pkgs; [
# archives
zip
unzip
unrar
# utils
fd
file
ripgrep
];
}

View file

@ -1,8 +0,0 @@
{
programs = {
direnv = {
enable = true;
nix-direnv.enable = true;
};
};
}

View file

@ -1,54 +0,0 @@
{
programs.git = {
enable = true;
userName = "Anthony Rodriguez";
userEmail = "anthony@nezia.dev";
signing = {
signByDefault = true;
key = "EE3BE97C040A86CE";
};
extraConfig = {
push.autoSetupRemote = true;
init = {
defaultBranch = "main";
};
};
};
programs.lazygit = {
enable = true;
};
home.shellAliases = {
lg = "lazygit";
g = "git";
gs = "git status";
gsh = "git show HEAD";
gshs = "DELTA_FEATURES=+side-by-side git show HEAD";
ga = "git add";
gaa = "git add :/";
gap = "git add -p";
gc = "git commit";
gca = "git commit --amend";
gcm = "git commit --message";
gcf = "git commit --fixup";
gk = "git checkout";
gkp = "git checkout -p";
gd = "git diff";
gds = "DELTA_FEATURES=+side-by-side git diff";
gdc = "git diff --cached";
gdcs = "DELTA_FEATURES=+side-by-side git diff --cached";
gf = "git fetch";
gl = "git log";
glp = "git log -p";
glps = "DELTA_FEATURES=+side-by-side git log -p";
gp = "git push";
gpf = "git push --force-with-lease";
gr = "git reset";
gra = "git reset :/";
grp = "git reset -p";
gt = "git stash";
gtp = "git stash pop";
gu = "git pull";
};
}

View file

@ -1,8 +0,0 @@
{
programs.gpg.enable = true;
services.gpg-agent = {
enable = true;
enableBashIntegration = true;
enableFishIntegration = true;
};
}

View file

@ -1,11 +0,0 @@
{inputs, ...}: {
imports = [inputs.nix-index-db.hmModules.nix-index];
programs = {
nix-index = {
enable = true;
symlinkToCacheHome = true; # needed for comma
};
command-not-found.enable = false;
nix-index-database.comma.enable = true;
};
}

View file

@ -1,23 +0,0 @@
{pkgs, ...}: {
programs.tmux = {
enable = true;
prefix = "C-space";
escapeTime = 10;
clock24 = true;
keyMode = "vi";
mouse = true;
baseIndex = 1;
extraConfig = ''
set-option -a terminal-features "''${TERM}:RGB"
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -v -c "#{pane_current_path}"
bind '%' split-window -h -c "#{pane_current_path}"
bind C-k clear-history
'';
plugins = with pkgs; [
tmuxPlugins.vim-tmux-navigator
tmuxPlugins.yank
];
};
programs.fzf.tmux.enableShellIntegration = true;
}

View file

@ -1,26 +0,0 @@
{pkgs, ...}: {
programs.yazi = let
# https://github.com/iynaix/dotfiles/blob/8bb1568019ea26f034ac1af9c499b3ff102391a5/home-manager/shell/yazi.nix#L9-L11
mkYaziPlugin = name: text: {
"${name}" = toString (pkgs.writeTextDir "${name}.yazi/init.lua" text) + "/${name}.yazi";
};
in {
enable = true;
enableFishIntegration = true;
plugins = mkYaziPlugin "smart-enter" ''
return {
entry = function()
local h = cx.active.current.hovered
ya.manager_emit(h and h.cha.is_dir and "enter" or "open", { hovered = true })
end,
}
'';
keymap.manager.prepend_keymap = [
{
on = "l";
run = "plugin --sync smart-enter";
desc = "Enter the child directory, or open the file";
}
];
};
}

View file

@ -1,48 +0,0 @@
{
config,
pkgs,
lib,
...
}: let
starshipTransient = lib.strings.optionalString config.programs.starship.enableTransience ''
function starship_transient_prompt_func
starship module character
end
function starship_transient_rprompt_func
starship module cmd_duration
end
'';
in {
programs.fish = {
enable = true;
interactiveShellInit =
starshipTransient
+ ''
set fish_greeting # Disable greeting
fish_vi_key_bindings # Enable Vi mode
'';
plugins = [
{
name = "fzf";
inherit (pkgs.fishPlugins.fzf) src;
}
{
name = "autopair";
inherit (pkgs.fishPlugins.autopair) src;
}
];
};
programs.bash = {
enable = true;
initExtra = ''
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
then
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
fi
'';
};
}

View file

@ -1,30 +0,0 @@
{
programs.nushell = {
enable = true;
extraConfig = ''
let carapace_completer = {|spans|
carapace $spans.0 nushell ...$spans | from json
}
$env.config = {
show_banner: false,
completions: {
case_sensitive: false # case-sensitive completions
quick: true # set to false to prevent auto-selecting completions
partial: true # set to false to prevent partial filling of the prompt
algorithm: "fuzzy" # prefix or fuzzy
external: {
# set to false to prevent nushell looking into $env.PATH to find more suggestions
enable: true
# set to lower can improve completion performance at the cost of omitting some options
max_results: 100
completer: $carapace_completer # check 'carapace_completer'
}
}
}
'';
};
programs.carapace = {
enable = true;
};
}

View file

@ -1,9 +0,0 @@
{
programs.starship = {
enable = true;
enableTransience = true;
settings = {
add_newline = true;
};
};
}

View file

@ -1,6 +0,0 @@
{
programs.zoxide = {
enable = true;
enableBashIntegration = false;
};
}

View file

@ -1,31 +0,0 @@
{
config,
inputs,
...
}: let
inherit (config.local.systemVars) username;
in {
imports = [
inputs.home-manager.nixosModules.default
];
home-manager = {
backupFileExtension = "backup";
useGlobalPkgs = true;
useUserPackages = true;
};
home-manager.users.${username} = {
home = {
homeDirectory = "/home/${username}";
stateVersion = "24.05";
};
programs.home-manager.enable = true;
};
programs = {
# make HM-managed GTK stuff work
dconf.enable = true;
};
}

View file

@ -1,26 +0,0 @@
{
pkgs,
lib,
inputs,
...
}: {
imports = [
inputs.lanzaboote.nixosModules.lanzaboote
];
environment.systemPackages = [
# For debugging and troubleshooting Secure Boot.
pkgs.sbctl
];
# Lanzaboote currently replaces the systemd-boot module.
# This setting is usually set to true in configuration.nix
# generated at installation time. So we force it to false
# for now.
boot.loader.systemd-boot.enable = lib.mkForce false;
boot.lanzaboote = {
enable = true;
pkiBundle = "/etc/secureboot";
};
}

View file

@ -1,3 +0,0 @@
{
networking.nameservers = ["1.1.1.1" "1.0.0.1"];
}

View file

@ -1,13 +0,0 @@
{config, ...}: {
users.users.${config.local.systemVars.username} = {
isNormalUser = true;
description = config.local.homeVars.fullName or "User";
extraGroups = [
"networkmanager"
"audio"
"video"
"wheel"
"plugdev"
];
};
}

View file

@ -1,15 +0,0 @@
{
imports = [
./core
./nix
./hardware/printing.nix
./hardware/fwupd.nix
./network
./programs
./services
];
}

View file

@ -1,3 +0,0 @@
{
services.fprintd.enable = true;
}

View file

@ -1,3 +0,0 @@
{
services.fwupd.enable = true;
}

View file

@ -1,9 +0,0 @@
{
inputs,
pkgs,
...
}: {
services.udev.packages = [
inputs.self.packages.${pkgs.system}.mcuxpresso
];
}

View file

@ -1,28 +0,0 @@
{pkgs, ...}: {
services = {
# setup printing service
printing.enable = true;
avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
printing.drivers = [
pkgs.gutenprint
pkgs.hplip
];
udev.packages = [
pkgs.sane-airscan
pkgs.utsushi
];
};
hardware.sane.enable = true; # enables support for SANE scanners
hardware.sane.extraBackends = [
pkgs.sane-airscan # generic
pkgs.hplip # HP
pkgs.utsushi # other printers
];
}

View file

@ -1,37 +0,0 @@
{pkgs, ...}: {
hardware.uni-sync = {
enable = true;
devices = [
{
device_id = "VID:3314/PID:41218/SN:6243168001";
sync_rgb = true;
channels = [
{
mode = "Manual";
speed = 60;
}
{
mode = "Manual";
speed = 60;
}
{
mode = "Manual";
speed = 60;
}
{
mode = "Manual";
speed = 60;
}
];
}
];
};
systemd.services.uni-sync = {
enable = true;
serviceConfig = {
ExecStart = "${pkgs.uni-sync}/bin/uni-sync";
};
wantedBy = ["multi-user.target"];
};
}

View file

@ -1,7 +0,0 @@
{pkgs, ...}: {
hardware.keyboard.qmk.enable = true;
environment.systemPackages = with pkgs; [
via
];
services.udev.packages = [pkgs.via];
}

View file

@ -1,14 +0,0 @@
{config, ...}: {
networking = {
inherit (config.local.systemVars) hostName;
networkmanager = {
enable = true;
dns = "systemd-resolved";
wifi.powersave = true;
};
};
services.resolved = {
enable = true;
dnsovertls = "opportunistic";
};
}

View file

@ -1,17 +0,0 @@
{pkgs, ...}: {
imports = [./nixpkgs.nix ./nh.nix];
environment.systemPackages = [pkgs.git];
nix = {
package = pkgs.lix;
settings = {
accept-flake-config = true;
warn-dirty = false;
auto-optimise-store = true;
trusted-users = ["root" "@wheel"];
experimental-features = [
"nix-command"
"flakes"
];
};
};
}

View file

@ -1,9 +0,0 @@
{
programs.nh = {
enable = true;
clean = {
enable = true;
extraArgs = "--keep-since 30d --keep 3";
};
};
}

View file

@ -1,13 +0,0 @@
{
nixpkgs = {
config = {
allowUnfree = true;
permittedInsecurePackages = [
"cinny-4.2.3"
"cinny-unwrapped-4.2.3"
"segger-jlink-qt4-810"
];
segger-jlink.acceptLicense = true;
};
};
}

View file

@ -1,5 +0,0 @@
{
imports = [
./fonts.nix
];
}

View file

@ -1,24 +0,0 @@
{pkgs, ...}: {
fonts = {
enableDefaultPackages = false;
packages = [
pkgs.noto-fonts
pkgs.noto-fonts-cjk-sans
pkgs.noto-fonts-extra
pkgs.intel-one-mono
pkgs.noto-fonts-color-emoji
pkgs.nerd-fonts._0xproto
pkgs.nerd-fonts.symbols-only
];
fontconfig = {
enable = true;
defaultFonts = {
serif = ["Noto Serif"];
sansSerif = ["Inter Medium"];
monospace = ["0xProto Nerd Font"];
emoji = ["Noto Color Emoji"];
};
};
};
}

View file

@ -1,15 +0,0 @@
_: {
programs = {
steam = {
enable = true;
};
gamemode.enable = true;
gamescope.enable = true;
coolercontrol = {
enable = true;
nvidiaSupport = true;
};
};
}

View file

@ -1,40 +0,0 @@
{pkgs, ...}: {
services.xserver = {
enable = true;
displayManager.gdm.enable = true;
desktopManager.gnome = {
enable = true;
extraGSettingsOverridePackages = [pkgs.mutter];
extraGSettingsOverrides = ''
[org.gnome.mutter]
experimental-features=['scale-monitor-framebuffer']
'';
};
};
environment.gnome.excludePackages = with pkgs; [
gnome-console
gnome-photos
gnome-tour
gnome-software
iagno
hitori
atomix
gnome-contacts
gnome-initial-setup
gnome-terminal
gnome-music
gedit
cheese
tali
epiphany
geary
yelp
];
environment.systemPackages = with pkgs; [
gnome-tweaks
gnome-power-manager
rhythmbox
];
}

View file

@ -1,33 +0,0 @@
{
inputs,
config,
lib,
pkgs,
...
}: {
environment.systemPackages = [
inputs.hyprland-qtutils.packages.${pkgs.system}.default
];
programs.hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland;
withUWSM = true;
systemd.setPath.enable = true;
};
# copied from https://github.com/linyinfeng/dotfiles/blob/91b0363b093303f57885cbae9da7f8a99bbb4432/nixos/profiles/graphical/niri/default.nix#L17-L29
security.pam.services.hyprlock.text = lib.mkIf config.services.fprintd.enable ''
account required pam_unix.so
# check passwork before fprintd
auth sufficient pam_unix.so try_first_pass likeauth
auth sufficient ${pkgs.fprintd}/lib/security/pam_fprintd.so
auth required pam_deny.so
password sufficient pam_unix.so nullok yescrypt
session required pam_env.so conffile=/etc/pam/environment readenv=0
session required pam_unix.so
'';
}

View file

@ -1,7 +0,0 @@
{
services = {
displayManager.sddm.enable = true;
displayManager.sddm.wayland.enable = true;
desktopManager.plasma6.enable = true;
};
}

View file

@ -1,32 +0,0 @@
{
inputs,
lib,
pkgs,
config,
...
}: {
imports = [
inputs.niri.nixosModules.niri
];
programs.niri = {
enable = true;
};
# copied from https://github.com/linyinfeng/dotfiles/blob/91b0363b093303f57885cbae9da7f8a99bbb4432/nixos/profiles/graphical/niri/default.nix#L17-L29
security.pam.services.swaylock.text = lib.mkIf config.services.fprintd.enable ''
account required pam_unix.so
# check passwork before fprintd
auth sufficient pam_unix.so try_first_pass likeauth
auth sufficient ${pkgs.fprintd}/lib/security/pam_fprintd.so
auth required pam_deny.so
password sufficient pam_unix.so nullok yescrypt
session required pam_env.so conffile=/etc/pam/environment readenv=0
session required pam_unix.so
'';
environment.systemPackages = [pkgs.xwayland-satellite];
}

View file

@ -1,14 +0,0 @@
{pkgs, ...}: {
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
config = {
common.default = ["gtk"];
hyprland.default = ["gtk" "hyprland"];
};
extraPortals = [
pkgs.xdg-desktop-portal-gtk
];
};
}

View file

@ -1,3 +0,0 @@
{
hardware.brillo.enable = true;
}

View file

@ -1,9 +0,0 @@
{pkgs, ...}: {
imports = [
./docker.nix
./gnupg.nix
./pipewire.nix
./kmscon.nix
];
services.udev.packages = [pkgs.segger-jlink];
}

View file

@ -1,8 +0,0 @@
{pkgs, ...}: {
virtualisation.podman = {
enable = true;
dockerCompat = true;
};
environment.systemPackages = [pkgs.distrobox];
}

View file

@ -1,12 +0,0 @@
_: {
documentation = {
enable = true;
man = {
enable = true;
man-db.enable = false;
mandoc.enable = true;
generateCaches = true;
};
};
}

View file

@ -1,3 +0,0 @@
_: {
services.flatpak.enable = true;
}

View file

@ -1,91 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib) mkAfter removePrefix removeSuffix;
srv = config.services.forgejo.settings.server;
# https://github.com/isabelroses/dotfiles/blob/06f8f70914c8e672541a52563ee624ce2e62adfb/modules/nixos/services/selfhosted/forgejo.nix#L19-L23
theme = pkgs.fetchzip {
url = "https://github.com/catppuccin/gitea/releases/download/v1.0.1/catppuccin-gitea.tar.gz";
sha256 = "et5luA3SI7iOcEIQ3CVIu0+eiLs8C/8mOitYlWQa/uI=";
stripRoot = false;
};
in {
services = {
forgejo = {
enable = true;
package = pkgs.forgejo;
lfs.enable = true;
database.type = "postgres";
dump = {
enable = true;
type = "tar.xz";
};
settings = {
server = {
DOMAIN = "git.nezia.dev";
HTTP_PORT = 1849;
ROOT_URL = "https://${srv.DOMAIN}/";
HTTP_ADDR = "localhost";
};
service = {
DISABLE_REGISTRATION = true;
};
federation = {
ENABLED = true;
};
ui = {
DEFAULT_THEME = "catppuccin-mocha-lavender";
THEMES = builtins.concatStringsSep "," (
["auto,forgejo-auto,forgejo-dark,forgejo-light,arc-gree,gitea"]
++ (map (name: removePrefix "theme-" (removeSuffix ".css" name)) (
builtins.attrNames (builtins.readDir theme)
))
);
};
actions = {
ENABLED = true;
DEFAULT_ACTIONS_URL = "https://code.forgejo.org";
};
};
};
caddy = {
enable = true;
virtualHosts."git.nezia.dev".extraConfig = ''
reverse_proxy * localhost:${toString srv.HTTP_PORT}
'';
};
};
# https://github.com/isabelroses/dotfiles/blob/06f8f70914c8e672541a52563ee624ce2e62adfb/modules/nixos/services/selfhosted/forgejo.nix#L59-L71
systemd.services = {
forgejo = {
preStart = let
inherit (config.services.forgejo) stateDir;
in
mkAfter ''
rm -rf ${stateDir}/custom/public/assets
mkdir -p ${stateDir}/custom/public/assets
ln -sf ${theme} ${stateDir}/custom/public/assets/css
'';
};
};
networking.firewall = {
enable = true;
allowedTCPPorts = [80 443];
# If you're using nftables (default in newer NixOS)
extraForwardRules = ''
ip6 saddr { ::/0 } accept
'';
};
# Ensure IPv6 is enabled
networking.enableIPv6 = true;
}

View file

@ -1,12 +0,0 @@
{pkgs, ...}: {
services = {
# needed for GNOME services outside of GNOME Desktop
dbus.packages = with pkgs; [
gcr
gnome-settings-daemon
];
gnome.gnome-keyring.enable = true;
gvfs.enable = true;
};
}

View file

@ -1,6 +0,0 @@
{
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
}

View file

@ -1,75 +0,0 @@
{
config,
inputs,
lib,
pkgs,
...
}:
# thanks https://git.jacekpoz.pl/poz/niksos/src/commit/f8d5e7ccd9c769f7c0b564f10dff419285e75248/modules/services/greetd.nix
let
inherit (lib) getExe getExe';
inherit (inputs.hyprland.packages.${pkgs.stdenv.system}) hyprland;
hyprctl = getExe' hyprland "hyprctl";
Hyprland = getExe' hyprland "Hyprland";
greeter = getExe pkgs.greetd.gtkgreet;
hyprlandConfig =
pkgs.writeText "greetd-hyprland-config"
''
misc {
force_default_wallpaper=0
focus_on_activate=1
}
animations {
enabled=0
first_launch_animation=0
}
workspace=1,default:true,gapsout:0,gapsin:0,border:false,decorate:false
exec-once=[workspace 1;fullscreen;noanim] ${greeter} -l; ${hyprctl} dispatch exit
exec-once=${hyprctl} dispatch focuswindow ${greeter}
'';
in {
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${Hyprland} --config ${hyprlandConfig}";
user = config.local.systemVars.username;
};
};
};
programs.regreet = {
enable = true;
};
security.pam.services = {
greetd.enableGnomeKeyring = true;
login.enableGnomeKeyring = true;
gdm-password.enableGnomeKeyring = true;
greetd.fprintAuth = false;
};
environment.etc."greetd/environments".text = let
environments = [
{
name = "Hyprland";
condition = with config.programs.hyprland; enable && !withUWSM;
}
{
name = "uwsm start -S hyprland-uwsm.desktop";
condition = with config.programs.hyprland; enable && withUWSM;
}
{
name = "sway";
condition = config.programs.sway.enable;
}
];
in
builtins.concatStringsSep "\n" (map (env: env.name) (builtins.filter (env: env.condition) environments));
}

View file

@ -1,33 +0,0 @@
{
services.kanata = {
enable = true;
keyboards.default = {
extraDefCfg = "process-unmapped-keys yes";
config = ''
(defsrc
caps a s d f j k l ;
)
(defvar
tap-time 150
hold-time 200
)
(defalias
escctrl (tap-hold 100 100 esc lctl)
a (tap-hold $tap-time $hold-time a lmet)
s (tap-hold $tap-time $hold-time s lalt)
d (tap-hold $tap-time $hold-time d lsft)
f (tap-hold $tap-time $hold-time f lctl)
j (tap-hold $tap-time $hold-time j rctl)
k (tap-hold $tap-time $hold-time k rsft)
l (tap-hold $tap-time $hold-time l ralt)
; (tap-hold $tap-time $hold-time ; rmet)
)
(deflayer base
@escctrl @a @s @d @f @j @k @l @;
)
'';
};
};
}

View file

@ -1,17 +0,0 @@
{
services = {
keyd = {
enable = true;
keyboards = {
default = {
ids = ["*"];
settings = {
main = {
capslock = "overload(control, esc)";
};
};
};
};
};
};
}

View file

@ -1,15 +0,0 @@
{pkgs, ...}: {
services.kmscon = {
enable = true;
fonts = [
{
name = "0xProto Nerd Font";
package = pkgs.nerd-fonts._0xproto;
}
];
extraConfig = ''
font-size=13
font-dpi=144
'';
};
}

View file

@ -1,15 +0,0 @@
{
location.provider = "geoclue2";
services.geoclue2 = {
enable = true;
geoProviderUrl = "https://beacondb.net/v1/geolocate";
submissionUrl = "https://beacondb.net/v2/geosubmit";
submissionNick = "geoclue";
appConfig.gammastep = {
isAllowed = true;
isSystem = false;
};
};
}

View file

@ -1,9 +0,0 @@
{
services.logind = {
lidSwitch = "suspend";
extraConfig = ''
HandlePowerKey=ignore
HandlePowerKeyLongPress=poweroff
'';
};
}

View file

@ -1,6 +0,0 @@
{pkgs, ...}: {
services.protonmail-bridge = {
enable = true;
package = pkgs.protonmail-bridge;
};
}

View file

@ -1,18 +0,0 @@
{inputs, ...}: {
imports = [
inputs.nix-gaming.nixosModules.pipewireLowLatency
];
services = {
pulseaudio.enable = false;
pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
lowLatency.enable = true;
};
};
# rtkit is optional but recommended
security.rtkit.enable = true;
}

View file

@ -1,8 +0,0 @@
{
services = {
power-profiles-daemon.enable = true;
# battery info
upower.enable = true;
};
}

View file

@ -1,61 +0,0 @@
{
config,
pkgs,
...
}: {
age.secrets.searx-env-file.file = ../../../secrets/searx-env-file.age;
services = {
searx = {
enable = true;
package = pkgs.searxng;
environmentFile = config.age.secrets.searx-env-file.path;
settings = {
search = {
safe_search = 1; # 0 = None, 1 = Moderate, 2 = Strict
autocomplete = "google"; # Existing autocomplete backends: "dbpedia", "duckduckgo", "google", "startpage", "swisscows", "qwant", "wikipedia" - leave blank to turn it off by default
default_lang = "en";
};
server = {
secret_key = "@SEARX_SECRET_KEY@";
port = 8888; # Internal port
bind_address = "localhost"; # Only listen locally
base_url = "https://search.nezia.dev/";
image_proxy = true;
default_http_headers = {
X-Content-Type-Options = "nosniff";
X-XSS-Protection = "1; mode=block";
X-Download-Options = "noopen";
X-Robots-Tag = "noindex, nofollow";
Referrer-Policy = "no-referrer";
};
};
engines = [
{
name = "qwant";
disabled = true;
}
];
};
};
caddy = {
enable = true;
virtualHosts."search.nezia.dev" = {
extraConfig = ''
encode gzip
reverse_proxy localhost:8888 {
header_up Host {host}
header_up X-Real-IP {remote_addr}
header_up X-Forwarded-For {remote_addr}
header_up X-Forwarded-Proto {scheme}
}
'';
};
};
};
# Open required ports
networking.firewall = {
allowedTCPPorts = [80 443]; # For Caddy
};
}

View file

@ -1,8 +0,0 @@
{
services = {
syncthing = {
enable = true;
};
};
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; # Don't create default ~/Sync folder
}

View file

@ -1,21 +0,0 @@
{
inputs,
pkgs,
...
}: {
services.caddy.enable = true;
services.caddy.virtualHosts = {
"www.nezia.dev" = {
extraConfig = ''
redir https://nezia.dev{uri}
'';
};
"nezia.dev" = {
extraConfig = ''
root * ${inputs."nezia_dev".packages.${pkgs.system}.default}
file_server
encode gzip
'';
};
};
}

View file

@ -148,11 +148,11 @@
}, },
"locked": { "locked": {
"dir": "pkgs/firefox-addons", "dir": "pkgs/firefox-addons",
"lastModified": 1736510876, "lastModified": 1736913802,
"narHash": "sha256-gQtPuV+VH1ZZUAZrwxo6WNMdZao+5zIlMLUBBD+UatE=", "narHash": "sha256-72be03HWS5Q8I1W9hlWRVicZxL5MJURVKbnJGIcbjIE=",
"owner": "rycee", "owner": "rycee",
"repo": "nur-expressions", "repo": "nur-expressions",
"rev": "da021d3646bf8fc6c7a74ad6edbab6fd7e59b828", "rev": "79a77a7d0b22e82d52a90055cc8206447ab85285",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
@ -445,11 +445,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1736508663, "lastModified": 1736785676,
"narHash": "sha256-ZOaGwa+WnB7Zn3YXimqjmIugAnHePdXCmNu+AHkq808=", "narHash": "sha256-TY0jUwR3EW0fnS0X5wXMAVy6h4Z7Y6a3m+Yq++C9AyE=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "2532b500c3ed2b8940e831039dcec5a5ea093afc", "rev": "fc52a210b60f2f52c74eac41a8647c1573d2071d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -623,11 +623,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1736534546, "lastModified": 1736873552,
"narHash": "sha256-1qws+RifbJO6BQ50hNkmanKASmvpyhfnP8qXcIiOGAo=", "narHash": "sha256-VByeYPOu3I0a5r5Nn45loSaEV8M9fmZrTByUdu9sjfY=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "Hyprland", "repo": "Hyprland",
"rev": "a8b568c6c451cdce3c8d40ae010247be3f25728b", "rev": "25add26881d7b98d2b80eb7a95d3aee0449b72b9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -725,11 +725,11 @@
"systems": "systems_4" "systems": "systems_4"
}, },
"locked": { "locked": {
"lastModified": 1736524264, "lastModified": 1736774415,
"narHash": "sha256-9m/Ha7hrxtbBl4UylZTYzTT/8a6Sy5DvTmBJrcQ6FwQ=", "narHash": "sha256-pb8v7axHdVKFGhQHEAxIuZP/9REsmlyuDW5eLGIplLc=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-qtutils", "repo": "hyprland-qtutils",
"rev": "b0214844d8aaa7b46b5735666b9a9edcbe45cef8", "rev": "534cd1badc46ec9bdd986ab41ad2408bf845961e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -789,11 +789,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1736514927, "lastModified": 1736702298,
"narHash": "sha256-Xd+GIAy8cHkCyFbmtJ/E02fSBq18JgVggc1r5Ox1b20=", "narHash": "sha256-1sjfbzsJo37H9KqSp6kJUgTlzKEGiLPMF8k6IGo2D2Y=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlock", "repo": "hyprlock",
"rev": "a5e346783ff0e65b1bf23e0eb9ae473dd6ab48c0", "rev": "4f964371ccbea65331ee151c4f87d793cb7ac110",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1080,11 +1080,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable" "xwayland-satellite-unstable": "xwayland-satellite-unstable"
}, },
"locked": { "locked": {
"lastModified": 1736520719, "lastModified": 1736884105,
"narHash": "sha256-3hL4U5aqfelsX2QoDa0JVavRzuTKJE2M1I3tXZXsAVQ=", "narHash": "sha256-WHxMcVuEmJvToC5DEVnSLwUrpHgJyqUqd/O8gZuaQsU=",
"owner": "sodiboo", "owner": "sodiboo",
"repo": "niri-flake", "repo": "niri-flake",
"rev": "dfba1ea03856f26db6936c9999951719de56e367", "rev": "a4e712bccfbe0526327c10b67f765b49cbbd7701",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1096,16 +1096,16 @@
"niri-stable": { "niri-stable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1731483594, "lastModified": 1736614405,
"narHash": "sha256-Qjf7alRbPPERfiZsM9EMKX+HwjESky1tieh5PJIkLwE=", "narHash": "sha256-AJ1rlgNOPb3/+DbS5hkhm21t6Oz8IgqLllwmZt0lyzk=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "75c79116a7e40cbc0e110ce0cdd500e896458679", "rev": "e05bc269e678ecf828b96ae79c991c13b00b38a5",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "YaLTeR", "owner": "YaLTeR",
"ref": "v0.1.10.1", "ref": "v25.01",
"repo": "niri", "repo": "niri",
"type": "github" "type": "github"
} }
@ -1113,11 +1113,11 @@
"niri-unstable": { "niri-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1736518221, "lastModified": 1736879117,
"narHash": "sha256-c+3Qa0ft19mOUAs7fXZRxNECFHEJgXCa5edgljcuVMc=", "narHash": "sha256-elG0TiWNFwgfTLrTTZVZQp3dEN6F6Qds6UF6BVxCIHs=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "279c8b6aa29e8e5692aa6f56f0721a11134ca42b", "rev": "a3cbe3514ba195bf74815008f75819944f888527",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1149,11 +1149,11 @@
"umu": "umu" "umu": "umu"
}, },
"locked": { "locked": {
"lastModified": 1736499181, "lastModified": 1736818546,
"narHash": "sha256-G1DHB4JJH/iWe4dhxNKq2jBxguNZEk5oUbX6jqPpX8w=", "narHash": "sha256-rehuAIJzjQ5/vBar7xvPzHzqrxcHHDBHqqhsDZHu55M=",
"owner": "fufexan", "owner": "fufexan",
"repo": "nix-gaming", "repo": "nix-gaming",
"rev": "58c0f214331ce8fb13e6a4bfb40f30000bd2a10e", "rev": "1a9c52cd7517137c9cc74d4b73dfd63678e17c5f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1169,11 +1169,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1736440205, "lastModified": 1736652904,
"narHash": "sha256-QJgTI//KEGuEJC6FDxuI9Dq8PewIpnxD2NVx2/OHbfc=", "narHash": "sha256-8uolHABgroXqzs03QdulHp8H9e5kWQZnnhcda1MKbBM=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "a2200b499efa01ca8646173e94cdfcc93188f2b8", "rev": "271e5bd7c57e1f001693799518b10a02d1123b12",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1267,11 +1267,11 @@
}, },
"nixpkgs-stable_2": { "nixpkgs-stable_2": {
"locked": { "locked": {
"lastModified": 1736200483, "lastModified": 1736754065,
"narHash": "sha256-JO+lFN2HsCwSLMUWXHeOad6QUxOuwe9UOAF/iSl1J4I=", "narHash": "sha256-hcETjfECLklW1ND8svDvN0Nw6H/1qtuoz3rbFNQ1Lrk=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3f0a8ac25fb674611b98089ca3a5dd6480175751", "rev": "67e9c880898889470f153157a96b595e758167fc",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1347,11 +1347,11 @@
}, },
"nixpkgs_5": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1736344531, "lastModified": 1736798957,
"narHash": "sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc+c2c=", "narHash": "sha256-qwpCtZhSsSNQtK4xYGzMiyEDhkNzOCz/Vfu4oL2ETsQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "bffc22eb12172e6db3c5dde9e3e5628f8e3e7912", "rev": "9abb87b552b7f55ac8916b6fc9e5cb486656a2f3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1363,11 +1363,11 @@
}, },
"nixpkgs_6": { "nixpkgs_6": {
"locked": { "locked": {
"lastModified": 1736166416, "lastModified": 1736420959,
"narHash": "sha256-U47xeACNBpkSO6IcCm0XvahsVXpJXzjPIQG7TZlOToU=", "narHash": "sha256-dMGNa5UwdtowEqQac+Dr0d2tFO/60ckVgdhZU9q2E2o=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b30f97d8c32d804d2d832ee837d0f1ca0695faa5", "rev": "32af3611f6f05655ca166a0b1f47b57c762b5192",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1379,11 +1379,11 @@
}, },
"nixpkgs_7": { "nixpkgs_7": {
"locked": { "locked": {
"lastModified": 1736344531, "lastModified": 1736798957,
"narHash": "sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc+c2c=", "narHash": "sha256-qwpCtZhSsSNQtK4xYGzMiyEDhkNzOCz/Vfu4oL2ETsQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "bffc22eb12172e6db3c5dde9e3e5628f8e3e7912", "rev": "9abb87b552b7f55ac8916b6fc9e5cb486656a2f3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1573,11 +1573,11 @@
"systems": "systems_7" "systems": "systems_7"
}, },
"locked": { "locked": {
"lastModified": 1736520152, "lastModified": 1736946667,
"narHash": "sha256-0TClUw4txxpRiCFvDdKwDlSpEeYETT9ySUJRAy0ibEk=", "narHash": "sha256-7z13M0L4DK9srgXnTXFFnfQsYioL2BrkfQieRI7A7wo=",
"owner": "notashelf", "owner": "notashelf",
"repo": "nvf", "repo": "nvf",
"rev": "4df1cc3a7f161def084c6eca799e3a6c10dbf480", "rev": "45a6d9b890e97fe8183874aafb1f17b1335f8bdf",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1596,11 +1596,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1736527164, "lastModified": 1736549395,
"narHash": "sha256-sLfRtFIVsn3scpWGLQXyX/e9m1oJGKKINhDJTpEoJL0=", "narHash": "sha256-XzwkB62Tt5UYoL1jXiHzgk/qz2fUpGHExcSIbyGTtI0=",
"owner": "nix-community", "owner": "nix-community",
"repo": "plasma-manager", "repo": "plasma-manager",
"rev": "1756b31ae1649a98f6d0e8c075ca73d33259854e", "rev": "a53af7f1514ef4cce8620a9d6a50f238cdedec8b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -3871,11 +3871,11 @@
}, },
"locked": { "locked": {
"dir": "packaging/nix", "dir": "packaging/nix",
"lastModified": 1736271378, "lastModified": 1736743784,
"narHash": "sha256-j1TqXcffjqp/xmWvY9j4Johj1AdKiGXv94pNZHXEz6Y=", "narHash": "sha256-AOzUhOCk1pQboWmCI2BrQ/K7PygcOc5LTt/Wiht1JnY=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "f423d6683cac7037333fbf38db8d0cc94c984fda", "rev": "2b4eb95a37d8680deb9ec14415743334ec85202e",
"revCount": 880, "revCount": 898,
"submodules": true, "submodules": true,
"type": "git", "type": "git",
"url": "https://github.com/Open-Wine-Components/umu-launcher/" "url": "https://github.com/Open-Wine-Components/umu-launcher/"
@ -3912,11 +3912,11 @@
"systems": "systems_8" "systems": "systems_8"
}, },
"locked": { "locked": {
"lastModified": 1736493558, "lastModified": 1736883896,
"narHash": "sha256-BT5zGc97sGOVwwLz3BJrxmbOumuzgWso7RoWlHZA9rc=", "narHash": "sha256-Lx6MHiRD69xSpneaFTr6wjp9jX28ZkVt+glxTLonJc4=",
"owner": "abenz1267", "owner": "abenz1267",
"repo": "walker", "repo": "walker",
"rev": "e9762f648dde790e2a92c3849216104489c0412e", "rev": "f8690c097551de73f098ff1ab56ac2f62f821f88",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -8,14 +8,21 @@ in {
inputs.agenix.nixosModules.default inputs.agenix.nixosModules.default
]; ];
local = {
systemVars = {
hostName = "anastacia";
};
profiles.server.enable = true;
};
boot.tmp.cleanOnBoot = true; boot.tmp.cleanOnBoot = true;
zramSwap.enable = true;
networking.hostName = "anastacia";
networking.domain = ""; networking.domain = "";
services.openssh.enable = true; services.openssh.enable = true;
users.users.root.openssh.authorizedKeys.keys = [ users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEzs7SQH0Vjt9JHoXXmWy9fPU1I3rrRWV5magZFrI5al" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEzs7SQH0Vjt9JHoXXmWy9fPU1I3rrRWV5magZFrI5al"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHKEPlN/GU9nJZPleA77HH5NA+6vyhhM84fTSjEwnEgq" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHKEPlN/GU9nJZPleA77HH5NA+6vyhhM84fTSjEwnEgq"
]; ];
system.stateVersion = "23.11"; system.stateVersion = "23.11";
} }

View file

@ -1,114 +1,23 @@
{ {inputs, ...}: let
self,
inputs,
...
}: let
lib' = import ../shared/lib inputs.nixpkgs.lib; lib' = import ../shared/lib inputs.nixpkgs.lib;
mkSystem = args: mkSystem = args:
inputs.nixpkgs.lib.nixosSystem { inputs.nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs lib';}; specialArgs = {inherit inputs lib';};
modules = args.modules or []; modules = (args.modules or []) ++ [../modules];
}; };
base = [
../shared/nixosModules
"${self}/config/nixos"
"${self}/config/nixos/core/home-manager.nix"
"${self}/config/nixos/services/documentation.nix"
"${self}/config/nixos/services/location.nix"
"${self}/config/nixos/hardware/mcuxpresso.nix"
({
config,
specialArgs,
...
}: {
home-manager = {
users.${config.local.systemVars.username}.imports = [
"${self}/config/home-manager"
"${self}/config/home-manager/services/udiskie.nix"
"${self}/config/home-manager/services/syncthing.nix"
];
extraSpecialArgs = specialArgs;
};
})
];
graphical = [
"${self}/config/nixos/services/logind.nix"
"${self}/config/nixos/services/greetd.nix"
"${self}/config/nixos/programs/hyprland.nix"
"${self}/config/nixos/programs/xdg.nix"
"${self}/config/nixos/services/gnome.nix"
({config, ...}: {
home-manager.users.${config.local.systemVars.username}.imports = [
"${self}/config/home-manager/programs/waybar"
"${self}/config/home-manager/programs/walker.nix"
"${self}/config/home-manager/programs/hypr"
"${self}/config/home-manager/programs/wlogout.nix"
"${self}/config/home-manager/services/swaync"
"${self}/config/home-manager/terminal/emulators/foot.nix"
"${self}/config/home-manager/services/gammastep.nix"
];
})
];
gaming = [
../config/nixos/programs/games.nix
../config/nixos/services/flatpak.nix
../config/nixos/hardware/uni-sync.nix
({config, ...}: {
home-manager.users.${config.local.systemVars.username}.imports = [
"${self}/config/home-manager/programs/games"
"${self}/config/home-manager/services/flatpak.nix"
];
})
];
laptop = [
"${self}/config/nixos/core/lanzaboote.nix"
"${self}/config/nixos/hardware/fprintd.nix"
"${self}/config/nixos/services/kanata.nix"
"${self}/config/nixos/services/power.nix"
"${self}/config/nixos/services/brightness.nix"
];
in { in {
vamos = mkSystem { vamos = mkSystem {
modules = modules = [
[
./vamos ./vamos
inputs.nixos-hardware.nixosModules.framework-13-7040-amd inputs.nixos-hardware.nixosModules.framework-13-7040-amd
] ];
++ base
++ graphical
++ laptop;
}; };
solaire = mkSystem { solaire = mkSystem {
modules = modules = [./solaire];
[
./solaire
]
++ base
++ graphical
++ gaming;
}; };
anastacia = mkSystem { anastacia = mkSystem {
modules = [ modules = [./anastacia];
./anastacia
"${self}/config/nixos/services/forgejo.nix"
"${self}/config/nixos/services/searx.nix"
"${self}/config/nixos/services/website.nix"
];
}; };
} }

View file

@ -10,6 +10,15 @@ _: {
fullName = "Anthony Rodriguez"; fullName = "Anthony Rodriguez";
email = "anthony@nezia.dev"; email = "anthony@nezia.dev";
}; };
profiles = {
desktop.enable = true;
gaming.enable = true;
};
modules = {
hyprland.enable = true;
};
}; };
environment.variables.FLAKE = "/home/nezia/.dotfiles"; environment.variables.FLAKE = "/home/nezia/.dotfiles";

View file

@ -1,5 +1,8 @@
_: { _: {
imports = [./hardware-configuration.nix ./config/theme.nix]; imports = [
./hardware-configuration.nix
./config/theme.nix
];
local = { local = {
systemVars = { systemVars = {
@ -11,6 +14,15 @@ _: {
fullName = "Anthony Rodriguez"; fullName = "Anthony Rodriguez";
email = "anthony@nezia.dev"; email = "anthony@nezia.dev";
}; };
profiles = {
desktop.enable = true;
laptop.enable = true;
};
modules = {
hyprland.enable = true;
};
}; };
environment.variables.FLAKE = "/home/nezia/.dotfiles"; environment.variables.FLAKE = "/home/nezia/.dotfiles";

6
modules/default.nix Normal file
View file

@ -0,0 +1,6 @@
{
imports = [
./options
./nix
];
}

6
modules/hm/default.nix Normal file
View file

@ -0,0 +1,6 @@
{
imports = [
./programs
./services
];
}

View file

@ -0,0 +1,3 @@
{
imports = [./firefox.nix];
}

View file

@ -0,0 +1,176 @@
{
lib,
inputs,
pkgs,
osConfig,
...
}: let
betterfox = pkgs.fetchFromGitHub {
owner = "yokoffing";
repo = "betterfox";
rev = "e026ed7d3a763c5d3f96c2680d7bc3340831af4f";
hash = "sha256-hpkEO5BhMVtINQG8HN4xqfas/R6q5pYPZiFK8bilIDs=";
};
in {
config = lib.mkIf osConfig.local.profiles.desktop.enable {
programs.firefox = {
enable = true;
package = pkgs.wrapFirefox pkgs.firefox-unwrapped {
extraPolicies = {
DisableTelemetry = true;
DisablePocket = true;
DisableFeedbackCommands = true;
DisableFirefoxStudies = true;
OfferToSaveLogins = false;
OffertosaveloginsDefault = false;
PasswordManagerEnabled = false;
SearchSuggestEnabled = true;
# https://github.com/Sly-Harvey/NixOS/blob/f9da2691ea46565256ad757959cfc26ec6cee10d/modules/programs/browser/firefox/default.nix#L58-L163
"3rdparty".Extensions = {
"addon@darkreader.org" = {
permissions = ["internal:privateBrowsingAllowed"];
enabled = true;
automation = {
enabled = true;
behavior = "OnOff";
mode = "system";
};
detectDarkTheme = true;
enabledByDefault = true;
changeBrowserTheme = false;
enableForProtectedPages = true;
fetchNews = false;
previewNewDesign = true;
};
"uBlock0@raymondhill.net" = {
permissions = ["internal:privateBrowsingAllowed"];
advancedSettings = [
[
"userResourcesLocation"
"https://raw.githubusercontent.com/pixeltris/TwitchAdSolutions/master/video-swap-new/video-swap-new-ublock-origin.js"
]
];
adminSettings = {
userSettings = {
uiTheme = "dark";
advancedUserEnabled = true;
userFiltersTrusted = true;
importedLists = [
"https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
];
selectedFilterLists = [
"FRA-0"
"adguard-cookies"
"adguard-mobile-app-banners"
"adguard-other-annoyances"
"adguard-popup-overlays"
"adguard-social"
"adguard-spyware-url"
"adguard-widgets"
"easylist"
"easylist-annoyances"
"easylist-chat"
"easylist-newsletters"
"easylist-notifications"
"easyprivacy"
"fanboy-cookiemonster"
"https://filters.adtidy.org/extension/ublock/filters/3.txt"
"https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
"plowe-0"
"ublock-annoyances"
"ublock-badware"
"ublock-cookies-adguard"
"ublock-cookies-easylist"
"ublock-filters"
"ublock-privacy"
"ublock-quick-fixes"
"ublock-unbreak"
"urlhaus-1"
"https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
];
};
};
};
};
};
};
profiles = {
nezia = {
settings = {
"browser.search.suggest.enabled" = true;
"ui.key.menuAccessKeyFocuses" = false;
};
extensions = with inputs.firefox-addons.packages.${pkgs.system}; [
darkreader
proton-pass
shinigami-eyes
stylus
ublock-origin
violentmonkey
];
# https://git.jacekpoz.pl/poz/niksos/src/commit/a48647a1c5bc6877a1100a65f4dc169b2fc11ed7/hosts/hape/firefox.nix
search = {
force = true;
default = "SearxNG";
engines = {
"SearxNG" = {
urls = [
{
rels = ["results"];
template = "https://search.nezia.dev/search";
params = [
{
name = "q";
value = "{searchTerms}";
}
];
}
{
rels = ["suggestions"];
template = "https://search.nezia.dev/autocompleter";
params = [
{
name = "q";
value = "{searchTerms}";
}
];
"type" = "application/x-suggestions+json";
}
];
};
"MyNixOS" = {
urls = [{template = "https://mynixos.com/search?q={searchTerms}";}];
iconUpdateURL = "https://mynixos.com/favicon.ico";
updateInterval = 24 * 60 * 60 * 1000;
definedAliases = ["@nx"];
};
"Noogle" = {
urls = [{template = "https://noogle.dev/q?term={searchTerms}";}];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["@ng"];
};
"GitHub Nix" = {
# https://github.com/search?q=language%3Anix+NOT+is%3Afork+programs.neovim&type=code
urls = [{template = "https://github.com/search?q=language:nix NOT is:fork {searchTerms}&type=code";}];
iconUpdateURL = "https://github.com/favicon.ico";
updateInterval = 24 * 60 * 60 * 1000;
definedAliases = ["@ghn"];
};
"Google".metaData.alias = "@g"; # builtin engines only support specifying one additional alias
};
};
# https://github.com/oddlama/nix-config/blob/main/users/myuser/graphical/firefox.nix#L53-L57
extraConfig = builtins.concatStringsSep "\n" [
(builtins.readFile "${betterfox}/user.js")
(builtins.readFile "${betterfox}/Securefox.js")
(builtins.readFile "${betterfox}/Fastfox.js")
(builtins.readFile "${betterfox}/Peskyfox.js")
(builtins.readFile "${betterfox}/Smoothfox.js")
];
};
};
};
};
}

View file

@ -0,0 +1,17 @@
{
imports = [
./browsers
./editors
./hypr
./media
./terminal
./games.nix
./gnome.nix
./misc.nix
./walker.nix
./waybar.nix
./wlogout.nix
./xdg.nix
];
}

View file

@ -0,0 +1,6 @@
{
imports = [
./helix.nix
./neovim.nix
];
}

View file

@ -0,0 +1,64 @@
{
lib,
pkgs,
osConfig,
...
}: {
config = lib.mkIf osConfig.local.profiles.desktop.enable {
programs.helix = {
enable = true;
settings = {
theme = "catppuccin_macchiato";
editor = {
line-number = "relative";
lsp.display-messages = true;
auto-format = true;
auto-completion = true;
completion-timeout = 5;
color-modes = true;
completion-trigger-len = 1;
completion-replace = true;
cursorline = true;
cursor-shape = {
insert = "bar";
normal = "block";
select = "underline";
};
indent-guides.render = true;
lsp.display-inlay-hints = true;
statusline.center = ["position-percentage"];
true-color = true;
whitespace.characters = {
newline = "";
tab = "";
};
};
keys.normal = {
space = {
space = "file_picker";
w = ":w";
q = ":q";
};
esc = ["collapse_selection" "keep_primary_selection"];
};
};
languages = {
language = [
{
name = "nix";
auto-format = true;
}
];
language-server = {
nil = {
command = lib.getExe pkgs.nil;
config.nil.formatting.command = ["${lib.getExe pkgs.alejandra}" "-q"];
};
};
};
};
};
}

Some files were not shown because too many files have changed in this diff Show more