Compare commits

..

No commits in common. "main" and "structural-rework" have entirely different histories.

255 changed files with 6414 additions and 11711 deletions

View file

@ -1,7 +0,0 @@
keys:
- &franz age1uauvjwfvg8u0zkn58ematurcptf43gz6vx44nwkq3xcnmwq95psqna9psw
creation_rules:
- path_regex: secrets/franz.yaml$
key_groups:
- age:
- *franz

View file

@ -1,20 +0,0 @@
# Nix-Config
## Installation
The NixOS installer image comes with password SSH auth disabled. Simply allowing the public Git keys is a nice workaround.
```sh
sudo systemctl start sshd
mkdir ~/.ssh; curl https://git.ghoscht.com/ghoscht.keys > ~/.ssh/authorized_keys
```
The specific config from "hosts" can be installed using the following command. Limiting the download speed is optional, but can come in handy.
```sh
sudo nixos-install --option download-speed 4000 --flake .#<CONFIG_NAME_HERE>
```
## RPi Image generation
```sh
nix build .#nixosConfigurations.eustachius.config.system.build.sdImage
sudo dd if=./result/sd-image/<IMAGE_NAME>.img of=/dev/<DEVICE_NAME> bs=1M status=progress
```

View file

@ -1,74 +0,0 @@
{device ? throw "Set this to your disk device, e.g. /dev/sda", ...}: {
disko.devices = {
disk.main = {
inherit device;
type = "disk";
content = {
type = "gpt";
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
};
esp = {
name = "ESP";
size = "500M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = ["umask=0077"];
};
};
swap = {
size = "4G";
content = {
type = "swap";
resumeDevice = true;
};
};
root = {
name = "root";
size = "100%";
content = {
type = "lvm_pv";
vg = "root_vg";
};
};
};
};
};
lvm_vg = {
root_vg = {
type = "lvm_vg";
lvs = {
root = {
size = "100%FREE";
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"/root" = {
mountpoint = "/";
};
"/home" = {
mountOptions = ["compress=zstd"];
mountpoint = "/home";
};
"/nix" = {
mountOptions = ["subvol=nix" "compress=zstd" "noatime"];
mountpoint = "/nix";
};
};
};
};
};
};
};
};
}

1429
flake.lock

File diff suppressed because it is too large Load diff

117
flake.nix
View file

@ -1,79 +1,40 @@
{ {
description = "GHOSCHT's NixOS config"; description = "Your new nix config";
inputs = { inputs = {
# Nixpkgs # Nixpkgs
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11";
# You can access packages and modules from different nixpkgs revs
# at the same time. Here's an working example:
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
# Also see the 'unstable-packages' overlay at 'overlays/default.nix'.
# Home manager # Home manager
home-manager = { home-manager.url = "github:nix-community/home-manager/release-23.11";
url = "github:nix-community/home-manager/release-24.11"; home-manager.inputs.nixpkgs.follows = "nixpkgs";
inputs.nixpkgs.follows = "nixpkgs";
};
hardware.url = "github:nixos/nixos-hardware"; hardware.url = "github:nixos/nixos-hardware";
nh = {
disko = { url = "github:viperml/nh";
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nix-colors.url = "github:misterio77/nix-colors";
firefox-addons = { firefox-addons = {
url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
arkenfox = { arkenfox = {
url = "github:dwarfmaster/arkenfox-nixos"; url = "github:dwarfmaster/arkenfox-nixos";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
xremap.url = "github:xremap/nix-flake";
xremap = {
url = "github:xremap/nix-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
flatpaks = {
url = "github:GermanBread/declarative-flatpak/stable-v3";
inputs.nixpkgs.follows = "nixpkgs";
};
heliox-cli = {
url = "git+https://git.ghoscht.com/heliox/cli?ref=custom-dimming";
inputs.nixpkgs.follows = "nixpkgs";
};
picokontroller = {
url = "git+https://git.ghoscht.com/ghoscht/picoKontroller";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
arion = {
url = "github:hercules-ci/arion";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:danth/stylix/release-24.11";
inputs.nixpkgs.follows = "nixpkgs";
};
nixvim = {
url = "github:nix-community/nixvim/nixos-24.11";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = { outputs = {
self, self,
nixpkgs, nixpkgs,
home-manager, home-manager,
arkenfox,
... ...
} @ inputs: let } @ inputs: let
inherit (self) outputs; inherit (self) outputs;
@ -115,43 +76,12 @@
./hosts/adalbert ./hosts/adalbert
]; ];
}; };
ludwig = nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs outputs vars;};
modules = [
./hosts/ludwig
];
};
leopold = nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs outputs vars;};
modules = [
./hosts/leopold
];
};
franz = nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs outputs vars;};
modules = [
./hosts/franz
];
};
# build with nix build .#nixosConfigurations.eustachius.config.system.build.sdImage
eustachius = nixpkgs.lib.nixosSystem {
system = "aarch64-linux";
modules = [
"${nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64-installer.nix"
./hosts/eustachius
# extra config for sdImage generator
{
sdImage.compressImage = false;
}
];
};
}; };
# Standalone home-manager configuration entrypoint # Standalone home-manager configuration entrypoint
# Available through 'home-manager --flake .#your-username@your-hostname' # Available through 'home-manager --flake .#your-username@your-hostname'
homeConfigurations = { homeConfigurations = {
"${vars.user}@adalbert" = home-manager.lib.homeManagerConfiguration { "ghoscht@adalbert" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux; # Home-manager requires 'pkgs' instance pkgs = nixpkgs.legacyPackages.x86_64-linux; # Home-manager requires 'pkgs' instance
extraSpecialArgs = {inherit inputs outputs vars;}; extraSpecialArgs = {inherit inputs outputs vars;};
modules = [ modules = [
@ -159,26 +89,5 @@
]; ];
}; };
}; };
"${vars.user}@ludwig" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux; # Home-manager requires 'pkgs' instance
extraSpecialArgs = {inherit inputs outputs vars;};
modules = [
./home/ludwig.nix
];
};
"${vars.user}@franz" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux; # Home-manager requires 'pkgs' instance
extraSpecialArgs = {inherit inputs outputs vars;};
modules = [
./home/franz.nix
];
};
# "${vars.user}@eustachius" = home-manager.lib.homeManagerConfiguration {
# pkgs = nixpkgs.legacyPackages.aarch64-linux; # Home-manager requires 'pkgs' instance
# extraSpecialArgs = {inherit inputs outputs vars;};
# modules = [
# ./home/eustachius.nix
# ];
# };
}; };
} }

View file

@ -1,32 +1,46 @@
{ inputs, ... }: { {
inputs,
outputs,
...
}: let
in {
imports = [ imports = [
./global ./global
./features/desktop/awesome ./features/desktop/awesome
./features/desktop/hyprland
./features/games ./features/games
./features/coding ./features/coding
./features/desktop/common/alacritty.nix inputs.nix-colors.homeManagerModules.default
]; ];
home.packages = [ colorScheme = inputs.nix-colors.colorSchemes.catppuccin-mocha;
inputs.picokontroller.packages.x86_64-linux.default # wallpaper = outputs.wallpapers.cyberpunk-city-red;
]; #
nixpkgs = { # # ------ ----- ------
config = { # # | DP-3 | | DP-1| | DP-2 |
permittedInsecurePackages = [ # # ------ ----- ------
"electron-25.9.0" # monitors = [
"nix-2.15.3" # {
]; # name = "DP-3";
}; # width = 1920;
}; # height = 1080;
# x = 0;
wayland.windowManager.hyprland = { # workspace = "3";
settings = { # enabled = false;
exec-once = [ # }
"picokontroller" # volume & light control # {
"easyeffects --gapplication-service" # name = "DP-1";
"xrandr --output DP-3 --primary" # since wayland doesn't have a concept of primary monitors # width = 2560;
]; # height = 1080;
}; # x = 1920;
}; # workspace = "1";
# primary = true;
# }
# {
# name = "DP-2";
# width = 1920;
# height = 1080;
# x = 4480;
# workspace = "2";
# }
# ];
} }

View file

@ -1,5 +1,6 @@
{ {
programs.bat = { programs.bat = {
enable = true; enable = true;
config.theme = "base16";
}; };
} }

View file

@ -2,6 +2,7 @@
programs.btop = { programs.btop = {
enable = true; enable = true;
settings = { settings = {
color_theme = "nix-colors";
theme_background = false; theme_background = false;
truecolor = true; truecolor = true;
vim_keys = true; vim_keys = true;
@ -9,4 +10,89 @@
proc_gradient = false; proc_gradient = false;
}; };
}; };
xdg.configFile."btop/themes/nix-colors".text = ''
# Main background, empty for terminal default, need to be empty if you want transparent background
# theme[main_bg]="#${config.colorScheme.colors.base00}"
# Main text color
theme[main_fg]="#${config.colorScheme.colors.base05}"
# Title color for boxes
theme[title]="#${config.colorScheme.colors.base05}"
# Highlight color for keyboard shortcuts
theme[hi_fg]="#${config.colorScheme.colors.base0D}"
# Background color of selected item in processes box
theme[selected_bg]="#${config.colorScheme.colors.base03}"
# Foreground color of selected item in processes box
theme[selected_fg]="#${config.colorScheme.colors.base0D}"
# Color of inactive/disabled text
theme[inactive_fg]="#${config.colorScheme.colors.base02}"
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
theme[graph_text]="#${config.colorScheme.colors.base06}"
# Background color of the percentage meters
theme[meter_bg]="#${config.colorScheme.colors.base03}"
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#${config.colorScheme.colors.base06}"
# CPU, Memory, Network, Proc box outline colors
theme[cpu_box]="#${config.colorScheme.colors.base0E}" #Mauve
theme[mem_box]="#${config.colorScheme.colors.base0B}" #Green
theme[net_box]="#${config.colorScheme.colors.base08}" #Maroon
theme[proc_box]="#${config.colorScheme.colors.base0D}" #Blue
# Box divider line and small boxes line color
theme[div_line]="#${config.colorScheme.colors.base04}"
# Temperature graph color (Green -> Yellow -> Red)
theme[temp_start]="#${config.colorScheme.colors.base0B}"
theme[temp_mid]="#${config.colorScheme.colors.base0A}"
theme[temp_end]="#${config.colorScheme.colors.base08}"
# CPU graph colors (Teal -> Lavender)
theme[cpu_start]="#${config.colorScheme.colors.base0C}"
theme[cpu_mid]="#${config.colorScheme.colors.base0D}"
theme[cpu_end]="#${config.colorScheme.colors.base07}"
# Mem/Disk free meter (Mauve -> Lavender -> Blue)
theme[free_start]="#${config.colorScheme.colors.base0E}"
theme[free_mid]="#${config.colorScheme.colors.base07}"
theme[free_end]="#${config.colorScheme.colors.base0D}"
# Mem/Disk cached meter (Sapphire -> Lavender)
theme[cached_start]="#${config.colorScheme.colors.base0D}"
theme[cached_mid]="#${config.colorScheme.colors.base0D}"
theme[cached_end]="#${config.colorScheme.colors.base07}"
# Mem/Disk available meter (Peach -> Red)
theme[available_start]="#${config.colorScheme.colors.base0F}"
theme[available_mid]="#${config.colorScheme.colors.base09}"
theme[available_end]="#${config.colorScheme.colors.base08}"
# Mem/Disk used meter (Green -> Sky)
theme[used_start]="#${config.colorScheme.colors.base0B}"
theme[used_mid]="#${config.colorScheme.colors.base0C}"
theme[used_end]="#${config.colorScheme.colors.base0D}"
# Download graph colors (Peach -> Red)
theme[download_start]="#${config.colorScheme.colors.base0F}"
theme[download_mid]="#${config.colorScheme.colors.base09}"
theme[download_end]="#${config.colorScheme.colors.base08}"
# Upload graph colors (Green -> Sky)
theme[upload_start]="#${config.colorScheme.colors.base0B}"
theme[upload_mid]="#${config.colorScheme.colors.base0C}"
theme[upload_end]="#${config.colorScheme.colors.base0D}"
# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
theme[process_start]="#${config.colorScheme.colors.base0D}"
theme[process_mid]="#${config.colorScheme.colors.base0C}"
theme[process_end]="#${config.colorScheme.colors.base0E}"
'';
} }

View file

@ -20,18 +20,10 @@
httpie # Better curl httpie # Better curl
diffsitter # Better diff diffsitter # Better diff
jq # JSON pretty printer and manipulator jq # JSON pretty printer and manipulator
timer # Nice looking timer timer # To help with my ADHD paralysis
lazydocker # Docker TUI lazydocker # Docker TUI
neofetch # Unixporn stuff neofetch
tldr # Nice & short manual snippets tldr # nice & short manual snippets
ntfy-sh # Push notifications to other devices
ipinfo # IP geolocation
ranger # TUI file manager
trickle # cli network limiter
du-dust # disk usage visualizer
lftp # FTP client
unar # unarchive files like rar, zip, tar
glow # fancy markdown viewer
nvd # Differ nvd # Differ
nix-output-monitor nix-output-monitor

View file

@ -7,13 +7,11 @@
inherit (lib) mkIf; inherit (lib) mkIf;
hasPackage = pname: lib.any (p: p ? pname && p.pname == pname) config.home.packages; hasPackage = pname: lib.any (p: p ? pname && p.pname == pname) config.home.packages;
hasRipgrep = hasPackage "ripgrep"; hasRipgrep = hasPackage "ripgrep";
hasLftp = hasPackage "lftp";
hasExa = hasPackage "eza"; hasExa = hasPackage "eza";
hasLazygit = config.programs.lazygit.enable; hasLazygit = config.programs.lazygit.enable;
hasLazydocker = hasPackage "lazydocker"; hasLazydocker = hasPackage "lazydocker";
hasNixYourShell = hasPackage "nix-your-shell"; hasNixYourShell = hasPackage "nix-your-shell";
hasShellColor = config.programs.shellcolor.enable; hasShellColor = config.programs.shellcolor.enable;
hasWezterm = config.programs.wezterm.enable;
shellcolor = "${pkgs.shellcolord}/bin/shellcolor"; shellcolor = "${pkgs.shellcolord}/bin/shellcolor";
in { in {
programs.fish = { programs.fish = {
@ -46,29 +44,15 @@ in {
name = "autopair"; name = "autopair";
src = pkgs.fishPlugins.autopair.src; src = pkgs.fishPlugins.autopair.src;
} }
{
name = "puffer";
src = pkgs.fishPlugins.puffer.src;
}
{
name = "z";
src = pkgs.fishPlugins.z.src;
}
]; ];
shellAliases = { shellAliases = {
lzg = mkIf hasLazygit "lazygit"; lzg = mkIf hasLazygit "lazygit";
lzd = mkIf hasLazydocker "lazydocker"; lzd = mkIf hasLazydocker "lazydocker";
batt = ''upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -e "percentage" -e "state"''; batt = ''upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -e "percentage" -e "state"'';
hx = "~/Documents/heliox-cli/target/debug/heliox-cli --mode";
slp = "systemctl suspend"; slp = "systemctl suspend";
sdn = "shutdown 0"; sdn = "shutdown 0";
nrs = "nh os switch ~/.setup"; nrs = "nh os switch ~/.setup";
ls = mkIf hasExa "eza";
ll = mkIf hasExa "eza -l";
la = mkIf hasExa "eza -la";
exa = mkIf hasExa "eza";
imgcat = mkIf hasWezterm "wezterm imgcat";
}; };
shellAbbrs = rec { shellAbbrs = rec {
jqless = "jq -C | less -r"; jqless = "jq -C | less -r";
@ -81,16 +65,8 @@ in {
nbn = "nix build nixpkgs#"; nbn = "nix build nixpkgs#";
nf = "nix flake"; nf = "nix flake";
glk = "gpg --list-keys --with-keygrip"; ls = mkIf hasExa "eza";
gssh = "gpg --export-ssh-key"; exa = mkIf hasExa "eza";
gnk = "gpg --full-generate-key --expert";
gek = "gpg --edit-key --expert";
udmount = "udisksctl mount -b";
udumount = "udisksctl unmount -b";
fftp = mkIf hasLftp "lftp -u ghoscht, sftp://192.168.178.35";
arss = "sudo autorestic exec -av -- snapshots";
}; };
functions = { functions = {
# Disable greeting # Disable greeting

View file

@ -1,6 +1,6 @@
{pkgs, ...}: { {pkgs, ...}: {
#Prefer IPv4 for ssh #Prefer IPv4 for ssh
# home.file.".ssh/config".text = "AddressFamily inet"; home.file.".ssh/config".text = "AddressFamily inet";
programs.git = { programs.git = {
enable = true; enable = true;
@ -12,7 +12,6 @@
commit.gpgsign = true; commit.gpgsign = true;
user.signingkey = "0x2C2C1C62A5388E82"; user.signingkey = "0x2C2C1C62A5388E82";
init.defaultBranch = "main"; init.defaultBranch = "main";
pull.rebase = false; # merge by default
}; };
lfs.enable = true; lfs.enable = true;
aliases = { aliases = {

View file

@ -11,7 +11,7 @@
enableSshSupport = true; enableSshSupport = true;
enableFishIntegration = true; enableFishIntegration = true;
enableZshIntegration = true; enableZshIntegration = true;
pinentryPackage = pkgs.pinentry-gnome3; pinentryFlavor = "gnome3";
}; };
# Prevent clobbering SSH_AUTH_SOCK # Prevent clobbering SSH_AUTH_SOCK
@ -19,7 +19,7 @@
# Disable gnome-keyring ssh-agent # Disable gnome-keyring ssh-agent
xdg.configFile."autostart/gnome-keyring-ssh.desktop".text = '' xdg.configFile."autostart/gnome-keyring-ssh.desktop".text = ''
${lib.fileContents "${pkgs.gnome-keyring}/etc/xdg/autostart/gnome-keyring-ssh.desktop"} ${lib.fileContents "${pkgs.gnome3.gnome-keyring}/etc/xdg/autostart/gnome-keyring-ssh.desktop"}
Hidden=true Hidden=true
''; '';
} }

View file

@ -1,5 +1,21 @@
{config, ...}: { {config, ...}: {
programs.lazygit = { programs.lazygit = {
enable = true; enable = true;
settings = with config.colorScheme.colors; {
gui = {
theme = {
activeBorderColor = ["#${base0D}" "bold"];
inactiveBorderColor = ["#${base05}"];
optionsTextColor = ["#${base0D}"];
selectedLineBgColor = ["${base02}"];
selectedRangeBgColor = ["${base02}"];
cherryPickedCommitBgColor = ["#${base03}"];
cherryPickedCommitFgColor = ["#${base0D}"];
unstagedChangesColor = ["#${base08}"];
defaultFgColor = ["#${base05}"];
searchingActiveBorderColor = ["#${base0A}"];
};
};
};
}; };
} }

View file

@ -1,9 +1,7 @@
{pkgs, ...}: { {pkgs, ...}: {
imports = [ imports = [
# ./nvim ./nvim
./nixvim
./vscode.nix ./vscode.nix
./intellij.nix ./intellij.nix
./tmux.nix
]; ];
} }

View file

@ -1,9 +1,5 @@
{pkgs, ...}: { {pkgs, ...}: {
home.packages = [ home.packages = with pkgs.unstable; [
(pkgs.unstable.jetbrains.plugins.addPlugins pkgs.unstable.jetbrains.idea-ultimate ["ideavim"]) (jetbrains.plugins.addPlugins jetbrains.idea-ultimate ["ideavim"])
]; ];
home.sessionVariables = {
JAVA_HOME = "${pkgs.openjdk17}/lib/openjdk";
LD_LIBRARY_PATH = "${pkgs.libGL}/lib:${pkgs.gtk3}/lib:${pkgs.glib.out}/lib:${pkgs.xorg.libXtst}/lib";
};
} }

View file

@ -1,95 +0,0 @@
{
programs.nixvim.plugins = {
cmp-emoji = {
enable = true;
};
cmp = {
enable = true;
settings = {
completion = {
completeopt = "menu,menuone,noinsert";
};
autoEnableSources = true;
experimental = {ghost_text = true;};
performance = {
debounce = 60;
fetchingTimeout = 200;
maxViewEntries = 30;
};
snippet = {
expand = ''
function(args)
require('luasnip').lsp_expand(args.body)
end
'';
};
formatting = {fields = ["kind" "abbr" "menu"];};
sources = [
{name = "nvim_lsp";}
{name = "emoji";}
{
name = "buffer"; # text within current buffer
option.get_bufnrs.__raw = "vim.api.nvim_list_bufs";
keywordLength = 3;
}
# { name = "copilot"; } # enable/disable copilot
{
name = "path"; # file system paths
keywordLength = 3;
}
{
name = "luasnip"; # snippets
keywordLength = 3;
}
];
window = {
completion = {border = "solid";};
documentation = {border = "solid";};
};
mapping = {
"<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
"<C-j>" = "cmp.mapping.select_next_item()";
"<C-k>" = "cmp.mapping.select_prev_item()";
"<C-e>" = "cmp.mapping.abort()";
"<C-b>" = "cmp.mapping.scroll_docs(-4)";
"<C-f>" = "cmp.mapping.scroll_docs(4)";
"<C-Space>" = "cmp.mapping.complete()";
"<CR>" = "cmp.mapping.confirm({ select = true })";
"<S-CR>" = "cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true })";
"<C-l>" = ''
cmp.mapping(function()
if luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
end
end, { 'i', 's' })
'';
"<C-h>" = ''
cmp.mapping(function()
if luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
end
end, { 'i', 's' })
'';
};
};
};
cmp-nvim-lsp = {
enable = true; # LSP
};
cmp-buffer = {
enable = true;
};
cmp-path = {
enable = true; # file system paths
};
cmp_luasnip = {
enable = true; # snippets
};
cmp-cmdline = {
enable = true; # autocomplete for cmdline
};
};
}

View file

@ -1,12 +0,0 @@
{inputs, ...}: {
imports = [
inputs.nixvim.homeManagerModules.nixvim
./options.nix
./plugins.nix
./cmp.nix
./lsp.nix
./none-ls.nix
./keymaps.nix
];
programs.nixvim.enable = true;
}

View file

@ -1,118 +0,0 @@
{
programs.nixvim.keymaps = [
{
mode = [
"n"
"v"
];
key = "<leader>fc";
action = "<cmd>lua vim.lsp.buf.format()<cr>";
options = {
silent = true;
desc = "Format Code";
};
}
{
mode = "n";
key = "<leader>ch";
action = "<cmd>noh<CR>";
options = {
silent = true;
desc = "Clear Highlighting";
};
}
{
mode = "n";
key = "<C-p>";
action = "<cmd>Telescope live_grep<CR>";
options = {
desc = "Telescope LiveGrep";
};
}
{
mode = "n";
key = "<leader>fg";
action = "<cmd>Telescope find_files<CR>";
options = {
desc = "Telescope File Search";
};
}
{
mode = "n";
key = "<C-n>";
action = "<Cmd>Neotree toggle<CR>";
options = {
silent = true;
desc = "Toggle Neotree";
};
}
{
mode = "n";
key = "<leader><tab><tab>";
action = "<cmd>tabnew<cr>";
options = {
desc = "New Tab";
};
}
{
mode = "n";
key = "<leader><tab>]";
action = "<cmd>BufferNext<cr>";
options = {
desc = "Next Tab";
};
}
{
mode = "n";
key = "<leader><tab>d";
action = "<cmd>BufferClose<cr>";
options = {
desc = "Close Tab";
};
}
{
mode = "n";
key = "<leader><tab>[";
action = "<cmd>BufferPrevious<cr>";
options = {
desc = "Previous Tab";
};
}
{
mode = "n";
key = "<c-k>";
action = ":wincmd k<CR>";
options = {
silent = true;
desc = "Go Up";
};
}
{
mode = "n";
key = "<c-j>";
action = ":wincmd j<CR>";
options = {
silent = true;
desc = "Go Down";
};
}
{
mode = "n";
key = "<c-h>";
action = ":wincmd h<CR>";
options = {
silent = true;
desc = "Go Left";
};
}
{
mode = "n";
key = "<c-l>";
action = ":wincmd l<CR>";
options = {
silent = true;
desc = "Go Right";
};
}
];
}

View file

@ -1,29 +0,0 @@
{
programs.nixvim.plugins = {
rustaceanvim.enable = true;
lsp = {
enable = true;
inlayHints = true;
servers = {
ts_ls.enable = true; # TS/JS
cssls.enable = true; # CSS
html.enable = true; # HTML
pyright.enable = true; # Python
marksman.enable = true; # Markdown
nil_ls.enable = true; # Nix
dockerls.enable = true; # Docker
bashls.enable = true; # Bash
clangd.enable = true; # C/C++
yamlls.enable = true; # YAML
lua_ls = {
# Lua
enable = true;
settings.telemetry.enable = false;
};
};
};
};
}

View file

@ -1,42 +0,0 @@
{
programs.nixvim.plugins = {
none-ls = {
enable = true;
sources = {
code_actions = {
statix.enable = true;
gitsigns.enable = true;
};
diagnostics = {
statix.enable = true;
deadnix.enable = true;
pylint.enable = true;
checkstyle.enable = true;
};
formatting = {
alejandra.enable = true;
stylua.enable = true;
shfmt.enable = true;
nixpkgs_fmt.enable = true;
google_java_format.enable = false;
prettier = {
enable = true;
disableTsServerFormatter = true;
};
black = {
enable = true;
settings = ''
{
extra_args = { "--fast" },
}
'';
};
};
completion = {
luasnip.enable = true;
spell.enable = true;
};
};
};
};
}

View file

@ -1,52 +0,0 @@
{
programs.nixvim = {
config = {
# System clipboard support, needs xclip/wl-clipboard
clipboard = {
providers = {
wl-copy.enable = true; # Wayland
xsel.enable = true; # For X11
};
register = "unnamedplus";
};
globals.mapleader = " ";
opts = {
number = true; # Show line numbers
relativenumber = true; # Show relative line numbers
shiftwidth = 2; # Tab width should be 2
# Always show the signcolumn, otherwise text would be shifted when displaying error icons
signcolumn = "yes";
# Enable mouse
mouse = "a";
# Search
ignorecase = true;
smartcase = true;
# Save undo history
undofile = true;
# Global substitution by default
gdefault = true;
# Start scrolling when the cursor is X lines away from the top/bottom
scrolloff = 8;
# Enable 24-bit RGB color in the TUI
termguicolors = true;
# Wrap long lines at a character in 'breakat'
linebreak = true;
smartindent = true;
# Remove EOB
fillchars = {
eob = " ";
};
};
};
};
}

View file

@ -1,112 +0,0 @@
{pkgs, ...}: {
programs.nixvim.plugins = {
lualine.enable = true;
oil.enable = true;
nvim-surround.enable = true;
treesitter = {
enable = true;
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
markdown
# nix
vim
bash
lua
python
json
java
rust
cpp
c
css
csv
dockerfile
diff
gitignore
git_config
gitattributes
make
yaml
toml
typescript
xml
];
};
# Autopairs
nvim-autopairs = {
enable = true;
};
luasnip.enable = true;
lazygit.enable = true;
barbar.enable = true;
rainbow-delimiters.enable = true;
web-devicons.enable = true;
telescope = {
enable = true;
extensions = {
fzf-native = {
enable = true;
};
};
};
# Dashboard
alpha = {
enable = true;
theme = "dashboard";
};
# File tree
neo-tree = {
enable = true;
enableDiagnostics = false;
enableGitStatus = true;
enableModifiedMarkers = true;
enableRefreshOnWrite = true;
closeIfLastWindow = true;
popupBorderStyle = "rounded"; # Type: null or one of “NC”, “double”, “none”, “rounded”, “shadow”, “single”, “solid” or raw lua code
buffers = {
bindToCwd = false;
followCurrentFile = {
enabled = true;
};
};
window = {
width = 40;
height = 15;
autoExpandWidth = false;
mappings = {
"<space>" = "none";
};
};
};
# Todo comments
todo-comments = {
enable = true;
settings.colors = {
error = ["DiagnosticError" "ErrorMsg" "#DC2626"];
warning = ["DiagnosticWarn" "WarningMsg" "#FBBF24"];
info = ["DiagnosticInfo" "#2563EB"];
hint = ["DiagnosticHint" "#10B981"];
default = ["Identifier" "#7C3AED"];
test = ["Identifier" "#FF00FF"];
};
};
# Highlight word under cursor
illuminate = {
enable = true;
underCursor = false;
filetypesDenylist = [
"Outline"
"TelescopePrompt"
"alpha"
"harpoon"
"reason"
];
};
};
}

View file

@ -6,40 +6,7 @@
... ...
}: let }: let
vars = import ../../../../vars.nix; vars = import ../../../../vars.nix;
stableExtraPkgs = with pkgs; [ colors = config.colorScheme.colors;
# LSP
lua-language-server
pkgs.nodePackages.typescript-language-server
clang-tools
# Formatters
stylua # lua
black # pyton
alejandra # nix
clang-tools_16 # c/c++
rustfmt
yamlfmt
prettierd
vscode-langservers-extracted
# Linters
ruff # python
nodePackages.jsonlint # json
nodePackages.eslint_d # javascript
# Tools
xclip
wl-clipboard
fzf
gcc
# idk?
lua
];
unstableExtraPkgs = with pkgs.unstable; [
# LSP
nixd
];
in { in {
home.sessionVariables.EDITOR = "nvim"; home.sessionVariables.EDITOR = "nvim";
@ -50,7 +17,29 @@ in {
vimAlias = true; vimAlias = true;
vimdiffAlias = true; vimdiffAlias = true;
extraPackages = stableExtraPkgs ++ unstableExtraPkgs; extraPackages = with pkgs; [
# LSP
lua-language-server
lua
rnix-lsp # nix
# Formatters
stylua # lua
black # pyton
alejandra # nix
clang-tools_16 # c/c++
# Linters
ruff # python
nodePackages.jsonlint # json
nodePackages.eslint_d # javascript
# Tools
xclip
wl-clipboard
fzf
gcc
];
plugins = with pkgs.vimPlugins; [ plugins = with pkgs.vimPlugins; [
{ {
@ -80,7 +69,6 @@ in {
type = "lua"; type = "lua";
} }
cmp-path
nvim-cmp nvim-cmp
{ {
plugin = nvim-cmp; plugin = nvim-cmp;
@ -104,35 +92,25 @@ in {
friendly-snippets friendly-snippets
{ {
plugin = nvim-treesitter.withPlugins (p: [ plugin = nvim-treesitter.withAllGrammars;
p.vim
p.bash
p.lua
p.python
p.json
p.java
p.rust
p.cpp
p.c
p.css
p.csv
p.dockerfile
p.diff
p.gitignore
p.git_config
p.gitattributes
p.make
p.yaml
p.toml
p.typescript
p.xml
]);
config = builtins.readFile ./plugin/treesitter.lua; config = builtins.readFile ./plugin/treesitter.lua;
type = "lua"; type = "lua";
} }
vim-nix vim-nix
{
plugin = nvim-base16;
config = ''
require('base16-colorscheme').setup({
base00 = '#${colors.base00}', base01 = '#${colors.base01}', base02 = '#${colors.base02}', base03 = '#${colors.base03}',
base04 = '#${colors.base04}', base05 = '#${colors.base05}', base06 = '#${colors.base06}', base07 = '#${colors.base07}',
base08 = '#${colors.base08}', base09 = '#${colors.base09}', base0A = '#${colors.base0A}', base0B = '#${colors.base0B}',
base0C = '#${colors.base0C}', base0D = '#${colors.base0D}', base0E = '#${colors.base0E}', base0F = '#${colors.base0F}',
})'';
type = "lua";
}
{ {
plugin = lualine-nvim; plugin = lualine-nvim;
config = builtins.readFile ./plugin/lualine.lua; config = builtins.readFile ./plugin/lualine.lua;
@ -144,7 +122,6 @@ in {
nui-nvim nui-nvim
{ {
plugin = neo-tree-nvim; plugin = neo-tree-nvim;
config = builtins.readFile ./plugin/neo-tree.lua;
type = "lua"; type = "lua";
} }
@ -174,43 +151,7 @@ in {
config = builtins.readFile ./plugin/none-ls.lua; config = builtins.readFile ./plugin/none-ls.lua;
type = "lua"; type = "lua";
} }
{
plugin = nvim-autopairs;
config = "require('nvim-autopairs').setup()";
type = "lua";
}
barbar-nvim
{
plugin = nvim-surround;
config = "require('nvim-surround').setup({})";
type = "lua";
}
vim-be-good
rainbow-delimiters-nvim
rustaceanvim
{
plugin = vim-tmux-navigator;
config = builtins.readFile ./plugin/vim-tmux-navigator.lua;
type = "lua";
}
{
plugin = nvim-ts-autotag;
config = "require('nvim-ts-autotag').setup({})";
type = "lua";
}
]; ];
extraLuaConfig = ''
${builtins.readFile ./options.lua}
'';
}; };
xdg.desktopEntries = { xdg.desktopEntries = {

View file

@ -1,11 +1,9 @@
vim.keymap.set("", "<Space>", "<Nop>")
vim.keymap.set("", "<C-Space>", "<Nop>")
vim.g.mapleader = " " vim.g.mapleader = " "
vim.g.maplocalleader = " " vim.g.maplocalleader = " "
vim.o.clipboard = "unnamedplus" vim.o.clipboard = "unnamedplus"
-- vim.o.number = true vim.o.number = true
vim.o.relativenumber = true vim.o.relativenumber = true
vim.o.signcolumn = "yes" vim.o.signcolumn = "yes"
@ -18,8 +16,3 @@ vim.o.updatetime = 300
vim.o.termguicolors = true vim.o.termguicolors = true
vim.o.mouse = "a" vim.o.mouse = "a"
-- disable empty line ~
vim.o.fillchars = "eob: "
vim.o.undofile = true

View file

@ -42,6 +42,5 @@ cmp.setup({
sources = { sources = {
{ name = "nvim_lsp" }, { name = "nvim_lsp" },
{ name = "luasnip" }, { name = "luasnip" },
{ name = "path" },
}, },
}) })

View file

@ -39,37 +39,7 @@ require("lspconfig").lua_ls.setup({
}, },
}) })
require("lspconfig").nixd.setup({ require("lspconfig").rnix.setup({
on_attach = on_attach, on_attach = on_attach,
capabilities = capabilities, capabilities = capabilities,
}) })
require("lspconfig").ts_lsp.setup({
on_attach = on_attach,
capabilities = capabilities,
})
require("lspconfig").eslint.setup({
settings = {
packageManager = "yarn",
},
on_attach = function(client, bufnr)
vim.api.nvim_create_autocmd("BufWritePre", {
buffer = bufnr,
command = "EslintFixAll",
})
vim.api.nvim_create_autocmd("BufWritePost", {
callback = function()
vim.lsp.buf.format()
end,
})
end,
})
require("lspconfig").clangd.setup({
on_attach = function(client, bufnr)
client.server_capabilities.signatureHelpProvider = false
on_attach(client, bufnr)
end,
capabilities = capabilities,
})

View file

@ -1,19 +0,0 @@
require("neo-tree").setup({
close_if_last_window = true, -- Close Neo-tree if it is the last window left in the tab
hide_root_node = true, -- Hide the root node
filesystem = {
filtered_items = {
visible = false,
hide_dotfiles = false,
hide_gitignored = false,
hide_by_name = {
".git",
".DS_Store",
"thumbs.db",
},
show_hidden_count = false,
},
},
})
vim.keymap.set("n", "<C-n>", "<Cmd>Neotree toggle<CR>")

View file

@ -7,24 +7,14 @@ local opts = {
null_ls.builtins.formatting.stylua, null_ls.builtins.formatting.stylua,
-- Python -- Python
null_ls.builtins.formatting.black, null_ls.builtins.formatting.black,
-- null_ls.builtins.diagnostics.ruff, null_ls.builtins.diagnostics.ruff,
-- Javascript -- Javascript
-- null_ls.builtins.diagnostics.eslint_d, null_ls.builtins.diagnostics.eslint_d,
-- null_ls.builtins.diagnostics.jsonlint, null_ls.builtins.diagnostics.jsonlint,
-- C/C++ -- C/C++
null_ls.builtins.formatting.clang_format, null_ls.builtins.formatting.clang_format,
-- Nix -- Nix
null_ls.builtins.formatting.alejandra, null_ls.builtins.formatting.alejandra,
-- Rust
-- null_ls.builtins.formatting.rustfmt,
-- YAML
null_ls.builtins.formatting.yamlfmt,
-- Typescript
null_ls.builtins.formatting.prettier.with({
condition = function(utils)
return utils.has_file({ ".prettierrc.js" })
end,
}),
}, },
on_attach = function(client, bufnr) on_attach = function(client, bufnr)
if client.supports_method("textDocument/formatting") then if client.supports_method("textDocument/formatting") then

View file

@ -1,5 +0,0 @@
-- Navigate vim panes better
vim.keymap.set("n", "<c-k>", ":wincmd k<CR>")
vim.keymap.set("n", "<c-j>", ":wincmd j<CR>")
vim.keymap.set("n", "<c-h>", ":wincmd h<CR>")
vim.keymap.set("n", "<c-l>", ":wincmd l<CR>")

View file

@ -1,46 +0,0 @@
{pkgs, ...}: {
home.packages = [pkgs.tmuxinator-fzf-start];
programs.tmux = {
enable = true;
keyMode = "vi";
customPaneNavigationAndResize = true;
mouse = true;
tmuxinator.enable = true;
shortcut = "Space";
extraConfig = ''
bind % split-window -h -c "#{pane_current_path}"
bind '"' split-window -v -c "#{pane_current_path}"
set -sg escape-time 0
'';
plugins = with pkgs; [
tmuxPlugins.vim-tmux-navigator
{
plugin = tmuxPlugins.catppuccin;
extraConfig = ''
set -g status-position top
set-option -sa terminal-features ',xterm-256color:RGB'
set -g @catppuccin_window_left_separator ""
set -g @catppuccin_window_right_separator " "
set -g @catppuccin_window_middle_separator " "
set -g @catppuccin_window_number_position "right"
set -g @catppuccin_window_default_fill "number"
set -g @catppuccin_window_default_text "#W"
set -g @catppuccin_window_current_fill "number"
set -g @catppuccin_window_current_text "#W"
set -g @catppuccin_status_modules_right "directory session"
set -g @catppuccin_status_left_separator " "
set -g @catppuccin_status_right_separator ""
set -g @catppuccin_status_fill "icon"
set -g @catppuccin_status_connect_separator "no"
set -g @catppuccin_directory_text "#{pane_current_path}"
'';
}
];
};
}

View file

@ -31,6 +31,9 @@ in {
]; ];
userSettings = { userSettings = {
#Theming #Theming
"workbench.colorTheme" = "Catppuccin Mocha";
"catppuccin.accentColor" = "green";
"workbench.iconTheme" = "material-icon-theme";
"window.menuBarVisibility" = "toggle"; "window.menuBarVisibility" = "toggle";
"editor.minimap.autohide" = false; "editor.minimap.autohide" = false;
#Extensions - General #Extensions - General

View file

@ -1,7 +1,6 @@
{pkgs, ...}: { {pkgs, ...}: {
imports = [ imports = [
../common ../common
./zathura.nix
]; ];
home = { home = {
@ -13,8 +12,17 @@
source = ../../../../rsc/config/awesome; source = ../../../../rsc/config/awesome;
recursive = true; recursive = true;
}; };
file.".config/picom/" = {
source = ../../../../rsc/config/picom;
recursive = true;
};
file.".config/rofi" = {
source = ../../../../rsc/config/rofi;
recursive = true;
};
packages = with pkgs; [ packages = with pkgs; [
picom
rofi rofi
redshift redshift
xbindkeys xbindkeys
@ -22,7 +30,6 @@
flameshot flameshot
xclip xclip
brightnessctl brightnessctl
feh
]; ];
}; };
} }

View file

@ -1,9 +0,0 @@
{
programs.zathura = {
enable = true;
options = {
selection-clipboard = "clipboard";
statusbar-home-tilde = true;
};
};
}

View file

@ -1,3 +0,0 @@
{pkgs, ...}: {
home.packages = with pkgs; [freecad cura];
}

View file

@ -1,11 +1,60 @@
{ {
pkgs,
config,
...
}: {
programs.alacritty.enable = true; programs.alacritty.enable = true;
programs.alacritty.settings = { programs.alacritty.settings = {
window = { window = {
opacity = 0.83;
padding = { padding = {
x = 0; x = 0;
y = 5; y = 5;
}; };
}; };
font = {
normal = {
family = "${config.fontProfiles.monospace.family}";
style = "Medium";
};
bold = {
family = "${config.fontProfiles.monospace.family}";
style = "Bold";
};
italic = {
family = "${config.fontProfiles.monospace.family}";
style = "MediumItalic";
};
};
colors = with config.colorScheme.colors; {
bright = {
black = "0x${base00}";
blue = "0x${base0D}";
cyan = "0x${base0C}";
green = "0x${base0B}";
magenta = "0x${base0E}";
red = "0x${base08}";
white = "0x${base06}";
yellow = "0x${base09}";
};
cursor = {
cursor = "0x${base06}";
text = "0x${base06}";
};
normal = {
black = "0x${base00}";
blue = "0x${base0D}";
cyan = "0x${base0C}";
green = "0x${base0B}";
magenta = "0x${base0E}";
red = "0x${base08}";
white = "0x${base06}";
yellow = "0x${base0A}";
};
primary = {
background = "0x${base00}";
foreground = "0x${base06}";
};
};
}; };
} }

View file

@ -1,24 +1,8 @@
{pkgs, ...}: { {
imports = [ imports = [
./firefox.nix ./firefox.nix
./wezterm.nix ./alacritty.nix
./font.nix ./font.nix
./playerctl.nix ./playerctl.nix
./easyeffects.nix
./nextcloud.nix
./flatpak.nix
./notes.nix
./fcitx5.nix
]; ];
home.packages = with pkgs;
[
signal-desktop # secure messenger
webcord-vencord # more "privacy friendly" discord client
anki
calibre
mpv # Video player
]
++ (with pkgs.unstable; [feishin]);
} }

View file

@ -1,7 +0,0 @@
{pkgs, ...}: {
# services.easyeffects.enable = true;
xdg.configFile."easyeffects/output/Beyerdynamic_DT990_Oratory.json" = {
source = ../../../../rsc/config/easyeffects/Beyerdynamic_DT990_Oratory.json;
};
home.packages = with pkgs; [easyeffects];
}

View file

@ -1,107 +0,0 @@
{pkgs, ...}: {
# xdg.configFile."fcitx5" = {
# source = ../../../../rsc/config/fcitx5;
# recursive = true;
# };
xdg.configFile = {
"fcitx5/config" = {
force = true;
text = ''
[Hotkey]
# Enumerate when press trigger key repeatedly
EnumerateWithTriggerKeys=True
# Temporally switch between first and current Input Method
AltTriggerKeys=
# Enumerate Input Method Forward
EnumerateForwardKeys=
# Enumerate Input Method Backward
EnumerateBackwardKeys=
# Skip first input method while enumerating
EnumerateSkipFirst=False
# Enumerate Input Method Group Forward
EnumerateGroupForwardKeys=
# Enumerate Input Method Group Backward
EnumerateGroupBackwardKeys=
# Activate Input Method
ActivateKeys=
# Deactivate Input Method
DeactivateKeys=
# Default Previous page
PrevPage=
# Default Next page
NextPage=
# Default Previous Candidate
PrevCandidate=
# Default Next Candidate
NextCandidate=
# Toggle embedded preedit
TogglePreedit=
[Hotkey/TriggerKeys]
0=Control+Alt+space
[Behavior]
# Active By Default
ActiveByDefault=False
# Share Input State
ShareInputState=No
# Show preedit in application
PreeditEnabledByDefault=True
# Show Input Method Information when switch input method
ShowInputMethodInformation=True
# Show Input Method Information when changing focus
showInputMethodInformationWhenFocusIn=False
# Show compact input method information
CompactInputMethodInformation=True
# Show first input method information
ShowFirstInputMethodInformation=True
# Default page size
DefaultPageSize=5
# Override Xkb Option
OverrideXkbOption=False
# Custom Xkb Option
CustomXkbOption=
# Force Enabled Addons
EnabledAddons=
# Force Disabled Addons
DisabledAddons=
# Preload input method to be used by default
PreloadInputMethod=True
# Allow input method in the password field
AllowInputMethodForPassword=False
# Show preedit text when typing password
ShowPreeditForPassword=False
# Interval of saving user data in minutes
AutoSavePeriod=30
'';
};
"fcitx5/profile" = {
force = true;
text = ''
[Groups/0]
# Group Name
Name="Group 1"
# Layout
Default Layout=de
# Default Input Method
DefaultIM=mozc
[Groups/0/Items/0]
# Name
Name=keyboard-de
# Layout
Layout=
[Groups/0/Items/1]
# Name
Name=mozc
# Layout
Layout=
[GroupOrder]
0="Group 1"
'';
};
};
}

View file

@ -1,18 +1,16 @@
{ inputs {
, pkgs inputs,
, ... pkgs,
vars,
...
}: { }: {
imports = [ inputs.arkenfox.hmModules.default ]; imports = [inputs.arkenfox.hmModules.default];
# Enable kde-connect for non-Plasma DEs
home.file.".mozilla/native-messaging-hosts/org.kde.plasma.browser_integration.json".source = "${pkgs.plasma5Packages.plasma-browser-integration}/lib/mozilla/native-messaging-hosts/org.kde.plasma.browser_integration.json";
programs.firefox = { programs.firefox = {
enable = true; enable = true;
arkenfox = { arkenfox = {
enable = true; enable = true;
version = "128.0"; version = "119.0";
}; };
profiles.Default = { profiles.Default = {
@ -22,11 +20,6 @@
darkreader darkreader
tabliss tabliss
consent-o-matic consent-o-matic
floccus
gesturefy
plasma-integration
libredirect
yomitan
]; ];
search.engines = { search.engines = {
@ -48,13 +41,13 @@
]; ];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ]; definedAliases = ["@np"];
}; };
"Home Manager" = { "Home Manager" = {
urls = [ urls = [
{ {
template = "https://home-manager-options.extranix.com"; template = "https://mipmip.github.io/home-manager-option-search";
params = [ params = [
{ {
name = "query"; name = "query";
@ -65,7 +58,7 @@
]; ];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@hm" ]; definedAliases = ["@hm"];
}; };
"Searx" = { "Searx" = {
@ -82,7 +75,7 @@
]; ];
iconUpdateURL = "https://paulgo.io/favicon.ico"; iconUpdateURL = "https://paulgo.io/favicon.ico";
definedAliases = [ "@sx" ]; definedAliases = ["@sx"];
}; };
"Amazon" = { "Amazon" = {
@ -99,7 +92,7 @@
]; ];
iconUpdateURL = "https://amazon.de/favicon.ico"; iconUpdateURL = "https://amazon.de/favicon.ico";
definedAliases = [ "@a" ]; definedAliases = ["@a"];
}; };
"YouTube" = { "YouTube" = {
@ -116,86 +109,74 @@
]; ];
iconUpdateURL = "https://piped.video/favicon.ico"; iconUpdateURL = "https://piped.video/favicon.ico";
definedAliases = [ "yt" ]; definedAliases = ["yt"];
}; };
}; };
search = { search.force = true;
force = true; search.default = "Searx";
default = "DuckDuckGo";
};
settings = { settings = {
"media.hardwaremediakeys.enabled" = false;
"dom.security.https_only_mode" = true; "dom.security.https_only_mode" = true;
"browser.download.panel.shown" = false; "browser.download.panel.shown" = true;
"browser.toolbars.bookmarks.visibility" = "always";
"signon.rememberSignons" = false; "signon.rememberSignons" = false;
"browser.formfill.enable" = false; "browser.formfill.enable" = false;
"signon. prefillForms" = false; "signon. prefillForms" = false;
"browser.shell.checkDefaultBrowser" = false; "browser.shell.checkDefaultBrowser" = false;
# "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
"browser.uiCustomization.state" = ''{"placements":{"widget-overflow-fixed-list":[],"unified-extensions-area":["addon_darkreader_org-browser-action","plasma-browser-integration_kde_org-browser-action","_506e023c-7f2b-40a3-8066-bc5deb40aebe_-browser-action","_testpilot-containers-browser-action","7esoorv3_alefvanoon_anonaddy_me-browser-action","_a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7_-browser-action","gdpr_cavi_au_dk-browser-action","firefoxcolor_mozilla_com-browser-action","firefox-translations-addon_mozilla_org-browser-action"],"nav-bar":["back-button","forward-button","stop-reload-button","urlbar-container","downloads-button","unified-extensions-button","ublock0_raymondhill_net-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["personal-bookmarks"]},"seen":["save-to-pocket-button","developer-button","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","addon_darkreader_org-browser-action","ublock0_raymondhill_net-browser-action","plasma-browser-integration_kde_org-browser-action","_506e023c-7f2b-40a3-8066-bc5deb40aebe_-browser-action","_testpilot-containers-browser-action","7esoorv3_alefvanoon_anonaddy_me-browser-action","_a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7_-browser-action","gdpr_cavi_au_dk-browser-action","firefoxcolor_mozilla_com-browser-action","firefox-translations-addon_mozilla_org-browser-action"],"dirtyAreaCache":["nav-bar","PersonalToolbar","toolbar-menubar","TabsToolbar","unified-extensions-area"],"currentVersion":20,"newElementCount":4}''; "browser.uiCustomization.state" = ''{"placements":{"widget-overflow-fixed-list":[],"unified-extensions-area":["addon_darkreader_org-browser-action","plasma-browser-integration_kde_org-browser-action","_506e023c-7f2b-40a3-8066-bc5deb40aebe_-browser-action","_testpilot-containers-browser-action","7esoorv3_alefvanoon_anonaddy_me-browser-action","_a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7_-browser-action","gdpr_cavi_au_dk-browser-action","firefoxcolor_mozilla_com-browser-action","firefox-translations-addon_mozilla_org-browser-action"],"nav-bar":["back-button","forward-button","stop-reload-button","urlbar-container","downloads-button","unified-extensions-button","ublock0_raymondhill_net-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["personal-bookmarks"]},"seen":["save-to-pocket-button","developer-button","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","addon_darkreader_org-browser-action","ublock0_raymondhill_net-browser-action","plasma-browser-integration_kde_org-browser-action","_506e023c-7f2b-40a3-8066-bc5deb40aebe_-browser-action","_testpilot-containers-browser-action","7esoorv3_alefvanoon_anonaddy_me-browser-action","_a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7_-browser-action","gdpr_cavi_au_dk-browser-action","firefoxcolor_mozilla_com-browser-action","firefox-translations-addon_mozilla_org-browser-action"],"dirtyAreaCache":["nav-bar","PersonalToolbar","toolbar-menubar","TabsToolbar","unified-extensions-area"],"currentVersion":20,"newElementCount":4}'';
}; };
arkenfox = { arkenfox = {
enable = true; enable = true;
"0000".enable = true; "0000".enable = true;
"0100" = { "0100" = {
enable = true; enable = true;
# Allow setting homepage # Allow setting homepage
"0102"."browser.startup.page".value = 1; "0102"."browser.startup.page".value = 1;
}; };
"0200" = { "0200" = {
enable = true; enable = true;
}; };
"0300".enable = true; "0300".enable = true;
# We keep safebrowsing # We keep safebrowsing
"0400".enable = false; "0400".enable = false;
"0600" = { "0600" = {
enable = true; enable = true;
"0610"."browser.send_pings".enable = true; "0610"."browser.send_pings".enable = true;
}; };
"0700" = { "0700" = {
enable = true; enable = true;
# Disable DNS over HTTPS # Disable DNS over HTTPS
"0710"."network.trr.mode".value = 5; "0710"."network.trr.mode".value = 5;
}; };
# "0800" = { # "0800" = {
# enable = true; # enable = true;
# # Keep using url bar as search bar # # Keep using url bar as search bar
# "0801"."keyword.enabled".value = true; # "0801"."keyword.enabled".value = true;
# }; # };
"0900".enable = true; "0900".enable = true;
"1000" = { "1000" = {
enable = true; enable = true;
# Enable disk cache for performance reasons # Enable disk cache for performance reasons
"1001"."browser.cache.disk.enable".enable = true; "1001"."browser.cache.disk.enable".enable = true;
"1001"."browser.cache.disk.enable".value = true; "1001"."browser.cache.disk.enable".value = true;
}; };
"1200".enable = true; "1200".enable = true;
# I don't use container tabs # I don't use container tabs
"1700".enable = false; "1700".enable = false;
"2600" = { "2600" = {
enable = true; enable = true;
# useDownloadDir # The recent documents feature is useful
"2651".enable = false; "2653".enable = false;
# always_ask_before_handling_new_types };
"2654".enable = false; "2700".enable = true;
};
"2700".enable = true;
"2800" = {
"2812".enable = true;
};
"5000" = {
"5008".enable = true;
};
}; };
}; };
}; };
xdg.mimeApps.defaultApplications = { xdg.mimeApps.defaultApplications = {
"text/html" = [ "firefox.desktop" ]; "text/html" = ["firefox.desktop"];
"text/xml" = [ "firefox.desktop" ]; "text/xml" = ["firefox.desktop"];
"x-scheme-handler/http" = [ "firefox.desktop" ]; "x-scheme-handler/http" = ["firefox.desktop"];
"x-scheme-handler/https" = [ "firefox.desktop" ]; "x-scheme-handler/https" = ["firefox.desktop"];
}; };
} }

View file

@ -1,29 +0,0 @@
{ inputs, ... }: {
imports = [ inputs.flatpaks.homeManagerModules.declarative-flatpak ];
services.flatpak = {
remotes.flathub = "https://flathub.org/repo/flathub.flatpakrepo";
packages = [
"flathub:app/md.obsidian.Obsidian//stable"
"flathub:app/com.github.iwalton3.jellyfin-media-player//stable"
"flathub:app/com.github.tchx84.Flatseal//stable"
];
overrides = {
global = {
filesystems = [
"~/.local/share/icons"
];
};
"md.obsidian.Obsidian" = {
sockets = [
"wayland"
"system-bus"
];
};
"com.github.iwalton3.jellyfin-media-player" = {
sockets = [
"!wayland"
];
};
};
};
}

View file

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

View file

@ -1,5 +0,0 @@
{pkgs, ...}: {
home.packages = with pkgs; [
xournalpp
];
}

View file

@ -1,22 +0,0 @@
{
pkgs,
config,
...
}: {
programs.wezterm = {
enable = true;
extraConfig = ''
return {
front_end = "WebGpu", -- fixes https://github.com/wez/wezterm/issues/5990H
warn_about_missing_glyphs=false,
-- window_background_opacity = 0.83,
hide_tab_bar_if_only_one_tab = true,
window_close_confirmation = "NeverPrompt",
use_ime = true,
set_environment_variables = {
TERM = 'wezterm',
},
}
'';
};
}

View file

@ -1,5 +0,0 @@
{pkgs, ...}: {
imports = [
../common
];
}

View file

@ -1,258 +0,0 @@
{
wayland.windowManager.hyprland = {
settings = {
# autostart
exec-once = [
"systemctl --user start hyprpolkitagent" # polkit agent
"hyprshade on bluelight" # set bluelight shader
"fcitx5 -d" # japanese typing
"webcord --start-minimized --force-audio-share-support" # discord but some privacy
"kdeconnect-indicator & kdeconnect-cli -l" # kde connect
"signal-desktop --start-in-tray"
"wl-clip-persist --clipboard both &" # Keep Wayland clipboard even after programs close
"wl-paste --watch cliphist store &" # Store clipboard contents in cliphist on each change
];
input = {
kb_layout = "de";
numlock_by_default = true;
follow_mouse = 1;
sensitivity = 0; # 0 means no modification
touchpad = {
natural_scroll = true;
};
};
general = {
"$mainMod" = "SUPER";
"$terminal" = "alacritty";
"$menu" = "wofi --show drun --allow-images --no-actions";
layout = "dwindle";
gaps_in = 5;
gaps_out = 10;
border_size = 2;
border_part_of_window = false;
no_border_on_floating = false;
};
plugin = {
hyprsplit = {
num_workspaces = 10;
};
};
misc = {
disable_hyprland_logo = true;
always_follow_on_dnd = true;
layers_hog_keyboard_focus = true;
animate_manual_resizes = false;
enable_swallow = true;
focus_on_activate = true;
new_window_takes_over_fullscreen = 2;
middle_click_paste = false;
};
dwindle = {
pseudotile = true;
preserve_split = true;
};
master = {
new_status = "master";
};
decoration = {
rounding = 10;
blur = {
enabled = true;
passes = 3;
};
shadow = {
enabled = true;
range = 4;
render_power = 3;
};
};
animations = {
enabled = true;
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = [
"easeOutQuint,0.23,1,0.32,1"
"easeInOutCubic,0.65,0.05,0.36,1"
"linear,0,0,1,1"
"almostLinear,0.5,0.5,0.75,1.0"
"quick,0.15,0,0.1,1"
];
animation = [
"global, 1, 10, default"
"border, 1, 5.39, easeOutQuint"
"windows, 1, 4.79, easeOutQuint"
"windowsIn, 1, 4.1, easeOutQuint, popin 87%"
"windowsOut, 1, 1.49, linear, popin 87%"
"fadeIn, 1, 1.73, almostLinear"
"fadeOut, 1, 1.46, almostLinear"
"fade, 1, 3.03, quick"
"layers, 1, 3.81, easeOutQuint"
"layersIn, 1, 4, easeOutQuint, fade"
"layersOut, 1, 1.5, linear, fade"
"fadeLayersIn, 1, 1.79, almostLinear"
"fadeLayersOut, 1, 1.39, almostLinear"
"workspaces, 1, 1.94, almostLinear, fade"
"workspacesIn, 1, 1.21, almostLinear, fade"
"workspacesOut, 1, 1.94, almostLinear, fade"
];
};
bind = [
"$mainMod, Return, exec, $terminal"
"$mainMod SHIFT, C, killactive"
"$mainMod, C ,exec, hyprshade off && hyprpicker -a && hyprshade on bluelight"
"$mainMod SHIFT, Q, exit"
"$mainMod, T, togglefloating"
"$mainMod, Space, exec, $menu"
"$mainMod, P, pseudo" # determine subsplit
"$mainMod, F, fullscreen, 0"
"$mainMod SHIFT, F, fullscreen, 1"
", Print, exec, hyprshade off && grim -g \"$(slurp -w 0 -d)\" - | wl-copy && hyprshade on bluelight"
# Move focus with mainMod + arrow keys
"$mainMod, left, movefocus, l"
"$mainMod, right, movefocus, r"
"$mainMod, up, movefocus, u"
"$mainMod, down, movefocus, d"
"$mainMod, h, movefocus, l"
"$mainMod, j, movefocus, d"
"$mainMod, k, movefocus, u"
"$mainMod, l, movefocus, r"
# Switch workspaces with mainMod + [0-9]
"$mainMod, 1, split:workspace, 1"
"$mainMod, 2, split:workspace, 2"
"$mainMod, 3, split:workspace, 3"
"$mainMod, 4, split:workspace, 4"
"$mainMod, 5, split:workspace, 5"
"$mainMod, 6, split:workspace, 6"
"$mainMod, 7, split:workspace, 7"
"$mainMod, 8, split:workspace, 8"
"$mainMod, 9, split:workspace, 9"
"$mainMod, 0, split:workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"$mainMod SHIFT, 1, split:movetoworkspacesilent, 1"
"$mainMod SHIFT, 2, split:movetoworkspacesilent, 2"
"$mainMod SHIFT, 3, split:movetoworkspacesilent, 3"
"$mainMod SHIFT, 4, split:movetoworkspacesilent, 4"
"$mainMod SHIFT, 5, split:movetoworkspacesilent, 5"
"$mainMod SHIFT, 6, split:movetoworkspacesilent, 6"
"$mainMod SHIFT, 7, split:movetoworkspacesilent, 7"
"$mainMod SHIFT, 8, split:movetoworkspacesilent, 8"
"$mainMod SHIFT, 9, split:movetoworkspacesilent, 9"
"$mainMod SHIFT, 0, split:movetoworkspacesilent, 10"
# window control
"$mainMod SHIFT, left, movewindow, l"
"$mainMod SHIFT, right, movewindow, r"
"$mainMod SHIFT, up, movewindow, u"
"$mainMod SHIFT, down, movewindow, d"
"$mainMod SHIFT, h, movewindow, l"
"$mainMod SHIFT, j, movewindow, d"
"$mainMod SHIFT, k, movewindow, u"
"$mainMod SHIFT, l, movewindow, r"
"$mainMod CTRL, left, resizeactive, -80 0"
"$mainMod CTRL, right, resizeactive, 80 0"
"$mainMod CTRL, up, resizeactive, 0 -80"
"$mainMod CTRL, down, resizeactive, 0 80"
"$mainMod CTRL, h, resizeactive, -80 0"
"$mainMod CTRL, j, resizeactive, 0 80"
"$mainMod CTRL, k, resizeactive, 0 -80"
"$mainMod CTRL, l, resizeactive, 80 0"
"$mainMod ALT, left, moveactive, -80 0"
"$mainMod ALT, right, moveactive, 80 0"
"$mainMod ALT, up, moveactive, 0 -80"
"$mainMod ALT, down, moveactive, 0 80"
"$mainMod ALT, h, moveactive, -80 0"
"$mainMod ALT, j, moveactive, 0 80"
"$mainMod ALT, k, moveactive, 0 -80"
"$mainMod ALT, l, moveactive, 80 0"
# Example special workspace (scratchpad)
"$mainMod, S, togglespecialworkspace, magic"
"$mainMod SHIFT, S, movetoworkspace, special:magic"
# Scroll through existing workspaces with mainMod + scroll
"$mainMod, mouse_down, workspace, e+1"
"$mainMod, mouse_up, workspace, e-1"
# media and volume controls
",XF86AudioPlay,exec, playerctl play-pause"
",XF86AudioNext,exec, playerctl next"
",XF86AudioPrev,exec, playerctl previous"
",XF86AudioStop,exec, playerctl stop"
# clipboard manager
"$mainMod, V, exec, cliphist list | wofi --show dmenu | cliphist decode | wl-copy"
];
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
];
windowrulev2 = [
"suppressevent maximize, class:.*" # Ignore maximize requests from apps. You'll probably like this.
"nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0" # Fix some dragging issues with XWayland
"float, title:^(Picture-in-Picture)$"
"opacity 1.0 override 1.0 override, title:^(Picture-in-Picture)$"
"pin, title:^(Picture-in-Picture)$"
"float,class:^(pavucontrol)$"
"float,class:^(SoundWireServer)$"
"float,class:^(.sameboy-wrapped)$"
"float,class:^(file_progress)$"
"float,class:^(confirm)$"
"float,class:^(dialog)$"
"float,class:^(download)$"
"float,class:^(notification)$"
"float,class:^(error)$"
"float,class:^(confirmreset)$"
"float,title:^(Open File)$"
"float,title:^(File Upload)$"
"float,title:^(branchdialog)$"
"float,title:^(Confirm to replace files)$"
"float,title:^(File Operation Progress)$"
# workspace setup
"workspace 10, class:^(feishin)$"
# nextcloud
"float,class:^(com.nextcloud.desktopclient.nextcloud)$"
"stayfocused,class:^(com.nextcloud.desktopclient.nextcloud)$" # otherwise window immediately closes
# Remove context menu transparency in chromium based apps
"opaque,class:^()$,title:^()$"
"noshadow,class:^()$,title:^()$"
"noblur,class:^()$,title:^()$"
];
monitor = [
"DP-1, 1920x1080@74.97, auto-left, 1" # Adalbert: Left
"DP-3, 2560x1440@143.86, auto-right, 1" # Adalbert: Right
"eDP-1, 1920x1080@60, auto, 1" # Ludwig
",preferred,auto,auto"
];
misc = {
vrr = 1;
};
};
};
}

View file

@ -1,140 +0,0 @@
{ pkgs, ... }: {
imports = [ ./config.nix ./variables.nix ];
home.packages = with pkgs; [
hyprpicker # color picker
wofi # dmenu replacement
hyprshade # shader control, used for rudimentary blue-light filter
hyprpolkitagent
grim
slurp
# clipboard management
wl-clip-persist
wl-clipboard
cliphist
];
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
systemd.enable = true;
plugins = [ pkgs.hyprlandPlugins.hyprsplit ];
};
services.dunst = {
enable = true;
settings = {
global = {
corner_radius = 5;
};
};
};
programs.waybar = {
enable = true;
systemd.enable = true;
settings = {
mainBar = {
layer = "top";
position = "top";
modules-left = [ "hyprland/workspaces" ];
modules-center = [ "hyprland/window" ];
modules-right = [ "tray" "memory" "cpu" "clock" ];
tray.spacing = 10;
clock.tooltip-format = "{:%d.%m.%Y}";
cpu.format = "{}% ";
memory.format = " {}% ";
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
"9" = "";
"10" = "󰝚";
"11" = "1";
"12" = "2";
"13" = "3";
"14" = "4";
"15" = "5";
"16" = "6";
"17" = "7";
"18" = "8";
"19" = "9";
"20" = "10";
"urgent" = "";
"focused" = "";
};
};
};
};
};
xdg.configFile."hypr/shaders/bluelight.glsl".text = ''
precision highp float;
varying vec2 v_texcoord;
uniform sampler2D tex;
const float temperature = 4000.0;
const float temperatureStrength = 1.0;
#define WithQuickAndDirtyLuminancePreservation
const float LuminancePreservationFactor = 1.0;
// function from https://www.shadertoy.com/view/4sc3D7
// valid from 1000 to 40000 K (and additionally 0 for pure full white)
vec3 colorTemperatureToRGB(const in float temperature) {
// values from: http://blenderartists.org/forum/showthread.php?270332-OSL-Goodness&p=2268693&viewfull=1#post2268693
mat3 m = (temperature <= 6500.0) ? mat3(vec3(0.0, -2902.1955373783176, -8257.7997278925690),
vec3(0.0, 1669.5803561666639, 2575.2827530017594),
vec3(1.0, 1.3302673723350029, 1.8993753891711275))
: mat3(vec3(1745.0425298314172, 1216.6168361476490, -8257.7997278925690),
vec3(-2666.3474220535695, -2173.1012343082230, 2575.2827530017594),
vec3(0.55995389139931482, 0.70381203140554553, 1.8993753891711275));
return mix(clamp(vec3(m[0] / (vec3(clamp(temperature, 1000.0, 40000.0)) + m[1]) + m[2]), vec3(0.0), vec3(1.0)),
vec3(1.0), smoothstep(1000.0, 0.0, temperature));
}
void main() {
vec4 pixColor = texture2D(tex, v_texcoord);
// RGB
vec3 color = vec3(pixColor[0], pixColor[1], pixColor[2]);
#ifdef WithQuickAndDirtyLuminancePreservation
color *= mix(1.0, dot(color, vec3(0.2126, 0.7152, 0.0722)) / max(dot(color, vec3(0.2126, 0.7152, 0.0722)), 1e-5),
LuminancePreservationFactor);
#endif
color = mix(color, color * colorTemperatureToRGB(temperature), temperatureStrength);
vec4 outCol = vec4(color, pixColor[3]);
gl_FragColor = outCol;
}
'';
# systemd.user.services.wl-gammarelay-rs = {
# Unit = {
# PartOf = [ "graphical-session.target" ];
# After = [ "graphical-session-pre.target" ];
# };
#
# Service = {
# ExecStart = "${pkgs.wl-gammarelay-rs}/bin/wl-gammarelay-rs";
# ExecReload = "${pkgs.coreutils}/bin/kill -SIGUSR2 $MAINPID";
# Restart = "on-failure";
# KillMode = "mixed";
# };
#
# Install = { WantedBy = [ "default.target" ]; };
# };
# systemd.user.services.wl-gammarelay-rs-restart = {
# Unit = {
# After = [ "suspend.target" "hibernate.target" "hybrid-sleep.target" "suspend-then-hibernate.target" ];
# };
#
# Service = {
# ExecStart = "${pkgs.bash}/bin/bash -c '${cmd} 6000 && ${cmd} 4000'";
# };
#
# Install = { WantedBy = [ "suspend.target" "hibernate.target" "hybrid-sleep.target" "suspend-then-hibernate.target" ]; };
# };
}

View file

@ -1,11 +0,0 @@
{
home.sessionVariables = {
NIXOS_OZONE_WL = "1";
GDK_BACKEND = "wayland";
DIRENV_LOG_FORMAT = "";
QT_QPA_PLATFORM = "xcb";
XDG_SESSION_TYPE = "wayland";
SDL_VIDEODRIVER = "wayland";
CLUTTER_BACKEND = "wayland";
};
}

View file

@ -1,12 +1,5 @@
{pkgs, ...}: { {pkgs, ...}: {
home.packages = with pkgs; [ imports = [
protonup-rs # ./steam.nix
heroic
(lutris.override {
extraLibraries = pkgs: [
wine
wineWowPackages.stable
];
})
]; ];
} }

View file

@ -0,0 +1,31 @@
{
pkgs,
lib,
config,
...
}: let
steam-with-pkgs = pkgs.steam.override {
extraPkgs = pkgs:
with pkgs; [
xorg.libXcursor
xorg.libXi
xorg.libXinerama
xorg.libXScrnSaver
libpng
libpulseaudio
libvorbis
stdenv.cc.cc.lib
libkrb5
keyutils
gamescope
mangohud
];
};
in {
home.packages = with pkgs; [
steam-with-pkgs
gamescope
mangohud
protontricks
];
}

View file

@ -1,14 +0,0 @@
{
xdg.userDirs = {
enable = true;
createDirectories = true;
desktop = "/home/ghoscht/Uni";
download = "/home/ghoscht/Downloads";
documents = "/home/ghoscht/Documents";
music = null;
pictures = "/home/ghoscht/Pictures";
publicShare = null;
templates = null;
videos = null;
};
}

View file

@ -1,24 +0,0 @@
{
inputs,
outputs,
...
}: let
in {
imports = [
./global
./features/coding/nixvim
./features/coding/tmux.nix
];
home.file.".docker" = {
source = ../rsc/docker/franz;
recursive = true;
};
nixpkgs = {
config = {
permittedInsecurePackages = [
"nix-2.15.3"
];
};
};
}

View file

@ -20,7 +20,6 @@
# You can also split up your configuration and import pieces of it here: # You can also split up your configuration and import pieces of it here:
../features/cli ../features/cli
../features/general/xdg-dirs.nix
] ]
++ (builtins.attrValues outputs.homeManagerModules); ++ (builtins.attrValues outputs.homeManagerModules);
@ -59,7 +58,7 @@
nix = { nix = {
package = lib.mkDefault pkgs.nix; package = lib.mkDefault pkgs.nix;
settings = { settings = {
experimental-features = ["nix-command" "flakes"]; experimental-features = ["nix-command" "flakes" "repl-flake"];
warn-dirty = false; warn-dirty = false;
}; };
}; };

View file

@ -1,33 +0,0 @@
{ pkgs, ... }: {
imports = [
./global
./features/desktop/awesome
./features/desktop/common/alacritty.nix
./features/desktop/hyprland
./features/desktop/gnome
./features/coding
];
home.packages = with pkgs; [ nextcloud-client ];
nixpkgs = {
config = {
permittedInsecurePackages = [
"electron-25.9.0"
"nix-2.15.3"
];
};
};
wayland.windowManager.hyprland = {
settings = {
bind = [
", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioLowerVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-"
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set +10%"
", XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 10%-"
];
};
};
}

View file

@ -1,82 +1,82 @@
{ inputs # This is your system's configuration file.
, outputs # Use this to configure your system environment (it replaces /etc/nixos/configuration.nix)
, pkgs {
, ... inputs,
outputs,
lib,
config,
pkgs,
...
}: { }: {
# You can import other NixOS modules here
imports = [ imports = [
inputs.hardware.nixosModules.common-cpu-amd-pstate # If you want to use modules your own flake exports (from modules/nixos):
inputs.hardware.nixosModules.common-gpu-nvidia-nonprime # outputs.nixosModules.example
# Or modules from other flakes (such as nixos-hardware):
inputs.hardware.nixosModules.common-cpu-amd
inputs.hardware.nixosModules.common-gpu-nvidia
inputs.hardware.nixosModules.common-pc-ssd inputs.hardware.nixosModules.common-pc-ssd
# You can also split up your configuration and import pieces of it here:
# ./users.nix
# Import your generated (nixos-generate-config) hardware configuration
./hardware-configuration.nix ./hardware-configuration.nix
../common/global ../common/global
../common/optional/desktop/awesome.nix ../common/optional/desktop/awesome.nix
../common/optional/desktop/hyprland.nix
../common/optional/systemd-boot.nix ../common/optional/systemd-boot.nix
../common/optional/wireshark.nix ../common/optional/wireshark.nix
../common/optional/kde-connect.nix ../common/optional/kde-connect.nix
../common/optional/gnome-keyring.nix ../common/optional/gnome-keyring.nix
../common/optional/adb.nix ../common/optional/adb.nix
../common/optional/docker.nix
../common/optional/gaming/gamemode.nix ../common/optional/gaming/gamemode.nix
../common/optional/gaming/steam.nix ../common/optional/gaming/steam.nix
../common/optional/desktop/japanese.nix ../common/optional/gaming/vr.nix
../common/optional/udisks.nix
../common/optional/fhs-compat.nix
../common/optional/stylix.nix
]; ];
nixpkgs = { nixpkgs = {
# You can add overlays here
overlays = [ overlays = [
# Add overlays your own flake exports (from overlays and pkgs dir):
outputs.overlays.additions outputs.overlays.additions
outputs.overlays.modifications outputs.overlays.modifications
outputs.overlays.unstable-packages outputs.overlays.unstable-packages
];
# You can also add overlays exported from other flakes:
# neovim-nightly-overlay.overlays.default
# Or define it inline, for example:
# (final: prev: {
# hi = final.hello.overrideAttrs (oldAttrs: {
# patches = [ ./change-hello-to-hi.patch ];
# });
# })
];
# Configure your nixpkgs instance
config = { config = {
# Disable if you don't want unfree packages
allowUnfree = true; allowUnfree = true;
firefox.enablePlasmaBrowserIntegration = true; firefox.enablePlasmaBrowserIntegration = true;
segger-jlink.acceptLicense = true;
permittedInsecurePackages = [ "segger-jlink-qt4-796s" "dotnet-runtime-6.0.36" "dotnet-sdk-wrapped-6.0.428" "dotnet-sdk-6.0.428" ];
}; };
}; };
networking.hostName = "adalbert"; networking.hostName = "adalbert";
services.udev.packages = [ inputs.heliox-cli.packages.x86_64-linux.default pkgs.segger-jlink ]; # Force disable Nvidia PRIME, needed by nix-hardware
environment.systemPackages = [ inputs.heliox-cli.packages.x86_64-linux.default ]; hardware.nvidia.prime.offload.enable = false;
services.xserver.displayManager.gdm.enable = true;
boot.binfmt.emulatedSystems = [
"aarch64-linux"
"riscv64-linux"
];
programs = { programs = {
adb.enable = true; adb.enable = true;
dconf.enable = true; dconf.enable = true;
coolercontrol = { kdeconnect.enable = true;
enable = true;
nvidiaSupport = true;
};
# Personalausweis reader
ausweisapp = {
enable = true;
openFirewall = true; # also sets firewall entry
};
}; };
hardware = { hardware = {
graphics.enable = true; opengl.enable = true;
opentabletdriver.enable = true; opentabletdriver.enable = true;
nvidia = {
open = false;
powerManagement.enable = true;
};
}; };
# https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion

View file

@ -18,17 +18,17 @@
boot.extraModulePackages = []; boot.extraModulePackages = [];
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-uuid/e92a5e85-52ce-4627-be79-5c07a99e2d1b"; device = "/dev/disk/by-uuid/f9ba57fb-0b82-47e0-8189-7bbebc530e2b";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-uuid/348E-AC69"; device = "/dev/disk/by-uuid/BCF2-51D4";
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [ swapDevices = [
{device = "/dev/disk/by-uuid/ae322cab-c083-4644-80ff-9122498d54e8";} {device = "/dev/disk/by-uuid/4834fbc3-3feb-4b93-b11f-8b9bd054c5c1";}
]; ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking

View file

@ -2,6 +2,7 @@
{ {
inputs, inputs,
outputs, outputs,
config,
... ...
}: { }: {
imports = imports =
@ -11,8 +12,8 @@
./fish.nix ./fish.nix
./locale.nix ./locale.nix
./nix.nix ./nix.nix
./podman.nix
./power-button.nix ./power-button.nix
./documentation.nix
] ]
++ (builtins.attrValues outputs.nixosModules); ++ (builtins.attrValues outputs.nixosModules);
@ -25,8 +26,8 @@
}; };
}; };
# Enable networking # Fix for qt6 plugins
networking.networkmanager.enable = true; environment.profileRelativeSessionVariables = {
QT_PLUGIN_PATH = ["/lib/qt-6/plugins"];
boot.supportedFilesystems = ["ntfs"]; };
} }

View file

@ -1,9 +0,0 @@
{pkgs, ...}: {
environment.systemPackages = with pkgs; [man-pages man-pages-posix];
documentation.dev.enable = true;
documentation.man = {
# In order to enable to mandoc man-db has to be disabled.
man-db.enable = false;
mandoc.enable = true;
};
}

View file

@ -16,5 +16,5 @@
}; };
}; };
console.keyMap = "de"; console.keyMap = "de";
services.xserver.xkb.layout = "de"; services.xserver.layout = "de";
} }

View file

@ -6,7 +6,7 @@
nix = { nix = {
settings = { settings = {
auto-optimise-store = lib.mkDefault true; auto-optimise-store = lib.mkDefault true;
experimental-features = ["nix-command" "flakes"]; experimental-features = ["nix-command" "flakes" "repl-flake"];
warn-dirty = false; warn-dirty = false;
system-features = ["kvm" "big-parallel" "nixos-test"]; system-features = ["kvm" "big-parallel" "nixos-test"];
}; };

View file

@ -9,6 +9,4 @@
# Create folder where all fonts are linked to /run/current-system/sw/share/X11/fonts # Create folder where all fonts are linked to /run/current-system/sw/share/X11/fonts
fonts.fontDir.enable = true; fonts.fontDir.enable = true;
xdg.portal.enable = true;
} }

View file

@ -4,13 +4,15 @@
pkgs, pkgs,
... ...
}: { }: {
imports = [./pipewire.nix ../printing.nix ./flatpak.nix ./xremap.nix]; imports = [./pipewire.nix ../printing.nix ./flatpak.nix ./xdg.nix ./xremap.nix];
# Enable networking
networking.networkmanager.enable = true;
# Enable for GTK # Enable for GTK
programs.dconf.enable = true; programs.dconf.enable = true;
# Fix for qt6 plugins services.xserver = {
environment.profileRelativeSessionVariables = { displayManager.sddm.enable = true;
QT_PLUGIN_PATH = ["/lib/qt-6/plugins"];
}; };
} }

View file

@ -7,41 +7,10 @@
imports = [./global.nix ./x11.nix ./wayland.nix]; imports = [./global.nix ./x11.nix ./wayland.nix];
services = { services = {
libinput.enable = true;
xserver = { xserver = {
desktopManager.gnome = { desktopManager.gnome = {
enable = true; enable = true;
}; };
modules = [pkgs.xf86_input_wacom];
wacom.enable = true;
}; };
udev.packages = with pkgs; [
gnome-settings-daemon
];
};
environment = {
systemPackages = with pkgs; [
# System-Wide Packages
adwaita-icon-theme
dconf-editor
gnome-tweaks
gnomeExtensions.kimpanel
gnomeExtensions.vitals
gnomeExtensions.tray-icons-reloaded
];
gnome.excludePackages = with pkgs; [
gnome-tour
gedit
atomix
epiphany
geary
gnome-characters
gnome-contacts
gnome-initial-setup
hitori
iagno
tali
];
}; };
} }

View file

@ -1,25 +0,0 @@
{ pkgs, ... }: {
imports = [ ./global.nix ./x11.nix ./wayland.nix ];
programs.hyprland.enable = true;
xdg.portal = {
enable = true;
wlr.enable = true;
xdgOpenUsePortal = true;
extraPortals = [
pkgs.xdg-desktop-portal-hyprland
pkgs.xdg-desktop-portal-gtk
];
};
environment.etc."systemd/system-sleep/post-hibernate-bluelight.sh".source = pkgs.writeShellScript "post-hibernate-bluelight.sh" ''
if [ "$1-$SYSTEMD_SLEEP_ACTION" = "post-hibernate" ]; then
${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Temperature q 4000
${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Temperature q 6000
${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Temperature q 4000
${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Temperature q 4000
${pkgs.systemd}/bin/busctl --user set-property rs.wl-gammarelay / rs.wl.gammarelay Temperature q 4000
fi
'';
}

View file

@ -1,14 +0,0 @@
{pkgs, ...}: {
i18n.inputMethod = {
enable = true;
type = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-mozc
fcitx5-gtk
];
fcitx5.waylandFrontend = true;
};
fonts.packages = with pkgs; [
noto-fonts-cjk-sans
];
}

View file

@ -1,4 +1,4 @@
{pkgs, ...}: { {
security.rtkit.enable = true; security.rtkit.enable = true;
hardware.pulseaudio.enable = false; hardware.pulseaudio.enable = false;
services.pipewire = { services.pipewire = {
@ -8,6 +8,4 @@
pulse.enable = true; pulse.enable = true;
jack.enable = true; jack.enable = true;
}; };
environment.systemPackages = with pkgs; [pavucontrol pulseaudio qpwgraph];
} }

View file

@ -1,15 +0,0 @@
{pkgs, ...}: {
imports = [./global.nix ./x11.nix];
services.xserver.desktopManager.plasma5.enable = true;
environment.plasma5.excludePackages = with pkgs.libsForQt5; [
elisa
gwenview
okular
oxygen
khelpcenter
konsole
plasma-browser-integration
print-manager
];
}

View file

@ -5,12 +5,11 @@
... ...
}: { }: {
services = { services = {
libinput.enable = true; # Enable touchpad support
libinput.touchpad.naturalScrolling = true;
# Enable the X11 windowing system. # Enable the X11 windowing system.
xserver = { xserver = {
enable = true; enable = true;
# Enable touchpad support
libinput.enable = true;
# Remove xterm terminal # Remove xterm terminal
excludePackages = with pkgs; [xterm]; excludePackages = with pkgs; [xterm];
modules = [pkgs.xf86_input_wacom]; modules = [pkgs.xf86_input_wacom];

View file

@ -1,63 +1,21 @@
{ {
pkgs, pkgs,
inputs, inputs,
lib,
... ...
}: { }: {
imports = [ imports = [
inputs.xremap.nixosModules.default inputs.xremap.nixosModules.default
]; ];
hardware.uinput.enable = true;
users.groups.uinput.members = ["ghoscht"];
users.groups.input.members = ["ghoscht"];
systemd.user.services.set-xhost = {
description = "Run a one-shot command upon user login";
path = [pkgs.xorg.xhost];
wantedBy = ["default.target"];
script = "xhost +SI:localuser:root";
environment.DISPLAY = ":0"; # NOTE: This is hardcoded for this flake
};
services.xremap = { services.xremap = {
withX11 = true; withX11 = true;
watch = true;
debug = false;
userName = "ghoscht";
serviceMode = "user";
config = { config = {
keymap = [ keymap = [
{ {
name = "Global"; name = "main remaps";
remap = { remap = {
"CapsLock" = "Esc"; super-e = {
"Esc" = "CapsLock"; launch = ["firefox"];
super-x = {
launch = ["${lib.getExe pkgs.wezterm}"];
};
# super-space = {
# launch = ["${lib.getExe pkgs.rofi}" "-i" "-show" "drun" "-show-icons"];
# };
# super-control-l = {
# launch = ["${lib.getExe pkgs.firefox}"];
# };
# super-control-shift-l = {
# launch = ["${lib.getExe pkgs.firefox}" "--private-window"];
# };
};
}
{
name = "Music";
remap = {
"KEY_PLAYPAUSE" = {
launch = ["${lib.getExe pkgs.playerctl}" "play-pause"];
};
"KEY_NEXTSONG" = {
launch = ["${lib.getExe pkgs.playerctl}" "next"];
};
"KEY_PREVIOUSSONG" = {
launch = ["${lib.getExe pkgs.playerctl}" "previous"];
}; };
}; };
} }

View file

@ -1,13 +1,5 @@
{ {
virtualisation.docker = { virtualisation.docker = {
enable = true; enable = true;
daemon.settings = {
"default-address-pools" = [
{
"base" = "172.29.0.0/16";
"size" = 24;
}
];
};
}; };
} }

View file

@ -1,69 +0,0 @@
{
pkgs,
lib,
config,
...
}: {
services.envfs.enable = lib.mkDefault true;
programs.nix-ld.enable = lib.mkDefault true;
programs.nix-ld.libraries = with pkgs;
[
acl
attr
bzip2
dbus
expat
fontconfig
freetype
fuse3
icu
libnotify
libsodium
libssh
libunwind
libusb1
libuuid
nspr
nss
stdenv.cc.cc
util-linux
zlib
zstd
]
++ lib.optionals (config.hardware.graphics.enable) [
pipewire
cups
libxkbcommon
pango
mesa
libdrm
libglvnd
libpulseaudio
atk
cairo
alsa-lib
at-spi2-atk
at-spi2-core
gdk-pixbuf
glib
gtk3
libGL
libappindicator-gtk3
vulkan-loader
xorg.libX11
xorg.libXScrnSaver
xorg.libXcomposite
xorg.libXcursor
xorg.libXdamage
xorg.libXext
xorg.libXfixes
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXtst
xorg.libxcb
xorg.libxkbfile
xorg.libxshmfence
];
}

View file

@ -1,17 +1,18 @@
{ {pkgs, ...}: {
config, environment.systemPackages = with pkgs.unstable; [
lib, heroic # Game Launcher
pkgs, lutris # Game Launcher
... steam # Game Launcher
}: { ];
programs = { programs = {
steam = { steam = {
enable = true; enable = true;
remotePlay.openFirewall = true;
gamescopeSession.enable = false;
}; };
}; # Steam: Right-click game - Properties - Launch options: gamemoderun %command%
# Lutris: General Preferences - Enable Feral GameMode
xdg.mime = { # - Global options - Add Environment Variables: LD_PRELOAD=/nix/store/*-gamemode-*-lib/lib/libgamemodeauto.so
defaultApplications."x-scheme-handler/steam" = "steam.desktop";
addedAssociations."x-scheme-handler/steam" = "steam.desktop";
}; };
} }

View file

@ -0,0 +1,6 @@
{
programs.alvr = {
enable = true;
openFirewall = true;
};
}

View file

@ -2,10 +2,11 @@
config, config,
lib, lib,
pkgs, pkgs,
vars,
... ...
}: let }: let
in { in {
security.pam.services.sddm.enableGnomeKeyring = true; security.pam.services.${vars.user}.enableGnomeKeyring = true;
services.gnome.gnome-keyring.enable = true; services.gnome.gnome-keyring.enable = true;
programs.seahorse.enable = true; programs.seahorse.enable = true;
} }

View file

@ -9,8 +9,7 @@
printing.enable = true; printing.enable = true;
avahi = { avahi = {
enable = true; enable = true;
nssmdns4 = true; nssmdns = true;
nssmdns6 = true;
# for a WiFi printer # for a WiFi printer
openFirewall = true; openFirewall = true;
}; };

View file

@ -0,0 +1,33 @@
{
pkgs,
config,
...
}: {
console = {
useXkbConfig = true;
earlySetup = false;
};
boot = {
plymouth = {
enable = true;
theme = "spinner-monochrome";
themePackages = [
(pkgs.plymouth-spinner-monochrome.override {
inherit (config.boot.plymouth) logo;
})
];
};
loader.timeout = 0;
kernelParams = [
"quiet"
"loglevel=3"
"systemd.show_status=auto"
"udev.log_level=3"
"rd.udev.log_level=3"
"vt.global_cursor_default=0"
];
consoleLogLevel = 0;
initrd.verbose = false;
};
}

View file

@ -1,36 +0,0 @@
{
inputs,
pkgs,
...
}: {
imports = [inputs.stylix.nixosModules.stylix];
stylix = {
enable = true;
polarity = "dark";
image = ../../../rsc/wallpaper/rolltreppe-gluehwein.jpg;
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
opacity.terminal = 0.83;
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = 25;
};
fonts = {
monospace = {
package = pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];};
name = "JetBrainsMono Nerd Font Mono";
};
sansSerif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans";
};
serif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Serif";
};
};
};
}

View file

@ -3,7 +3,6 @@
systemd-boot = { systemd-boot = {
enable = true; enable = true;
consoleMode = "max"; consoleMode = "max";
configurationLimit = 42;
}; };
efi.canTouchEfiVariables = true; efi.canTouchEfiVariables = true;
}; };

View file

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

View file

@ -1,7 +0,0 @@
{
services.vsftpd = {
enable = true;
writeEnable = true;
localUsers = true;
};
}

View file

@ -1,117 +0,0 @@
{
pkgs,
lib,
...
}: let
vars = import ../../vars.nix;
in {
imports = [../common/global/locale.nix];
# NixOS wants to enable GRUB by default
boot.loader.grub.enable = false;
# Enables the generation of /boot/extlinux/extlinux.conf
boot.loader.generic-extlinux-compatible.enable = true;
# !!! Set to specific linux kernel version
boot.kernelPackages = pkgs.linuxPackages;
# Disable ZFS on kernel 6
boot.supportedFilesystems = lib.mkForce [
"vfat"
"xfs"
"cifs"
"ntfs"
];
# !!! Needed for the virtual console to work on the RPi 3, as the default of 16M doesn't seem to be enough.
# If X.org behaves weirdly (I only saw the cursor) then try increasing this to 256M.
# On a Raspberry Pi 4 with 4 GB, you should either disable this parameter or increase to at least 64M if you want the USB ports to work.
boot.kernelParams = ["cma=256M"];
# File systems configuration for using the installer's partition layout
fileSystems = {
# Prior to 19.09, the boot partition was hosted on the smaller first partition
# Starting with 19.09, the /boot folder is on the main bigger partition.
# The following is to be used only with older images.
/*
"/boot" = {
device = "/dev/disk/by-label/NIXOS_BOOT";
fsType = "vfat";
};
*/
"/" = {
device = "/dev/disk/by-label/NIXOS_SD";
fsType = "ext4";
};
};
# !!! Adding a swap file is optional, but strongly recommended!
swapDevices = [
{
device = "/swapfile";
size = 1024;
}
];
# systemPackages
environment.systemPackages = with pkgs; [
neovim
curl
wget
];
services.openssh = {
enable = true;
settings.PermitRootLogin = "yes";
};
services.restic.server = {
enable = true;
dataDir = "/mnt/backups";
extraFlags = ["--no-auth"];
};
services.tailscale = {
enable = true;
useRoutingFeatures = "server";
};
virtualisation.docker.enable = true;
networking.firewall.enable = false;
# Networking
networking.useDHCP = true;
# forwarding
boot.kernel.sysctl = {
"net.ipv4.conf.all.forwarding" = true;
"net.ipv6.conf.all.forwarding" = true;
"net.ipv4.tcp_ecn" = true;
};
# put your own configuration here, for example ssh keys:
users.mutableUsers = true;
users.users.nixos = {
isNormalUser = true;
password = "changeme";
extraGroups = ["wheel" "docker"];
openssh.authorizedKeys.keys = [
#Adalbert
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJd6Gut34abkwlZ4tZVBO4Qt7CkIpPm/Z8R6JCisjnYy openpgp:0xBD0CFCA0"
#Ludwig
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFlRsnLqm6Ap3yKEEhtFiWavo72df/X5Il1ZCmENUqev openpgp:0xDE189CA5"
#Franz
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIINCjLoirHMos7c9lRatWtSYAk68xbUGc8vPU0wFxIzj openpgp:0x7430326E"
];
};
users.users.admin = {
isNormalUser = true;
extraGroups = ["wheel"]; # Enable sudo for the user.
hashedPassword = "blablabla"; # generate with `mkpasswd`
};
nix.settings.trusted-users = ["admin" "ghoscht" "nixos"];
system.stateVersion = "23.11";
}

View file

@ -1,7 +0,0 @@
# Franz
## Drive Formatting
```sh
sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko ../../disko/btrfs-swap.nix --arg device '"/dev/nvme0n1"'
```

View file

@ -1,131 +0,0 @@
let
authentikImage = "ghcr.io/goauthentik/server:2024.12.0";
in {
project.name = "auth";
networks.dmz = {
name = "dmz";
external = true;
};
networks.internal = {};
services = {
authentik.service = {
image = authentikImage;
container_name = "authentik";
labels = {
"traefik.enable" = "true";
"traefik.http.services.authentik.loadbalancer.server.port" = "9000";
"traefik.http.routers.authentik.service" = "authentik";
"traefik.http.routers.authentik.rule" = "Host(`auth.ghoscht.com`)";
"traefik.http.routers.authentik.entrypoints" = "websecure";
"traefik.http.routers.authentik.tls" = "true";
"traefik.http.routers.authentik.tls.certresolver" = "letsencrypt";
"traefik.http.services.authentik-external.loadbalancer.server.port" = "9000";
"traefik.http.routers.authentik-external.service" = "authentik-external";
"traefik.http.routers.authentik-external.rule" = "Host(`auth.ghoscht.com`)";
"traefik.http.routers.authentik-external.entrypoints" = "websecure-external";
"traefik.http.routers.authentik-external.tls" = "true";
"traefik.http.routers.authentik-external.tls.certresolver" = "letsencrypt";
"diun.enable" = "true";
"diun.watch_repo" = "true";
"diun.include_tags" = "^\\d+\\.\\d+\\.\\d+$$";
};
command = "server";
environment = {
AUTHENTIK_REDIS__HOST = "redis";
AUTHENTIK_POSTGRESQL__HOST = "postgres";
AUTHENTIK_ERROR_REPORTING__ENABLED = "true";
};
env_file = [
"/home/ghoscht/.docker/auth/authentik.env"
];
restart = "always";
depends_on = {
redis = {condition = "service_healthy";};
postgres = {condition = "service_healthy";};
};
volumes = [
"/home/ghoscht/.docker/auth/authentik_media:/media"
"/home/ghoscht/.docker/auth/authentik_custom_templates:/templates"
];
networks = [
"dmz"
"internal"
];
};
worker.service = {
image = authentikImage;
command = "worker";
environment = {
AUTHENTIK_REDIS__HOST = "redis";
AUTHENTIK_POSTGRESQL__HOST = "postgres";
AUTHENTIK_ERROR_REPORTING__ENABLED = "true";
};
env_file = [
"/home/ghoscht/.docker/auth/authentik.env"
];
depends_on = {
redis = {condition = "service_healthy";};
postgres = {condition = "service_healthy";};
};
volumes = [
"/var/run/docker.sock:/var/run/docker.sock"
"/home/ghoscht/.docker/auth/authentik_media:/media"
"/home/ghoscht/.docker/auth/authentik_custom_templates:/templates"
];
restart = "always";
user = "root";
networks = [
"internal"
];
};
redis.service = {
image = "redis:7.2.4";
command = "--save 60 1 --loglevel warning";
healthcheck = {
test = [
"CMD-SHELL"
"redis-cli ping | grep PONG"
];
start_period = "20s";
interval = "30s";
retries = 5;
timeout = "5s";
};
restart = "always";
volumes = [
"/home/ghoscht/.docker/auth/redis_data:/data"
];
networks = [
"internal"
];
};
postgres.service = {
image = "postgres:12.18";
restart = "always";
env_file = [
"/home/ghoscht/.docker/auth/postgres.env"
];
volumes = [
"/home/ghoscht/.docker/auth/postgres_data:/var/lib/postgresql/data"
];
healthcheck = {
test = [
"CMD-SHELL"
"pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"
];
start_period = "20s";
interval = "30s";
retries = 5;
timeout = "5s";
};
networks = [
"internal"
];
};
};
}

View file

@ -1,6 +0,0 @@
# Instead of pinning Nixpkgs, we can opt to use the one in NIX_PATH
import <nixpkgs> {
# We specify the architecture explicitly. Use a Linux remote builder when
# calling arion from other platforms.
system = "x86_64-linux";
}

View file

@ -1,45 +0,0 @@
{config, ...}: let
vars = import ../../../../vars.nix;
in {
virtualisation.arion = {
projects.auth.settings = {
imports = [./arion-compose.nix];
};
};
sops.secrets."auth/postgres_db" = {
owner = vars.user;
};
sops.secrets."auth/postgres_user" = {
owner = vars.user;
};
sops.secrets."auth/postgres_pw" = {
owner = vars.user;
};
sops.secrets."auth/authentik_secret_key" = {
owner = vars.user;
};
sops.templates."auth-postgres.env" = {
path = "/home/${vars.user}/.docker/auth/postgres.env";
owner = vars.user;
mode = "0775";
content = ''
POSTGRES_PASSWORD="${config.sops.placeholder."auth/postgres_pw"}"
POSTGRES_USER="${config.sops.placeholder."auth/postgres_user"}"
POSTGRES_DB="${config.sops.placeholder."auth/postgres_db"}"
'';
};
sops.templates."auth-authentik.env" = {
path = "/home/${vars.user}/.docker/auth/authentik.env";
owner = vars.user;
mode = "0775";
content = ''
AUTHENTIK_POSTGRESQL__PASSWORD="${config.sops.placeholder."auth/postgres_pw"}"
AUTHENTIK_POSTGRESQL__USER="${config.sops.placeholder."auth/postgres_user"}"
AUTHENTIK_POSTGRESQL__NAME="${config.sops.placeholder."auth/postgres_db"}"
AUTHENTIK_SECRET_KEY="${config.sops.placeholder."auth/authentik_secret_key"}"
'';
};
}

View file

@ -1,42 +0,0 @@
{
project.name = "dashboard";
networks.dmz = {
name = "dmz";
external = true;
};
services = {
homarr.service = {
image = "ghcr.io/ajnart/homarr:0.15.10";
container_name = "homarr";
labels = {
"traefik.enable" = "true";
"traefik.http.routers.homarr.entrypoints" = "websecure";
"traefik.http.routers.homarr.rule" = "Host(`dashboard.ghoscht.com`)";
"traefik.http.routers.homarr.tls" = "true";
"traefik.http.routers.homarr.tls.certresolver" = "letsencrypt";
};
environment = {
AUTH_PROVIDER = "oidc";
AUTH_OIDC_URI = "https://auth.ghoscht.com/application/o/homarr";
AUTH_OIDC_CLIENT_NAME = "authentik";
NEXTAUTH_URL = "https://dashboard.ghoscht.com";
AUTH_OIDC_ADMIN_GROUP = "Homarr Admins";
AUTH_OIDC_OWNER_GROUP = "Homarr Admins";
};
env_file = [
"/home/ghoscht/.docker/dashboard/homarr.env"
];
volumes = [
"/home/ghoscht/.docker/dashboard/homarr_data:/data"
"/home/ghoscht/.docker/dashboard/homarr_config:/app/data/configs"
"/home/ghoscht/.docker/dashboard/homarr_icons:/app/public/imgs"
];
restart = "always";
networks = [
"dmz"
];
};
};
}

View file

@ -1,6 +0,0 @@
# Instead of pinning Nixpkgs, we can opt to use the one in NIX_PATH
import <nixpkgs> {
# We specify the architecture explicitly. Use a Linux remote builder when
# calling arion from other platforms.
system = "x86_64-linux";
}

View file

@ -1,24 +0,0 @@
{config, ...}: let
vars = import ../../../../vars.nix;
in {
virtualisation.arion = {
projects.dashboard.settings = {
imports = [./arion-compose.nix];
};
};
sops.secrets."homarr/oidc_client_id" = {
owner = vars.user;
};
sops.secrets."homarr/oidc_client_secret" = {
owner = vars.user;
};
sops.templates."homarr.env" = {
path = "/home/${vars.user}/.docker/dashboard/homarr.env";
owner = vars.user;
mode = "0775";
content = ''
AUTH_OIDC_CLIENT_SECRET="${config.sops.placeholder."homarr/oidc_client_secret"}"
AUTH_OIDC_CLIENT_ID="${config.sops.placeholder."homarr/oidc_client_id"}"
'';
};
}

View file

@ -1,51 +0,0 @@
{
inputs,
pkgs,
config,
...
}: {
imports = [
inputs.arion.nixosModules.arion
./dns
./infrastructure
./nextcloud
./push
./git
./passwords
./media
./dashboard
./smarthome
./signal
./feed
# ./matrix
./headscale
./auth
./minio
./stats
./wiki
];
environment.systemPackages = with pkgs; [arion];
virtualisation.arion.backend = "docker";
systemd.services.init-dmz-bridge-network = {
description = "Create the network bridge dmz for the Docker stack.";
after = ["network.target"];
wantedBy = ["multi-user.target"];
serviceConfig.Type = "oneshot";
script = let
dockercli = "${config.virtualisation.docker.package}/bin/docker";
in ''
# Put a true at the end to prevent getting non-zero return code, which will
# crash the whole service.
check=$(${dockercli} network ls | grep "dmz" || true)
if [ -z "$check" ]; then
${dockercli} network create dmz
else
echo "dmz already exists in docker"
fi
'';
};
}

View file

@ -1,75 +0,0 @@
{
project.name = "dns";
networks.dmz = {
name = "dmz";
external = true;
};
networks.dns = {
name = "dns";
driver = "bridge";
ipam.config = [
{
subnet = "172.29.1.0/24";
ip_range = "172.29.1.4/30";
gateway = "172.29.1.1";
}
];
};
services = {
pihole.service = {
image = "pihole/pihole:2024.07.0";
container_name = "pihole";
hostname = "pihole";
environment = {
IPv6 = "True";
TZ = "Europe/Berlin";
SKIPGRAVITYONBOOT = 1;
VIRTUAL_HOST = "pihole.ghoscht.com";
};
volumes = [
"/home/ghoscht/.docker/dns/pihole_data:/etc/pihole"
"/home/ghoscht/.docker/dns/pihole_dnsmasq:/etc/dnsmasq.d"
];
labels = {
"traefik.enable" = "true";
"traefik.http.routers.pihole.entrypoints" = "websecure";
"traefik.http.routers.pihole.rule" = "Host(`pihole.ghoscht.com`)";
"traefik.http.services.pihole.loadbalancer.server.port" = "80";
"traefik.docker.network" = "dmz";
"traefik.http.routers.pihole.tls" = "true";
"traefik.http.routers.pihole.tls.certresolver" = "letsencrypt";
};
restart = "always";
networks = {
dmz = {};
dns = {
ipv4_address = "172.29.1.6";
};
};
capabilities = {
NET_ADMIN = true;
};
ports = [
"8420:80"
"53:53/tcp"
"53:53/udp"
];
};
unbound.service = {
image = "mvance/unbound:1.21.1";
container_name = "unbound";
volumes = [
"/home/ghoscht/.docker/dns/unbound_data:/opt/unbound/etc/unbound"
];
restart = "always";
networks = {
dns = {
ipv4_address = "172.29.1.5";
};
};
};
};
}

View file

@ -1,6 +0,0 @@
# Instead of pinning Nixpkgs, we can opt to use the one in NIX_PATH
import <nixpkgs> {
# We specify the architecture explicitly. Use a Linux remote builder when
# calling arion from other platforms.
system = "x86_64-linux";
}

View file

@ -1,11 +0,0 @@
{pkgs, ...}: {
virtualisation.arion = {
projects.dns.settings = {
imports = [./arion-compose.nix];
};
};
# Fix containers not being able to use pihole as dns
networking.resolvconf.useLocalResolver = true;
networking.firewall.allowedTCPPorts = [80 443];
}

View file

@ -1,46 +0,0 @@
{pkgs, ...}: {
project.name = "feed";
networks.dmz = {
name = "dmz";
external = true;
};
networks.transport = {};
services = {
ttrss.service = {
image = "wangqiru/ttrss:latest-2024-02-28";
container_name = "ttrss";
ports = [
"181:80"
];
environment = {
PUID = 1000;
PGID = 1000;
DB_HOST = "feed-db";
};
env_file = [
"/home/ghoscht/.docker/feed/ttrss.env"
];
restart = "always";
networks = [
"dmz"
"transport"
];
};
feed-db.service = {
image = "postgres:13-alpine";
volumes = [
"/home/ghoscht/.docker/feed/ttrss_db:/var/lib/postgresql/data"
];
env_file = [
"/home/ghoscht/.docker/feed/ttrss.env"
];
restart = "always";
networks = [
"transport"
];
};
};
}

View file

@ -1,6 +0,0 @@
# Instead of pinning Nixpkgs, we can opt to use the one in NIX_PATH
import <nixpkgs> {
# We specify the architecture explicitly. Use a Linux remote builder when
# calling arion from other platforms.
system = "x86_64-linux";
}

View file

@ -1,22 +0,0 @@
{config, ...}: let
vars = import ../../../../vars.nix;
in {
virtualisation.arion = {
projects.feed.settings = {
imports = [./arion-compose.nix];
};
};
sops.secrets."ttrss/db_password" = {
owner = vars.user;
};
sops.templates."ttrss.env" = {
path = "/home/${vars.user}/.docker/feed/ttrss.env";
owner = vars.user;
mode = "0775";
content = ''
DB_PASS="${config.sops.placeholder."ttrss/db_password"}"
'';
};
}

View file

@ -1,71 +0,0 @@
{
project.name = "git";
networks.dmz = {
name = "dmz";
external = true;
};
networks.transport = {};
services = {
forgejo.service = {
image = "codeberg.org/forgejo/forgejo:9.0.3";
container_name = "forgejo";
useHostStore = true;
labels = {
"traefik.enable" = "true";
"diun.enable" = "true";
"traefik.docker.network" = "dmz";
"traefik.http.services.forgejo.loadbalancer.server.port" = "3000";
"traefik.http.routers.forgejo.service" = "forgejo";
"traefik.http.routers.forgejo.entrypoints" = "websecure";
"traefik.http.routers.forgejo.rule" = "Host(`git.ghoscht.com`)";
"traefik.http.routers.forgejo.tls" = "true";
"traefik.http.routers.forgejo.tls.certresolver" = "letsencrypt";
"traefik.http.services.forgejo-external.loadbalancer.server.port" = "3000";
"traefik.http.routers.forgejo-external.service" = "forgejo-external";
"traefik.http.routers.forgejo-external.rule" = "Host(`git.ghoscht.com`)";
"traefik.http.routers.forgejo-external.entrypoints" = "websecure-external";
"traefik.http.routers.forgejo-external.tls" = "true";
"traefik.http.routers.forgejo-external.tls.certresolver" = "letsencrypt";
};
volumes = [
"/home/ghoscht/.docker/git/forgejo_data:/data"
"/etc/localtime:/etc/localtime:ro"
];
ports = [
"2222:22"
];
environment = {
USER_UID = 1000;
USER_GID = 1000;
GITEA__database__DB_TYPE = "postgres";
GITEA__database__HOST = "git-db:5432";
};
env_file = [
"/home/ghoscht/.docker/git/forgejo.env"
];
restart = "unless-stopped";
networks = [
"dmz"
"transport"
];
};
git-db.service = {
image = "postgres:15.3-bullseye";
env_file = [
"/home/ghoscht/.docker/git/forgejo-db.env"
];
volumes = [
"/home/ghoscht/.docker/git/forgejo_db:/var/lib/postgresql/data"
];
restart = "unless-stopped";
networks = [
"transport"
];
};
};
}

View file

@ -1,6 +0,0 @@
# Instead of pinning Nixpkgs, we can opt to use the one in NIX_PATH
import <nixpkgs> {
# We specify the architecture explicitly. Use a Linux remote builder when
# calling arion from other platforms.
system = "x86_64-linux";
}

View file

@ -1,65 +0,0 @@
{
config,
pkgs,
...
}: let
vars = import ../../../../vars.nix;
in {
virtualisation.arion = {
projects.git.settings = {
imports = [./arion-compose.nix];
};
};
sops.secrets."forgejo/db_password" = {
owner = vars.user;
};
sops.secrets."forgejo/db_user" = {
owner = vars.user;
};
sops.secrets."forgejo/db_database" = {
owner = vars.user;
};
sops.secrets."forgejo/runner_token" = {
owner = vars.user;
};
sops.templates."forgejo.env" = {
path = "/home/${vars.user}/.docker/git/forgejo.env";
owner = vars.user;
mode = "0775";
content = ''
GITEA__database__NAME="${config.sops.placeholder."forgejo/db_database"}"
GITEA__database__USER="${config.sops.placeholder."forgejo/db_user"}"
GITEA__database__PASSWD="${config.sops.placeholder."forgejo/db_password"}"
'';
};
sops.templates."forgejo-db.env" = {
path = "/home/${vars.user}/.docker/git/forgejo-db.env";
owner = vars.user;
mode = "0775";
content = ''
POSTGRES_DB="${config.sops.placeholder."forgejo/db_database"}"
POSTGRES_USER="${config.sops.placeholder."forgejo/db_user"}"
POSTGRES_PASSWORD="${config.sops.placeholder."forgejo/db_password"}"
'';
};
services.gitea-actions-runner = {
package = pkgs.forgejo-runner;
instances.default = {
enable = true;
name = config.networking.hostName;
url = "https://git.ghoscht.com";
# tokenFile = "/home/${vars.user}/.docker/git/forgejo-runner.env";
tokenFile = config.sops.secrets."forgejo/runner_token".path;
labels = [
"ubuntu-latest:docker://node:22-bookworm"
];
};
};
# enable cache actions https://forgejo.org/docs/latest/admin/runner-installation/
networking.firewall.trustedInterfaces = ["br-+"];
}

View file

@ -1,56 +0,0 @@
{pkgs, ...}: {
project.name = "headscale";
networks.dmz = {
name = "dmz";
external = true;
};
services = {
headscale.service = {
image = "headscale/headscale:0.22.3-debug";
container_name = "headscale";
restart = "always";
command = "headscale serve";
labels = {
"traefik.enable" = "true";
"traefik.http.services.headscale.loadbalancer.server.port" = "8080";
"traefik.http.routers.headscale.service" = "headscale";
"traefik.http.routers.headscale.entrypoints" = "websecure";
"traefik.http.routers.headscale.rule" = "Host(`headscale.ghoscht.com`)";
"traefik.http.routers.headscale.tls" = "true";
"traefik.http.routers.headscale.tls.certresolver" = "letsencrypt";
"traefik.http.services.headscale-external.loadbalancer.server.port" = "8080";
"traefik.http.routers.headscale-external.service" = "headscale-external";
"traefik.http.routers.headscale-external.rule" = "Host(`headscale.ghoscht.com`)";
"traefik.http.routers.headscale-external.entrypoints" = "websecure-external";
"traefik.http.routers.headscale-external.tls" = "true";
"traefik.http.routers.headscale-external.tls.certresolver" = "letsencrypt";
};
volumes = [
"/home/ghoscht/.docker/headscale/headscale_config:/etc/headscale"
"/home/ghoscht/.docker/headscale/headscale_data:/var/lib/headscale"
];
networks = [
"dmz"
];
};
headscale-ui.service = {
image = "ghcr.io/gurucomputing/headscale-ui:2024.02.24-beta1";
container_name = "headscale-ui";
restart = "always";
labels = {
"traefik.enable" = "true";
"traefik.http.routers.headscale-ui.entrypoints" = "websecure";
"traefik.http.routers.headscale-ui.rule" = "PathPrefix(`/web`)&&Host(`headscale.ghoscht.com`)";
"traefik.http.services.headscale-ui.loadbalancer.server.port" = "80";
"traefik.http.routers.headscale-ui.tls" = "true";
"traefik.http.routers.headscale-ui.tls.certresolver" = "letsencrypt";
};
networks = [
"dmz"
];
};
};
}

View file

@ -1,6 +0,0 @@
# Instead of pinning Nixpkgs, we can opt to use the one in NIX_PATH
import <nixpkgs> {
# We specify the architecture explicitly. Use a Linux remote builder when
# calling arion from other platforms.
system = "x86_64-linux";
}

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