Compare commits

121 Commits

Author SHA1 Message Date
bc405d562b Update flake.lock 2025-04-28 2025-07-13 00:30:45 +00:00
ceea87ad5b Update flake.lock 2025-04-27 2025-07-13 00:30:45 +00:00
851c8c797d Update flake.lock 2025-04-26 2025-07-13 00:30:45 +00:00
f542f84b38 Update flake.lock 2025-04-25 2025-07-13 00:30:45 +00:00
ed5b4cbd14 Update flake.lock 2025-04-24 2025-07-13 00:30:45 +00:00
761015b478 Update flake.lock 2025-04-23 2025-07-13 00:30:45 +00:00
20eaa0dae3 Update flake.lock 2025-04-22 2025-07-13 00:30:45 +00:00
f5dd2ecc82 Update flake.lock 2025-04-21 2025-07-13 00:30:45 +00:00
f9b71edc81 Update flake.lock 2025-04-20 2025-07-13 00:30:45 +00:00
7719c812bd Update flake.lock 2025-04-19 2025-07-13 00:30:45 +00:00
3c027501c5 Update flake.lock 2025-04-18 2025-07-13 00:30:45 +00:00
d65b916d40 Update flake.lock 2025-04-17 2025-07-13 00:30:45 +00:00
a1cde5ef34 Update flake.lock 2025-04-16 2025-07-13 00:30:45 +00:00
686906cf77 Update flake.lock 2025-04-15 2025-07-13 00:30:45 +00:00
37f986cefc Update flake.lock 2025-04-14 2025-07-13 00:30:45 +00:00
1dcef60e92 Update flake.lock 2025-04-13 2025-07-13 00:30:45 +00:00
5970fcabc8 Update flake.lock 2025-04-12 2025-07-13 00:30:45 +00:00
766d18ad52 Update flake.lock 2025-04-11 2025-07-13 00:30:45 +00:00
47c02828e3 Update flake.lock 2025-04-10 2025-07-13 00:30:45 +00:00
5fff601b29 Update flake.lock 2025-04-09 2025-07-13 00:30:45 +00:00
04236cf485 Update flake.lock 2025-04-08 2025-07-13 00:30:45 +00:00
fcf95d1430 Update flake.lock 2025-04-07 2025-07-13 00:30:45 +00:00
12798ff1a1 Update flake.lock 2025-04-06 2025-07-13 00:30:45 +00:00
01572c6f3d Update flake.lock 2025-04-05 2025-07-13 00:30:45 +00:00
cde1265492 Update flake.lock 2025-04-04 2025-07-13 00:30:45 +00:00
225743b432 Update flake.lock 2025-04-03 2025-07-13 00:30:45 +00:00
ac5a7b1954 Update flake.lock 2025-04-02 2025-07-13 00:30:45 +00:00
b1ba5f6dfc Update flake.lock 2025-04-01 2025-07-13 00:30:45 +00:00
c36161b19e Update flake.lock 2025-03-31 2025-07-13 00:30:45 +00:00
593cb43662 Update flake.lock 2025-03-30 2025-07-13 00:30:45 +00:00
a9045fe86a Update flake.lock 2025-03-29 2025-07-13 00:30:45 +00:00
b001afa40d Update flake.lock 2025-03-28 2025-07-13 00:30:45 +00:00
d54beba986 Update flake.lock 2025-03-27 2025-07-13 00:30:45 +00:00
784fdf8af1 Update flake.lock 2025-03-26 2025-07-13 00:30:45 +00:00
536120fadc Update flake.lock 2025-03-25 2025-07-13 00:30:45 +00:00
ac47c73bf1 Update flake.lock 2025-03-24 2025-07-13 00:30:45 +00:00
2d1109d012 Update flake.lock 2025-03-23 2025-07-13 00:30:45 +00:00
c543bc13ea hm: disable warn-dirty
Some checks failed
Update Nix Flake / update-flake (push) Failing after 16s
2025-07-12 15:52:17 +02:00
b4d1681b99 hyprland: fix waybar by running it with exec-once 2025-07-12 15:51:43 +02:00
6c32ffbe94 frajul-auto-upgrade: only run once a day
Some checks failed
Update Nix Flake / update-flake (push) Failing after 14s
2025-07-11 16:22:17 +02:00
6787243414 flake: update 2025-07-11 13:15:42 +02:00
d350807e8c builder: do enable auto-upgrades 2025-07-11 13:15:25 +02:00
f872c8db0c aspi: enable frajul auto upgrade module and integrate into waybar 2025-07-11 13:15:02 +02:00
8c53c66c4d Add frajul-auto-upgrade module 2025-07-11 13:14:48 +02:00
0f07029660 Add openconnect plugin to networkmanager
Some checks failed
Update Nix Flake / update-flake (push) Failing after 17s
2025-07-10 17:50:34 +02:00
8010d771a1 builder: add gitlab-runner
Some checks failed
Update Nix Flake / update-flake (push) Failing after 17s
2025-07-09 21:34:52 +02:00
7f4c41429e update flake
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2025-07-04 14:44:51 +02:00
6d21fe4262 format code 2025-07-04 14:44:31 +02:00
c081f95aaf open-messaging: adapt to new telegram program name 2025-07-04 14:44:01 +02:00
452a34c7e8 Neovim: add clangd 2025-07-04 14:43:51 +02:00
15c4616b91 Fix emacs not having TERMINAL env var 2025-07-04 14:43:45 +02:00
07274a0364 Update alacritty config, use as default 2025-07-04 14:41:58 +02:00
3bb8db1349 Fix builder using itself as remote subsituter 2025-07-04 14:40:58 +02:00
65a3dcdc08 Use ghostty as primary terminal
Some checks failed
Update Nix Flake / update-flake (push) Failing after 16s
2025-06-30 08:37:24 +02:00
9fe40bfd13 package rtklib 2025-05-26 21:51:07 +02:00
07943d4f95 format file
Some checks failed
Update Nix Flake / update-flake (push) Failing after 12s
2025-05-23 09:59:30 +02:00
815a79ff41 kardorf: fix seahorse and plasma6 config conflict 2025-05-23 09:58:59 +02:00
32ddceba8f kardorf: use i3 instead of hyprland 2025-05-23 09:58:38 +02:00
55ba4125d6 add latex packages to fix org mode exporting
Some checks failed
Update Nix Flake / update-flake (push) Failing after 11s
2025-05-21 23:01:09 +02:00
b9274f546f update flake 2025-05-21 23:01:03 +02:00
fd246d7daf Add hydra-auto-upgrade module, still wip
Some checks failed
Update Nix Flake / update-flake (push) Failing after 16s
2025-05-16 13:13:47 +02:00
edae0d2bb0 Delete i3 scripts also available in my nix pkgs 2025-05-16 12:56:22 +02:00
1cb23dd0a4 Add todo 2025-05-16 12:53:20 +02:00
ab1052193a rename deprecated options 2025-05-16 12:12:22 +02:00
6dadb2008c kardorf: enable ssh access 2025-05-16 12:11:45 +02:00
18f9cc3fa8 Add user julian to dialout for serial port access 2025-05-16 08:27:45 +02:00
9295ad7010 add kardorf ssh key to common secrets.yaml 2025-05-16 08:27:45 +02:00
e3cf2379ab yazi: update config to new version 2025-05-16 08:27:45 +02:00
f6c3f676b2 update flake 2025-05-16 08:27:45 +02:00
d57017382a v3ms: add /snap/bin to path
Some checks failed
Update Nix Flake / update-flake (push) Failing after 14s
2025-05-09 11:41:21 +02:00
1d7690eab4 Fix mako settings
Some checks failed
Update Nix Flake / update-flake (push) Failing after 14s
2025-05-06 07:50:35 +02:00
67d68a9946 Fix waybar not visible on second monitor after toggling mirroring twice
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2025-05-05 15:10:07 +02:00
9af362b5c8 hyprland: quick and dirty screen mirroring 2025-05-05 14:56:22 +02:00
a0ae09452f hyprland: install hyprpicker 2025-05-05 08:24:26 +02:00
711859e660 hyprland: fix cursor theme not applied 2025-05-05 08:24:09 +02:00
1c1e496425 use NH_FLAKE instead of FLAKE for nh 2025-05-05 07:11:28 +02:00
97229a521f Add discord to open-messaging 2025-05-05 07:11:02 +02:00
7d8190210b Mako: disable usage of deprecated config value
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2025-05-04 20:42:53 +02:00
a1dfeff98b topgrade: disable "update flake" step 2025-05-04 20:29:11 +02:00
9e512c2863 Update flake 2025-05-04 20:29:06 +02:00
136653b0fa Use hashed password for julian 2025-05-04 13:52:36 +02:00
75fb0f54ec Delete unused hyprland nixos config 2025-05-04 13:52:27 +02:00
a3282f3eb3 Configure kardorf host config 2025-05-04 13:52:13 +02:00
843dfb986d Fix type of monitor.workspaces 2025-05-04 13:51:54 +02:00
3eba0fe092 Make nvidia on kardorf work 2025-05-04 13:51:44 +02:00
fdc8b03d9b Add user wolfi 2025-05-04 13:51:22 +02:00
d86321cfe6 Add monitor configuration to aspi and kardorf homes 2025-05-04 13:51:00 +02:00
881c930fdb Fix wrong architectures used for v3ms and kardorf 2025-05-04 13:50:36 +02:00
dc3f9fe681 Add kardorf ssh key to sops 2025-05-04 13:50:23 +02:00
d73ff17327 Delete deprecated .dotter files 2025-05-04 13:49:24 +02:00
67468ba6fa Fix kardorf using aspi config 2025-05-01 22:09:02 +02:00
6d2a7f50df workflow: add git fetch before rebasing
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2025-04-30 13:15:25 +02:00
3cf8f19fcc Disable autostart for wireguard comu
Some checks failed
Update Nix Flake / update-flake (push) Failing after 14s
2025-04-29 21:44:54 +02:00
d335f6c892 builder: fix config
Some checks failed
Update Nix Flake / update-flake (push) Failing after 15s
2025-04-28 22:44:33 +02:00
8d94428f77 Fix lsp warnings for clean code 2025-04-28 22:27:16 +02:00
903776dca6 Clean up aspi and home hm config 2025-04-28 22:24:30 +02:00
b6dc568215 Rename desktop feature to gtk 2025-04-28 22:24:21 +02:00
130c341816 Remove wallpaper directory 2025-04-28 22:23:42 +02:00
8d0430ae52 Delete unused config file for shells 2025-04-28 22:19:00 +02:00
68da077c72 Format code with alejandra 2025-04-28 22:17:11 +02:00
7d17c52192 Clean up aspi and kardorf configs 2025-04-28 22:02:24 +02:00
c217e3297b hyprland: enable direct_scanout 2025-04-28 09:14:47 +02:00
c41a642593 hyprland: add smart gaps 2025-04-28 09:14:35 +02:00
d02f28ad89 waybar: do not show time left for battery 2025-04-26 19:02:20 +02:00
7d18d2bd50 Properly configure swaylock 2025-04-25 15:42:09 +02:00
68c37c0f42 hyprland dwindle: always split to same direction 2025-04-25 15:04:58 +02:00
20e2b5e20e Disable mimeapp managing by hm 2025-04-25 15:04:50 +02:00
08d3844778 Add wol-ocr script 2025-04-25 15:04:39 +02:00
34084e45aa hyprland: make splitting and resizing deterministic 2025-04-25 08:41:16 +02:00
7c1c51954e Remove unneeded commented line 2025-04-25 08:36:24 +02:00
659d235fc7 Tune hyprland animations and cursor 2025-04-25 08:36:15 +02:00
64958b068f Delete unnecessary nixos wayland config 2025-04-24 14:06:32 +02:00
95d9f9cf61 Add gamemode 2025-04-24 14:06:27 +02:00
6f57594884 Fix hyprland 2025-04-24 13:41:09 +02:00
b077da4998 Add pob2 package, not working yet 2025-04-24 08:06:06 +02:00
8aaf0b81c2 Do not install digikam 2025-04-24 08:05:46 +02:00
439b4d769e Fix fonts 2025-04-24 08:05:39 +02:00
66bde6646f Remove unneccesary comments 2025-04-23 22:56:22 +02:00
c323a747ea Fix deprecated config 2025-04-23 22:55:20 +02:00
d87cec971a Migrate left hosts and homes configurations 2025-04-23 22:53:43 +02:00
7db055ca27 Squash bugs and make aspi config work 2025-04-23 09:59:02 +02:00
164 changed files with 2912 additions and 1617 deletions

View File

@ -1,61 +0,0 @@
[helpers]
[default]
depends = []
[manjaro.files]
manjaro = "~"
[mc.files]
mc = "~/.config/mc"
[vim.files]
# type symbolic prevents interpreting '{{' as template
"vim/.vimrc" = { target = "~/.vimrc", type = "symbolic" }
[nvim.files]
"vim/init.vim" = { target = "~/.config/nvim/init.vim", type = "symbolic" }
[i3.files]
"i3/i3" = "~/.config/i3"
"i3/i3blocks" = { target = "~/.config/i3blocks", type = "symbolic" }
"i3/rofi" = "~/.config/rofi"
"i3/i3-scrot.conf" = "~/.config/i3-scrot.conf"
"i3/i3status-rust" = "~/.config/i3status-rust"
"i3/.profile" = "~/.profile"
[i3.variables]
monitor-primary = "not-specified"
monitor-secondary = "not-specified"
screenlayout-script = "echo screenlayout-script not specified"
bar-font-size = 15
tray-output = "tray_output primary"
[emacs.files]
"emacs/doom" = "~/.config/doom"
# "emacs/spacemacs/.spacemacs" = "~/.spacemacs"
# "emacs/chemacs/.emacs-profiles.el" = "~/.emacs-profiles.el"
[alacritty.files]
alacritty = "~/.config/alacritty"
[starship.files]
starship = "~/.config/"
[zsh.files]
"zsh/.zshrc" = "~/.zshrc"
"zsh/custom-plugins" = "~/.oh-my-zsh/custom"
[polybar.files]
polybar = "~/.config/polybar"
[leftwm.files]
leftwm = "~/.config/leftwm"
[xmonad.files]
xmonad = "~/.xmonad"
[nix.files]
"direnvrc" = "~/.config/direnv/direnvrc"
"nix/configuration.nix" = "/etc/nixos/configuration.nix"
"nix/flake.nix" = "/etc/nixos/flake.nix"

View File

@ -1,6 +0,0 @@
[i3.variables]
monitor-primary = "DVI-D-0"
monitor-secondary = "DVI-D-1"
screenlayout-script = "~/.screenlayout/2desktop-dvi.sh"
bar-font-size = 15
tray-output = "tray_output DVI-D-1"

View File

@ -1,4 +0,0 @@
[i3.variables]
monitor-primary = "HDMI-1"
monitor-secondary = "eDP-1"
screenlayout-script = "~/.screenlayout/laptop-at-home.sh"

View File

@ -1,5 +0,0 @@
[i3.variables]
monitor-primary = "HDMI-1"
monitor-secondary = "eDP-1"
tray-output = "tray_output eDP-1"
screenlayout-script = "$scripts/display-layoutpicker"

View File

@ -1,2 +0,0 @@
includes = [".dotter/kardorf.toml"]
packages = ["i3", "emacs", "alacritty", "zsh", "starship", "nix"]

View File

@ -1,2 +0,0 @@
includes = [".dotter/laptop.toml"]
packages = []

View File

@ -25,6 +25,7 @@ jobs:
- name: Rebase from master branch - name: Rebase from master branch
shell: bash shell: bash
run: | run: |
git fetch origin master
commits_ahead=$(git rev-list --count HEAD..origin/master) commits_ahead=$(git rev-list --count HEAD..origin/master)
echo "Commits ahead: $commits_ahead" echo "Commits ahead: $commits_ahead"
git log --oneline -5 git log --oneline -5

View File

@ -3,23 +3,25 @@ keys:
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4 - &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
- &pianonix-ssh age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct - &pianonix-ssh age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja - &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
- &kardorf-ssh age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
creation_rules: creation_rules:
- path_regex: secrets/secrets.yaml$ - path_regex: hosts/common/secrets.yaml$
key_groups: key_groups:
- age: - age:
- *primary - *primary
- *aspi-ssh - *aspi-ssh
- *pianonix-ssh - *pianonix-ssh
- *kardorf-ssh
- path_regex: secrets/secrets-builder.yaml$ - path_regex: hosts/builder/secrets.yaml$
key_groups: key_groups:
- age: - age:
- *primary - *primary
- *builder-ssh - *builder-ssh
- path_regex: secrets/.+ - path_regex: hosts/pianonix/secrets.yaml$
key_groups: key_groups:
- age: - age:
- *primary - *primary
- *aspi-ssh
- *pianonix-ssh - *pianonix-ssh

893
flake.lock generated

File diff suppressed because it is too large Load Diff

216
flake.nix
View File

@ -28,10 +28,6 @@
}; };
# Various flakes # Various flakes
alacritty-theme = {
url = "github:alacritty/alacritty-theme";
flake = false;
};
yazi-flavors = { yazi-flavors = {
url = "github:yazi-rs/flavors"; url = "github:yazi-rs/flavors";
flake = false; flake = false;
@ -56,116 +52,136 @@
}; };
}; };
outputs = outputs = {
{ self,
self, nixpkgs,
nixpkgs, home-manager,
home-manager, systems,
systems, ...
... } @ inputs: let
}@inputs: inherit (self) outputs;
let lib = nixpkgs.lib // home-manager.lib;
inherit (self) outputs; forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system});
lib = nixpkgs.lib // home-manager.lib; pkgsFor = lib.genAttrs (import systems) (
forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system}); system:
pkgsFor = lib.genAttrs (import systems) (
system:
import nixpkgs { import nixpkgs {
inherit system; inherit system;
config.allowUnfree = true; config.allowUnfree = true;
config.permittedInsecurePackages = [
"olm-3.2.16"
];
warn-dirty = false;
} }
); );
in in {
{ inherit lib;
inherit lib;
nixosModules = import ./modules/nixos; nixosModules = import ./modules/nixos;
homeManagerModules = import ./modules/home-manager; homeManagerModules = import ./modules/home-manager;
overlays = import ./overlays { inherit inputs outputs; }; overlays = import ./overlays {inherit inputs outputs;};
# hydraJobs = import ./hydra.nix { inherit inputs outputs; }; # TODO add hydra jobs here? # hydraJobs = import ./hydra.nix { inherit inputs outputs; }; # TODO add hydra jobs here?
packages = forEachSystem (pkgs: import ./pkgs { inherit pkgs; }); packages = forEachSystem (pkgs: import ./pkgs {inherit pkgs;});
devShells = forEachSystem (pkgs: import ./shell.nix { inherit pkgs; }); devShells = forEachSystem (pkgs: import ./shell.nix {inherit pkgs;});
formatter = forEachSystem (pkgs: pkgs.alejandra); formatter = forEachSystem (pkgs: pkgs.alejandra);
nixosConfigurations = { nixosConfigurations = {
# Main laptop # Main laptop
aspi = lib.nixosSystem { aspi = lib.nixosSystem {
modules = [ ./hosts/aspi ]; modules = [./hosts/aspi];
specialArgs = { specialArgs = {
inherit inputs outputs; inherit inputs outputs;
};
};
# Piano raspberry pi
pianonix = lib.nixosSystem {
modules = [ ./hosts/pianonix ];
specialArgs = {
inherit inputs outputs;
};
}; };
}; };
# Piano raspberry pi
# Standalone HM pianonix = lib.nixosSystem {
homeConfigurations = { modules = [./hosts/pianonix];
# Main laptop specialArgs = {
"julian@aspi" = lib.homeManagerConfiguration { inherit inputs outputs;
modules = [
./home/julian/aspi.nix
./home/julian/nixpkgs.nix
];
pkgs = pkgsFor.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
};
# Media server (RPi)
"julian@pianonix" = lib.homeManagerConfiguration {
modules = [
./home/julian/pianonix.nix
./home/julian/nixpkgs.nix
];
pkgs = pkgsFor.aarch64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
}; };
}; };
kardorf = lib.nixosSystem {
# Add overlays for the `nixpkgs` channel. modules = [./hosts/kardorf];
# overlays = with inputs; [ specialArgs = {
# nix-matlab.overlay inherit inputs outputs;
# ];
# systems.modules.nixos = with inputs; [
# sops-nix.nixosModules.sops
# disko.nixosModules.disko
# TODO: add sops and disko modules somewhere
# ];
# systems.hosts.pianonix.modules = with inputs; [ nixos-hardware.nixosModules.raspberry-pi-4 ];
# TODO: add rpi4 hardware modules
# deploy-rs node configuration
deploy.nodes = {
pianonix = {
hostname = "pianonix.local";
profiles.system = {
sshUser = "root";
user = "root";
path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.pianonix;
confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services
};
}; };
};
builder = { builder = lib.nixosSystem {
hostname = "builder.julian-mutter.de"; modules = [./hosts/builder];
profiles.system = { specialArgs = {
sshUser = "root"; inherit inputs outputs;
user = "root";
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.builder;
remoteBuild = true;
};
}; };
}; };
}; };
# Standalone HM
homeConfigurations = {
# Main laptop
"julian@aspi" = lib.homeManagerConfiguration {
modules = [
./homes/julian/aspi.nix
./homes/julian/hm-standalone-config.nix
];
pkgs = pkgsFor.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
};
# Media server (RPi)
"julian@pianonix" = lib.homeManagerConfiguration {
modules = [
./homes/julian/pianonix.nix
./homes/julian/hm-standalone-config.nix
];
pkgs = pkgsFor.aarch64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
};
"julian@kardorf" = lib.homeManagerConfiguration {
modules = [
./homes/julian/kardorf.nix
./homes/julian/hm-standalone-config.nix
];
pkgs = pkgsFor.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
};
"julian@v3ms" = lib.homeManagerConfiguration {
modules = [
./homes/julian/v3ms
./homes/julian/hm-standalone-config.nix
];
pkgs = pkgsFor.x86_64-linux;
extraSpecialArgs = {
inherit inputs outputs;
};
};
};
# deploy-rs node configuration
deploy.nodes = {
pianonix = {
hostname = "pianonix.local";
profiles.system = {
sshUser = "root";
user = "root";
path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.pianonix;
confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services
};
};
builder = {
hostname = "builder.julian-mutter.de";
profiles.system = {
sshUser = "root";
user = "root";
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.builder;
remoteBuild = true;
};
};
};
};
} }

View File

@ -1,29 +1,56 @@
{
config,
...
}:
{ {
imports = [ imports = [
./global ./global
./features/fish ./features/fish
./features/direnv ./features/direnv
./features/topgrade ./features/topgrade
./features/neovim ./features/neovim
./features/kitty ./features/ghostty
./features/wezterm ./features/wezterm
./features/alacritty ./features/alacritty
./features/yazi ./features/yazi
./features/emacs ./features/emacs
./features/i3
./features/nix-helper ./features/hyprland
./features/desktop
./features/suites/cli ./features/suites/cli
./features/suites/desktop ./features/suites/desktop
./features/suites/development ./features/suites/development
]; ];
config.terminal = "kitty"; # TODO: only terminal = ??? hostName = "aspi";
is-nixos = true;
terminal = "alacritty";
# ------- ----------
# | eDP-1 | | HDMI-A-1 |
# ------- ----------
monitors = [
{
name = "HDMI-A-1";
# width = 1680;
# height = 1050;
workspaces = [
"1"
"2"
"3"
"4"
"5"
];
primary = true;
}
{
name = "eDP-1";
# width = 1680;
# height = 1050;
workspaces = [
"6"
"7"
"8"
"9"
"10"
];
}
];
} }

View File

@ -1,3 +0,0 @@
import = [
"~/.config/alacritty/theme/themes/smoooooth.toml"
]

View File

@ -1,17 +1,12 @@
{ {
lib, lib,
pkgs,
inputs,
config, config,
... ...
}: }: {
programs.alacritty = {
{ enable = true;
home.packages = with pkgs; [ alacritty ]; settings = {};
theme = "smoooooth";
home.file = {
".config/alacritty/theme".source = "${inputs.alacritty-theme}";
".config/alacritty/alacritty.toml".source = ./alacritty.toml;
}; };
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "alacritty") "alacritty"; home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "alacritty") "alacritty";

View File

@ -1,30 +0,0 @@
{
config,
lib,
pkgs,
inputs,
...
}:
let
inherit (inputs.nix-colors.lib-contrib { inherit pkgs; }) gtkThemeFromScheme;
cfg = config.modules.desktop;
in
{
# Do not make conditional, just toggle things on and off
imports = [ inputs.nix-colors.homeManagerModules.default ]; # TODO: what does this do
config = lib.mkIf cfg.enable {
# home.sessionVariables.GTK_THEME = "Catppuccin-Mocha-Compact-Blue-dark";
gtk = {
enable = true;
theme = {
name = inputs.nix-colors.colorschemes.${config.colorscheme}.slug;
package = gtkThemeFromScheme { scheme = inputs.nix-colors.colorschemes.${config.colorscheme}; };
};
iconTheme = {
name = "Papirus-Dark";
package = pkgs.papirus-icon-theme;
};
};
};
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 759 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1024 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 607 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 719 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 464 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 831 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 861 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 299 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 595 KiB

View File

@ -4,24 +4,19 @@
config, config,
... ...
}: }:
with lib; let
with lib;
let
doomRepoUrl = "https://github.com/doomemacs/doomemacs"; doomRepoUrl = "https://github.com/doomemacs/doomemacs";
configRepoUrl = "https://gitlab.julian-mutter.de/julian/emacs-config"; configRepoUrl = "https://gitlab.julian-mutter.de/julian/emacs-config";
in in {
{ home.sessionPath = ["/home/julian/.config/emacs/bin"];
home.sessionPath = [ "/home/julian/.config/emacs/bin" ];
home.packages = home.packages = with pkgs;
with pkgs;
[ [
binutils # native-comp needs 'as', provided by this binutils # native-comp needs 'as', provided by this
## Doom dependencies ## Doom dependencies
git git
(ripgrep.override { withPCRE2 = true; }) (ripgrep.override {withPCRE2 = true;})
## Optional dependencies ## Optional dependencies
fd # faster projectile indexing fd # faster projectile indexing
@ -30,12 +25,13 @@ in
## Module dependencies ## Module dependencies
(aspellWithDicts ( (aspellWithDicts (
ds: with ds; [ ds:
en with ds; [
en-computers en
en-science en-computers
de en-science
] de
]
)) ))
hunspell hunspell
@ -46,6 +42,8 @@ in
# Code formatters for use with doom emacs # Code formatters for use with doom emacs
nixfmt-rfc-style # nix nixfmt-rfc-style # nix
alejandra # nix
nixd # nix lsp nixd # nix lsp
dockfmt # docker dockfmt # docker
google-java-format # java google-java-format # java
@ -62,9 +60,9 @@ in
emacs-all-the-icons-fonts emacs-all-the-icons-fonts
] ]
++ lib.optional config.modules.non-nixos.is-nixos emacs; ++ lib.optional config.is-nixos emacs;
home.activation.installDoomEmacs = lib.home-manager.hm.dag.entryAfter [ "writeBoundary" ] '' home.activation.installDoomEmacs = lib.hm.dag.entryAfter ["writeBoundary"] ''
if [ ! -d "/home/julian/.config/emacs" ]; then if [ ! -d "/home/julian/.config/emacs" ]; then
$DRY_RUN_CMD ${pkgs.git}/bin/git clone --depth=1 --single-branch "${doomRepoUrl}" "/home/julian/.config/emacs" $DRY_RUN_CMD ${pkgs.git}/bin/git clone --depth=1 --single-branch "${doomRepoUrl}" "/home/julian/.config/emacs"
fi fi

View File

@ -3,10 +3,7 @@
pkgs, pkgs,
... ...
}: }:
with lib; {
with lib;
{
home.file = { home.file = {
".config/starship.toml".source = ./starship.toml; ".config/starship.toml".source = ./starship.toml;
".config/fish/conf.d/last-working-dir.fish".source = ./last-working-dir.fish; ".config/fish/conf.d/last-working-dir.fish".source = ./last-working-dir.fish;

View File

@ -4,13 +4,10 @@
config, config,
... ...
}: }:
with lib; {
with lib;
{
fonts.fontconfig.enable = true; # required to autoload fonts from packages fonts.fontconfig.enable = true; # required to autoload fonts from packages
home.packages = with pkgs; [ home.packages = with pkgs; [
(nerdfonts.override { fonts = [ "FiraCode" ]; }) nerd-fonts.fira-code
font-awesome font-awesome
dejavu_fonts dejavu_fonts
noto-fonts noto-fonts

View File

@ -1,8 +1,13 @@
{ {
services.gammastep = { services.gammastep = {
enable = true; enable = true;
latitude = 47.92; provider = "geoclue2";
longitude = 10.12; temperature = {
provider = "manual"; day = 6000;
night = 4600;
};
settings = {
general.adjustment-method = "wayland";
};
}; };
} }

View File

@ -0,0 +1,16 @@
{
lib,
config,
...
}: {
programs.ghostty = {
enable = true;
enableFishIntegration = true;
settings = {
theme = "catppuccin-mocha";
font-size = 12;
};
};
home.sessionVariables.TERMINAL = lib.mkIf (config.terminal == "ghostty") "ghostty";
}

View File

@ -0,0 +1,33 @@
{
config,
pkgs,
inputs,
...
}: let
inherit (inputs.nix-colors.lib-contrib {inherit pkgs;}) gtkThemeFromScheme;
in {
# Do not make conditional, just toggle things on and off
imports = [inputs.nix-colors.homeManagerModules.default]; # TODO: what does this do
# home.sessionVariables.GTK_THEME = "Catppuccin-Mocha-Compact-Blue-dark";
gtk = {
enable = true;
theme = {
name = inputs.nix-colors.colorschemes.${config.colorscheme.name}.slug;
package = gtkThemeFromScheme {
scheme = inputs.nix-colors.colorschemes.${config.colorscheme.name};
};
};
iconTheme = {
name = "Papirus-Dark";
package = pkgs.papirus-icon-theme;
};
cursorTheme = {
package = pkgs.apple-cursor;
name = "macOS";
size = 24;
};
};
xdg.portal.extraPortals = [pkgs.xdg-desktop-portal-gtk];
}

View File

@ -2,33 +2,79 @@
pkgs, pkgs,
inputs, inputs,
config, config,
lib,
... ...
}: }: let
inherit
let (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme})
palette palette
; ;
in in {
{
imports = [ imports = [
inputs.hyprland.homeManagerModules.default # inputs.hyprland.homeManagerModules.default
./waybar ./waybar
./wofi ./wofi
./mako ./mako
./hyprlock # ./hyprlock
./wlogout ./wlogout
../gammastep
./swayidle.nix
./swaylock.nix
./zathura.nix
./waypipe.nix
./hyprbars.nix
]; ];
xdg.portal = {
extraPortals = [pkgs.xdg-desktop-portal-wlr];
config.hyprland = {
default = [
"wlr"
"gtk"
];
};
};
programs.imv.enable = true; # TODO: what is that
home.packages = with pkgs; [ home.packages = with pkgs; [
# hyprpicker # TODO hyprpicker
# hyprcursor # TODO
brightnessctl brightnessctl
# grimblast
frajul.hyprshot-gui frajul.hyprshot-gui
frajul.wl-ocr
wf-recorder
wl-clipboard
(pkgs.writeShellScriptBin "toggle-screen-mirroring" (
builtins.readFile ./toggle-screen-mirroring.sh
))
(pkgs.writeShellScriptBin "correct-workspace-locations" (
lib.concatStringsSep "\n" (
builtins.concatLists (
map (
monitor:
map (ws: "hyprctl dispatch moveworkspacetomonitor ${ws} ${monitor.name}") monitor.workspaces
)
config.monitors
)
)
))
]; ];
services.cliphist = {
enable = true;
};
home.sessionVariables = {
MOZ_ENABLE_WAYLAND = 1;
QT_QPA_PLATFORM = "wayland";
LIBSEAT_BACKEND = "logind";
};
# services.hypridle = { # services.hypridle = {
# enable = true; # enable = true;
# settings = { # settings = {
@ -66,7 +112,29 @@ in
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
# Whether to enable Hyprland wayland compositor # Whether to enable Hyprland wayland compositor
enable = true; enable = true;
package = inputs.hyprland.packages."${pkgs.system}".hyprland; # does only work with nixos-unstable # package = config.lib.nixGL.wrap (
# pkgs.hyprland.override {
# # nixgl needed?
# wrapRuntimeDeps = false;
# }
# );
systemd = {
enable = true;
# Same as default, but stop graphical-session too
extraCommands = lib.mkBefore [
"systemctl --user stop graphical-session.target"
"systemctl --user start hyprland-session.target"
];
variables = [
"DISPLAY"
"HYPRLAND_INSTANCE_SIGNATURE"
"WAYLAND_DISPLAY"
"XDG_CURRENT_DESKTOP"
];
};
# package = inputs.hyprland.packages."${pkgs.system}".hyprland; # does only work with nixos-unstable
# The hyprland package to use (simplifies use of plugins) # The hyprland package to use (simplifies use of plugins)
# package = inputs.hyprland.packages.${pkgs.system}.hyprland; # package = inputs.hyprland.packages.${pkgs.system}.hyprland;
@ -75,23 +143,29 @@ in
# Optional # Optional
# Whether to enable hyprland-session.target on hyprland startup # Whether to enable hyprland-session.target on hyprland startup
systemd.enable = true; # systemd.enable = true;
# Make PATH available to systemd services # Make PATH available to systemd services
systemd.variables = [ "--all" ]; # systemd.variables = [ "--all" ];
plugins = [ plugins = [
inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars # does only work with nixos-unstable # inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars # does only work with nixos-unstable
# hyprlandPlugins.hyprbars # hyprlandPlugins.hyprbars
]; ];
settings = { settings = {
"$mod" = "SUPER"; "$mod" = "SUPER";
# Environment variables programs like emacs have access to
env = "TERMINAL,${config.terminal}";
# Monitors # Monitors
monitor = ",preferred,auto,auto"; monitor = ",preferred,auto,1";
# Autostart # Autostart
exec-once = [ "firefox" ]; exec-once = [
(lib.getExe pkgs.firefox)
(lib.getExe pkgs.waybar)
];
# Look and Feel # Look and Feel
general = { general = {
@ -100,42 +174,65 @@ in
layout = "dwindle"; layout = "dwindle";
"col.active_border" = "0xff${palette.base0C} 0xff${palette.base0D} 270deg"; # "col.active_border" = "0xff${palette.base0C} 0xff${palette.base0D} 270deg";
"col.inactive_border" = "0xff${palette.base00}"; # "col.inactive_border" = "0xff${palette.base00}";
}; };
decoration = { decoration = {
# power saving # power saving
blur.enabled = false; blur.enabled = false;
# power saving # power saving
drop_shadow = false; shadow.enabled = false;
}; };
# Dwindle layout # Dwindle layout
dwindle = { dwindle = {
pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true; # You probably want this preserve_split = true; # You probably want this
no_gaps_when_only = 2; # with border smart_split = false;
smart_resizing = false;
force_split = 2;
# no_gaps_when_only = 2; # with border
}; };
# Master layout # Master layout
master = { master = {
new_status = "slave"; new_status = "slave";
no_gaps_when_only = 2; # with border # no_gaps_when_only = 2; # with border
mfact = 0.5; # Do not make master bigger mfact = 0.5; # Do not make master bigger
}; };
animations = {
enabled = true;
animation = [
"windows,1,3,default,slide"
"fade,1,3,default"
"layers,1,3,default,slide"
"border,1,3,default"
"workspaces,1,3,default,slide"
];
};
exec = [
"hyprctl setcursor ${config.gtk.cursorTheme.name} ${toString config.gtk.cursorTheme.size}"
"correct-workspace-locations"
];
misc = { misc = {
# disable auto polling for config file changes # disable auto polling for config file changes
disable_autoreload = true; disable_autoreload = true;
force_default_wallpaper = 0; force_default_wallpaper = 0;
# we do, in fact, want direct scanout
# no_direct_scanout = false;
vfr = true; # power saving vfr = true; # power saving
}; };
render = {
# we do, in fact, want direct scanout
direct_scanout = true;
};
# Input # Input
input = { input = {
kb_layout = "de"; kb_layout = "de";
@ -155,18 +252,17 @@ in
]; ];
# Workspace rules # Workspace rules
workspace = [ workspace =
"1, monitor:HDMI-A-1" [
"2, monitor:HDMI-A-1" # smart gaps (none when only one window in workspace)
"3, monitor:HDMI-A-1" "w[t1], gapsin:0, gapsout:0, border:1"
"4, monitor:HDMI-A-1" "w[tg1], gapsin:0, gapsout:0, border:1"
"5, monitor:HDMI-A-1" "f[1], gapsin:0, gapsout:0, border:1"
"6, monitor:eDP-1" ]
"7, monitor:eDP-1" # builds like "1, e-DP1" "2, HDMI-1" etc.
"8, monitor:eDP-1" ++ builtins.concatLists (
"9, monitor:eDP-1" map (monitor: map (ws: "${ws}, monitor:${monitor.name}") monitor.workspaces) config.monitors
"10, monitor:eDP-1" );
];
# Mouse binds # Mouse binds
bindm = [ bindm = [
@ -175,115 +271,138 @@ in
]; ];
# binds # binds
bind = [ bind =
# compositor commands [
"$mod, Space, focuswindow, floating" # compositor commands
"$mod SHIFT, Space, togglefloating," "$mod, Space, focuswindow, floating"
"$mod, F, fullscreen," "$mod SHIFT, Space, togglefloating,"
"$mod, X, killactive," "$mod, F, fullscreen,"
"$mod, X, killactive,"
"$mod, O, togglesplit," # dwindle "$mod, O, togglesplit," # dwindle
# opening applications # opening applications
"$mod, D, exec, wofi --show drun,run" "$mod, D, exec, wofi --show drun,run"
"$mod, E, exec, pcmanfm" "$mod, E, exec, pcmanfm"
"$mod, Return, exec, kitty" "$mod, Return, exec, ${config.terminal}"
"$mod, B, exec, firefox" "$mod, B, exec, firefox"
"$mod, C, exec, qalculate-gtk" "$mod, C, exec, qalculate-gtk"
# other commands # other commands
"$mod SHIFT, E, exec, wlogout -p layer-shell" "$mod SHIFT, E, exec, wlogout -p layer-shell"
"$mod, Escape, exec, wlogout -p layer-shell" "$mod, Escape, exec, wlogout -p layer-shell"
"$mod, TAB, exec, hyprlock" "$mod SHIFT, R, exec, hyprctl reload"
"$mod SHIFT, R, exec, hyprctl reload" "$mod, Print, exec, hyprshot-gui"
", Print, exec, hyprshot-gui" ", Print, exec, hyprshot-gui"
"$mod, P, exec, toggle-screen-mirroring; correct-workspace-locations"
# "$mod SHIFT, E, exec, pkill Hyprland" # "$mod SHIFT, E, exec, pkill Hyprland"
# "$mod, G, togglegroup," # "$mod, G, togglegroup,"
# "$mod SHIFT, N, changegroupactive, f" # "$mod SHIFT, N, changegroupactive, f"
# "$mod SHIFT, P, changegroupactive, b" # "$mod SHIFT, P, changegroupactive, b"
# "$mod ALT, ,resizeactive," # "$mod ALT, ,resizeactive,"
# media keys # media keys
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+" ", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
", XF86AudioPlay, exec, playerctl play-pause" ", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPause, exec, playerctl pause" ", XF86AudioPause, exec, playerctl pause"
", XF86AudioStop, exec, playerctl stop" ", XF86AudioStop, exec, playerctl stop"
", XF86AudioNext, exec, playerctl next" ", XF86AudioNext, exec, playerctl next"
", XF86AudioPrev, exec, playerctl previous" ", XF86AudioPrev, exec, playerctl previous"
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", XF86MonBrightnessUp, exec, brightnessctl --class backlight set 5%+" ", XF86MonBrightnessUp, exec, brightnessctl --class backlight set 5%+"
", XF86MonBrightnessDown, exec, brightnessctl --class backlight set 5%-" ", XF86MonBrightnessDown, exec, brightnessctl --class backlight set 5%-"
# move focus # move focus
"$mod, left, movefocus, l" "$mod, left, movefocus, l"
"$mod, H, movefocus, l" "$mod, H, movefocus, l"
"$mod, right, movefocus, r" "$mod, right, movefocus, r"
"$mod, L, movefocus, r" "$mod, L, movefocus, r"
"$mod, up, movefocus, u" "$mod, up, movefocus, u"
"$mod, K, movefocus, u" "$mod, K, movefocus, u"
"$mod, down, movefocus, d" "$mod, down, movefocus, d"
"$mod, J, movefocus, d" "$mod, J, movefocus, d"
# move window # move window
"$mod SHIFT, left, movewindow, l" "$mod SHIFT, left, movewindow, l"
"$mod SHIFT, H, movewindow, l" "$mod SHIFT, H, movewindow, l"
"$mod SHIFT, right, movewindow, r" "$mod SHIFT, right, movewindow, r"
"$mod SHIFT, L, movewindow, r" "$mod SHIFT, L, movewindow, r"
"$mod SHIFT, up, movewindow, u" "$mod SHIFT, up, movewindow, u"
"$mod SHIFT, K, movewindow, u" "$mod SHIFT, K, movewindow, u"
"$mod SHIFT, down, movewindow, d" "$mod SHIFT, down, movewindow, d"
"$mod SHIFT, J, movewindow, d" "$mod SHIFT, J, movewindow, d"
# Switch workspaces with mainMod + [0-9] # Switch workspaces with mainMod + [0-9]
"$mod, 1, workspace, 1" "$mod, 1, workspace, 1"
"$mod, 2, workspace, 2" "$mod, 2, workspace, 2"
"$mod, 3, workspace, 3" "$mod, 3, workspace, 3"
"$mod, 4, workspace, 4" "$mod, 4, workspace, 4"
"$mod, 5, workspace, 5" "$mod, 5, workspace, 5"
"$mod, 6, workspace, 6" "$mod, 6, workspace, 6"
"$mod, 7, workspace, 7" "$mod, 7, workspace, 7"
"$mod, 8, workspace, 8" "$mod, 8, workspace, 8"
"$mod, 9, workspace, 9" "$mod, 9, workspace, 9"
"$mod, 0, workspace, 10" "$mod, 0, workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9] # Move active window to a workspace with mainMod + SHIFT + [0-9]
"$mod SHIFT, 1, movetoworkspace, 1" "$mod SHIFT, 1, movetoworkspace, 1"
"$mod SHIFT, 2, movetoworkspace, 2" "$mod SHIFT, 2, movetoworkspace, 2"
"$mod SHIFT, 3, movetoworkspace, 3" "$mod SHIFT, 3, movetoworkspace, 3"
"$mod SHIFT, 4, movetoworkspace, 4" "$mod SHIFT, 4, movetoworkspace, 4"
"$mod SHIFT, 5, movetoworkspace, 5" "$mod SHIFT, 5, movetoworkspace, 5"
"$mod SHIFT, 6, movetoworkspace, 6" "$mod SHIFT, 6, movetoworkspace, 6"
"$mod SHIFT, 7, movetoworkspace, 7" "$mod SHIFT, 7, movetoworkspace, 7"
"$mod SHIFT, 8, movetoworkspace, 8" "$mod SHIFT, 8, movetoworkspace, 8"
"$mod SHIFT, 9, movetoworkspace, 9" "$mod SHIFT, 9, movetoworkspace, 9"
"$mod SHIFT, 0, movetoworkspace, 10" "$mod SHIFT, 0, movetoworkspace, 10"
# Move active window to a workspace without following with mainMod + CTRL + [0-9] # Move active window to a workspace without following with mainMod + CTRL + [0-9]
"$mod CTRL, 1, movetoworkspacesilent, 1" "$mod CTRL, 1, movetoworkspacesilent, 1"
"$mod CTRL, 2, movetoworkspacesilent, 2" "$mod CTRL, 2, movetoworkspacesilent, 2"
"$mod CTRL, 3, movetoworkspacesilent, 3" "$mod CTRL, 3, movetoworkspacesilent, 3"
"$mod CTRL, 4, movetoworkspacesilent, 4" "$mod CTRL, 4, movetoworkspacesilent, 4"
"$mod CTRL, 5, movetoworkspacesilent, 5" "$mod CTRL, 5, movetoworkspacesilent, 5"
"$mod CTRL, 6, movetoworkspacesilent, 6" "$mod CTRL, 6, movetoworkspacesilent, 6"
"$mod CTRL, 7, movetoworkspacesilent, 7" "$mod CTRL, 7, movetoworkspacesilent, 7"
"$mod CTRL, 8, movetoworkspacesilent, 8" "$mod CTRL, 8, movetoworkspacesilent, 8"
"$mod CTRL, 9, movetoworkspacesilent, 9" "$mod CTRL, 9, movetoworkspacesilent, 9"
"$mod CTRL, 0, movetoworkspacesilent, 10" "$mod CTRL, 0, movetoworkspacesilent, 10"
]; ]
++
# Screen lock
(
let
swaylock = lib.getExe config.programs.swaylock.package;
in
lib.optionals config.programs.swaylock.enable [
"$mod,TAB,exec,${swaylock} --daemonize"
]
)
++
# Notification manager
(
let
makoctl = lib.getExe' config.services.mako.package "makoctl";
in
lib.optionals config.services.mako.enable [
"$mod,w,exec,${makoctl} dismiss"
"$mod SHIFT,W,exec,${makoctl} restore"
]
);
plugin = { # plugin = {
hyprbars = { # hyprbars = {
bar_text_size = 10; # bar_text_size = 10;
bar_height = 16; # bar_height = 16;
bar_text_font = "Ubuntu Nerd Font"; # bar_text_font = "Ubuntu Nerd Font";
bar_precedence_over_border = true; # bar_precedence_over_border = true;
bar_color = "rgb(${palette.base01})"; # bar_color = "rgb(${palette.base01})";
hyprbars-button = [ "rgb(${palette.base03}), 14, 󰖭, hyprctl dispatch killactive" ]; # hyprbars-button = [ "rgb(${palette.base03}), 14, 󰖭, hyprctl dispatch killactive" ];
}; # };
}; # };
}; };
}; };
} }

View File

@ -0,0 +1,76 @@
{
config,
pkgs,
lib,
outputs,
...
}: let
getHostname = x: lib.last (lib.splitString "@" x);
# remoteColorschemes = lib.mapAttrs' (n: v: {
# name = getHostname n;
# value = v.config.colorscheme.rawColorscheme.colors.${config.colorscheme.mode};
# }) outputs.homeConfigurations;
rgb = color: "rgb(${lib.removePrefix "#" color})";
rgba = color: alpha: "rgba(${lib.removePrefix "#" color}${alpha})";
hyprbars =
(pkgs.hyprlandPlugins.hyprbars.override {
# Make sure it's using the same hyprland package as we are
hyprland = config.wayland.windowManager.hyprland.package;
}).overrideAttrs
(old: {
# Yeet the initialization notification (I hate it)
postPatch =
(old.postPatch or "")
+ ''
${lib.getExe pkgs.gnused} -i '/Initialized successfully/d' main.cpp
'';
});
in {
wayland.windowManager.hyprland = {
plugins = [hyprbars];
settings = {
"plugin:hyprbars" = {
bar_height = 25;
# bar_color = rgba config.colorscheme.colors.surface "dd";
# "col.text" = rgb config.colorscheme.colors.primary;
# bar_text_font = config.fontProfiles.regular.name;
# bar_text_size = config.fontProfiles.regular.size;
bar_part_of_window = true;
bar_precedence_over_border = true;
hyprbars-button = let
closeAction = "hyprctl dispatch killactive";
isOnSpecial = ''hyprctl activewindow -j | jq -re 'select(.workspace.name == "special")' >/dev/null'';
moveToSpecial = "hyprctl dispatch movetoworkspacesilent special";
moveToActive = "hyprctl dispatch movetoworkspacesilent name:$(hyprctl -j activeworkspace | jq -re '.name')";
minimizeAction = "${isOnSpecial} && ${moveToActive} || ${moveToSpecial}";
maximizeAction = "hyprctl dispatch fullscreen 1";
in [
# Red close button
# "${rgb config.colorscheme.colors.red},12,,${closeAction}"
# # Yellow "minimize" (send to special workspace) button
# "${rgb config.colorscheme.colors.yellow},12,,${minimizeAction}"
# # Green "maximize" (fullscreen) button
# "${rgb config.colorscheme.colors.green},12,,${maximizeAction}"
];
};
# windowrulev2 =
# [
# "plugin:hyprbars:bar_color ${rgba config.colorscheme.colors.primary "ee"}, focus:1"
# "plugin:hyprbars:title_color ${rgb config.colorscheme.colors.on_primary}, focus:1"
# ]
# ++ (lib.flatten (
# lib.mapAttrsToList (name: colors: [
# "plugin:hyprbars:bar_color ${rgba colors.primary_container "dd"}, title:\\[${name}\\].*"
# "plugin:hyprbars:title_color ${rgb colors.on_primary_container}, title:\\[${name}\\].*"
# "plugin:hyprbars:bar_color ${rgba colors.primary "ee"}, title:\\[${name}\\].*, focus:1"
# "plugin:hyprbars:title_color ${rgb colors.on_primary}, title:\\[${name}\\].*, focus:1"
# ]) remoteColorschemes
# ));
};
};
}

View File

@ -5,13 +5,12 @@
pkgs, pkgs,
inputs, inputs,
... ...
}: }: let
let inherit
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.modules.desktop.colorscheme}) (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette palette
; ;
in in {
{
programs.hyprlock.enable = true; programs.hyprlock.enable = true;
programs.hyprlock.settings = { programs.hyprlock.settings = {
general = { general = {

View File

@ -5,25 +5,26 @@
pkgs, pkgs,
inputs, inputs,
... ...
}: }: let
let inherit
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.modules.desktop.colorscheme}) (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette palette
; ;
in in {
{ home.packages = with pkgs; [libnotify];
home.packages = with pkgs; [ libnotify ];
services.mako = { services.mako = {
enable = true; enable = true;
defaultTimeout = 5000; # milliseconds, can be overwritten by notification sender settings = {
backgroundColor = "#${palette.base00}"; defaultTimeout = "5000"; # milliseconds, can be overwritten by notification sender
textColor = "#${palette.base05}"; backgroundColor = "#${palette.base00}";
borderColor = "#${palette.base0D}"; textColor = "#${palette.base05}";
progressColor = "over #${palette.base02}"; borderColor = "#${palette.base0D}";
extraConfig = '' progressColor = "over #${palette.base02}";
[urgency=high] extraConfig = ''
border-color=#${palette.base09} [urgency=high]
''; border-color=#${palette.base09}
# '';
};
}; };
} }

View File

@ -0,0 +1,58 @@
{
pkgs,
lib,
config,
...
}: let
swaylock = "${config.programs.swaylock.package}/bin/swaylock";
pgrep = "${pkgs.procps}/bin/pgrep";
pactl = "${pkgs.pulseaudio}/bin/pactl";
hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
swaymsg = "${config.wayland.windowManager.sway.package}/bin/swaymsg";
isLocked = "${pgrep} -x ${swaylock}";
lockTime = 4 * 60; # TODO: configurable desktop (10 min)/laptop (4 min)
# Makes two timeouts: one for when the screen is not locked (lockTime+timeout) and one for when it is.
afterLockTimeout = {
timeout,
command,
resumeCommand ? null,
}: [
{
timeout = lockTime + timeout;
inherit command resumeCommand;
}
{
command = "${isLocked} && ${command}";
inherit resumeCommand timeout;
}
];
in {
services.swayidle = {
enable = true;
systemdTarget = "graphical-session.target";
timeouts =
# Lock screen
[
{
timeout = lockTime;
command = "${swaylock} --daemonize --grace 15";
}
]
++
# Turn off displays (hyprland)
(lib.optionals config.wayland.windowManager.hyprland.enable (afterLockTimeout {
timeout = 300;
command = "${hyprctl} dispatch dpms off";
resumeCommand = "${hyprctl} dispatch dpms on";
}))
++
# Turn off displays (sway)
(lib.optionals config.wayland.windowManager.sway.enable (afterLockTimeout {
timeout = 300;
command = "${swaymsg} 'output * dpms off'";
resumeCommand = "${swaymsg} 'output * dpms on'";
}));
};
}

View File

@ -0,0 +1,16 @@
{
config,
pkgs,
...
}: let
inherit (config.colorscheme) colors;
in {
programs.swaylock = {
enable = true;
settings = {
color = "000000";
ignore-empty-password = true;
indicator-idle-visible = false;
};
};
}

View File

@ -0,0 +1,67 @@
#! /usr/bin/env sh
# A hyprland script for a laptop-external-monitor setup, toggling between which is in use
# Launch at startup to make hyprland disable the internal monitor if an external monitor is detected and enabled
# Additionally it's called with a keybind to switch between a laptop monitor and an external display
# Ideally the conditional monitor behaviour was instead done directly in hyprland.conf, but I'm not sure whether that's possible
#
# Relevant info:
# - hyprctl monitors: identifies currently enabled monitors
# - hyprctl monitors all: identifies ALL connected monitors - including those not in use
#
# Suggested use:
# Add this line somewhere after the regular monitor configuration in hyprland.conf:
# exec = /path/to/hyprland-monitors-toggle.sh
# Add a keybind to run this script on demand:
# bind =,SomeKeyHere, exec, /path/to/hyprland-monitors-toggle.sh
#move_all_workspaces_to_monitor() {
# TARGET_MONITOR="$1"
# hyprctl workspaces | grep ^workspace | cut --delimiter ' ' --fields 3 | xargs -I '{}' hyprctl dispatch moveworkspacetomonitor '{}' "$TARGET_MONITOR"
# # Previous approach
# #hyprctl swapactiveworkspaces $EXTERNAL_MONITOR $INTERNAL_MONITOR
#}
# TODO: Detect these instead of hardcoding them
INTERNAL_MONITOR="eDP-1"
EXTERNAL_MONITOR="HDMI-A-1"
# NUM_MONITORS=$(hyprctl monitors all | grep --count Monitor)
# NUM_MONITORS_ACTIVE=$(hyprctl monitors | grep --count Monitor)
# Make sure all
# if [ "$NUM_MONITORS_ACTIVE" -eq 1 ]; then
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
# exit
# fi
MIRROR_SETTING=$(hyprctl monitors all -j | jq -r '.[] | select(.name == "HDMI-A-1") | .mirrorOf')
# # For dynamically toggling which monitor is active later via a keybind
# if [ "$NUM_MONITORS" -gt 1 ]; then # Handling multiple monitors
# if hyprctl monitors | cut --delimiter ' ' --fields 2 | grep --quiet ^$EXTERNAL_MONITOR; then
# hyprctl keyword monitor $INTERNAL_MONITOR,preferred,0x0,1
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
# hyprctl keyword monitor "$EXTERNAL_MONITOR, disable"
# else
# hyprctl keyword monitor $EXTERNAL_MONITOR,preferred,0x0,1
# move_all_workspaces_to_monitor $EXTERNAL_MONITOR
# hyprctl keyword monitor "$INTERNAL_MONITOR, disable"
# fi
# else # If the external monitor is disconnected without running this script first, it might become the case that no monitor is on - therefore turn on the laptop monitor!
# hyprctl keyword monitor $INTERNAL_MONITOR,preferred,0x0,1
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
# fi
echo setting:
echo $MIRROR_SETTING
if [ "$MIRROR_SETTING" = "none" ]; then
echo "mirroring..."
hyprctl keyword monitor "$EXTERNAL_MONITOR, preferred, auto, 1, mirror, $INTERNAL_MONITOR"
else
hyprctl keyword monitor "$EXTERNAL_MONITOR, disable" # shortly disable monitor so waybar recognizes the new monitor again # TODO: find better solution
hyprctl keyword monitor "$EXTERNAL_MONITOR, preferred, auto, 1"
fi

View File

@ -12,7 +12,14 @@
"modules-center": [], "modules-center": [],
"modules-right": ["idle_inhibitor", "disk", "cpu", "memory", "pulseaudio", "battery", "clock", "tray"], "modules-right": ["idle_inhibitor", "custom/nixos-update", "disk", "cpu", "memory", "pulseaudio", "battery", "clock", "tray"],
"custom/nixos-update": {
"exec": "frajul-auto-upgrade-status",
"return-type": "json",
"interval": 2,
"on-click-right": "frajul-auto-upgrade-toggle"
},
"hyprland/workspaces": { "hyprland/workspaces": {
"on-scroll-up": "hyprctl dispatch workspace m+1", "on-scroll-up": "hyprctl dispatch workspace m+1",
@ -35,6 +42,7 @@
}, },
"idle_inhibitor": { "idle_inhibitor": {
"start-activated": true,
"format": "{icon}", "format": "{icon}",
"format-icons": { "format-icons": {
"activated": "", "activated": "",
@ -75,9 +83,9 @@
"warning": 30, "warning": 30,
"critical": 15 "critical": 15
}, },
"format": "{icon} {capacity}% ({time})", "format": "{icon} {capacity}%",
"format-charging": " {capacity}% ({time})", "format-charging": " {capacity}%",
"format-plugged": " {capacity}% ({time})", "format-plugged": " {capacity}%",
"format-full": "{icon} ", "format-full": "{icon} ",
"format-icons": ["", "", "", "", ""] "format-icons": ["", "", "", "", ""]
}, },

View File

@ -5,16 +5,12 @@
lib, lib,
inputs, inputs,
... ...
}: }: let
let palette = (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}).palette;
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.modules.desktop.colorscheme}) in {
palette
;
in
{
programs.waybar = { programs.waybar = {
enable = true; enable = true;
systemd.enable = true; # systemd.enable = true;
settings.mainBar = builtins.fromJSON (builtins.readFile ./config.json); settings.mainBar = builtins.fromJSON (builtins.readFile ./config.json);
}; };

View File

@ -0,0 +1,29 @@
{
pkgs,
lib,
config,
...
}: {
home.packages = [pkgs.waypipe];
systemd.user.services = {
waypipe-client = {
Unit.Description = "Runs waypipe on startup to support SSH forwarding";
Service = {
ExecStartPre = "${lib.getExe' pkgs.coreutils "mkdir"} %h/.waypipe -p";
ExecStart = "${lib.getExe (config.lib.nixGL.wrap pkgs.waypipe)} --socket %h/.waypipe/client.sock client";
ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.waypipe/client.sock";
};
Install.WantedBy = ["graphical-session.target"];
};
waypipe-server = {
Unit.Description = "Runs waypipe on startup to support SSH forwarding";
Service = {
Type = "simple";
ExecStartPre = "${lib.getExe' pkgs.coreutils "mkdir"} %h/.waypipe -p";
ExecStart = "${lib.getExe (config.lib.nixGL.wrap pkgs.waypipe)} --socket %h/.waypipe/server.sock --title-prefix '[%H] ' --login-shell --display wayland-waypipe server -- ${lib.getExe' pkgs.coreutils "sleep"} infinity";
ExecStopPost = "${lib.getExe' pkgs.coreutils "rm"} -f %h/.waypipe/server.sock %t/wayland-waypipe";
};
Install.WantedBy = ["default.target"];
};
};
}

View File

@ -5,14 +5,13 @@
pkgs, pkgs,
inputs, inputs,
... ...
}: }: let
let inherit
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.modules.desktop.colorscheme}) (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette palette
; ;
in in {
{ home.packages = with pkgs; [wlogout];
home.packages = with pkgs; [ wlogout ];
# xdg.configFile."wlogout/style.css".text = '' # xdg.configFile."wlogout/style.css".text = ''
# * { # * {

View File

@ -5,14 +5,13 @@
pkgs, pkgs,
inputs, inputs,
... ...
}: }: let
let inherit
inherit (inputs.nix-colors.colorschemes.${builtins.toString config.modules.desktop.colorscheme}) (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
palette palette
; ;
in in {
{ home.packages = with pkgs; [wofi];
home.packages = with pkgs; [ wofi ];
xdg.configFile."wofi/config".source = ./config; xdg.configFile."wofi/config".source = ./config;
xdg.configFile."wofi/style.css".text = '' xdg.configFile."wofi/style.css".text = ''

View File

@ -0,0 +1,33 @@
{config, ...}: let
inherit (config.colorscheme) colors;
in {
programs.zathura = {
enable = true;
options = {
selection-clipboard = "clipboard";
# TODO fix
# font = "${config.fontProfiles.regular.name} ${toString config.fontProfiles.regular.size}";
# recolor = true;
# default-bg = "${colors.surface}";
# default-fg = "${colors.surface_bright}";
# statusbar-bg = "${colors.surface_container}";
# statusbar-fg = "${colors.on_surface_variant}";
# inputbar-bg = "${colors.surface}";
# inputbar-fg = "${colors.on_secondary}";
# notification-bg = "${colors.surface}";
# notification-fg = "${colors.on_secondary}";
# notification-error-bg = "${colors.error}";
# notification-error-fg = "${colors.on_error}";
# notification-warning-bg = "${colors.error}";
# notification-warning-fg = "${colors.on_error}";
# highlight-color = "${colors.tertiary}";
# highlight-active-color = "${colors.secondary}";
# completion-bg = "${colors.surface_bright}";
# completion-fg = "${colors.on_surface}";
# completions-highlight-bg = "${colors.secondary}";
# completions-highlight-fg = "${colors.on_secondary}";
# recolor-lightcolor = "${colors.surface}";
# recolor-darkcolor = "${colors.inverse_surface}";
};
};
}

View File

@ -1,11 +1,10 @@
{ {
lib, lib,
pkgs, pkgs,
host, config,
... ...
}: }: {
{ imports = [../rofi];
modules.rofi.enable = true;
services.dunst.enable = true; services.dunst.enable = true;
@ -32,11 +31,13 @@
package = pkgs.i3-gaps; package = pkgs.i3-gaps;
}; };
xsession.importedVariables = [ ]; xsession.importedVariables = [];
# Overwrite default home-manager config file # Overwrite default home-manager config file
xdg.configFile."i3/config".source = lib.mkForce ( xdg.configFile."i3/config".source = lib.mkForce (
if host == "kardorf" then ./i3/config-kardorf else ./i3/config if config.hostName == "kardorf"
then ./i3/config-kardorf
else ./i3/config
); );
home.file = { home.file = {
@ -48,5 +49,5 @@
".config/i3status-rust/config.toml".source = ./i3status-rust/config.toml; ".config/i3status-rust/config.toml".source = ./i3status-rust/config.toml;
}; };
home.sessionPath = [ "/home/julian/.config/i3/scripts" ]; home.sessionPath = ["/home/julian/.config/i3/scripts"];
} }

View File

@ -142,8 +142,8 @@ bindsym $mod+Shift+9 move container to workspace number $ws9; workspace $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10; workspace $ws10 bindsym $mod+Shift+0 move container to workspace number $ws10; workspace $ws10
# Monitor config # Monitor config
set $monitor_left "DVI-D-0" set $monitor_left "DVI-D-1"
set $monitor_right "DVI-D-1" set $monitor_right "DVI-D-2"
workspace $ws1 output $monitor_left workspace $ws1 output $monitor_left
workspace $ws2 output $monitor_left workspace $ws2 output $monitor_left

View File

@ -1,27 +0,0 @@
#!/bin/sh
start_if_not_running()
{
program=$1
pidof -sq $program
if [ "$?" -eq "1" ]; then
start_program $1
else
echo "$program is already running"
fi
}
start_program()
{
program=$1
echo "Starting $program..."
$program & > /dev/null
}
i3-msg 'workspace 9; append_layout ~/.config/i3/workspace-messaging.json'
start_program nheko
sleep 0.1
start_program telegram-desktop
sleep 0.1
start_program thunderbird
sleep 0.1

View File

@ -1,20 +0,0 @@
#!/bin/sh
HDMI_SINK="alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_3__sink"
LAPTOP_SINK="alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp__sink"
HDMI_ICON=$(pactl info | grep -q $HDMI_SINK && echo "checkbox")
LAPTOP_ICON=$(pactl info | grep -q $LAPTOP_SINK && echo "checkbox")
HDMI_VOLUME=$(pactl get-sink-volume $HDMI_SINK | head -n 1 | awk '{print $5}')
LAPTOP_VOLUME=$(pactl get-sink-volume $LAPTOP_SINK | head -n 1 | awk '{print $5}')
read -r -d '' CONF <<EOF
Open Pavucontrol,pavucontrol,pavucontrol
^sep()
HDMI - $HDMI_VOLUME,pactl set-default-sink $HDMI_SINK,$HDMI_ICON
Laptop - $LAPTOP_VOLUME,pactl set-default-sink $LAPTOP_SINK,$LAPTOP_ICON
EOF
echo "$CONF" | jgmenu --simple

View File

@ -3,9 +3,7 @@
pkgs, pkgs,
config, config,
... ...
}: }: {
{
programs.kitty = { programs.kitty = {
enable = true; enable = true;
shellIntegration.enableFishIntegration = true; shellIntegration.enableFishIntegration = true;

View File

@ -3,11 +3,8 @@
pkgs, pkgs,
inputs, inputs,
... ...
}: }: {
imports = [inputs.nixvim.homeManagerModules.nixvim];
{
imports = [ inputs.nixvim.homeManagerModules.nixvim ];
home.sessionVariables = { home.sessionVariables = {
EDITOR = "nvim"; EDITOR = "nvim";
@ -39,7 +36,6 @@
opts = { opts = {
number = false; number = false;
relativenumber = false; relativenumber = false;
}; };
clipboard.register = "unnamedplus"; # Use system clipboard clipboard.register = "unnamedplus"; # Use system clipboard
@ -93,9 +89,9 @@
conform-nvim = { conform-nvim = {
enable = true; enable = true;
settings.formatters_by_ft = with pkgs; { settings.formatters_by_ft = with pkgs; {
lua = [ "stylua" ]; lua = ["stylua"];
python = [ "black" ]; python = ["black"];
nix = [ "nixfmt" ]; nix = ["nixfmt"];
}; };
# extraOptions = { # extraOptions = {
# default_format_opts.lsp_format = "fallback"; # default_format_opts.lsp_format = "fallback";
@ -107,9 +103,9 @@
enable = true; enable = true;
autoEnableSources = true; autoEnableSources = true;
settings.sources = [ settings.sources = [
{ name = "nvim_lsp"; } {name = "nvim_lsp";}
{ name = "path"; } {name = "path";}
{ name = "buffer"; } {name = "buffer";}
]; ];
settings.mapping = { settings.mapping = {
"<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; "<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
@ -155,10 +151,9 @@
pyright.enable = true; pyright.enable = true;
dockerls.enable = true; dockerls.enable = true;
lua_ls.enable = true; lua_ls.enable = true;
clangd.enable = true;
}; };
}; };
}; };
}; };
} }

View File

@ -1,12 +1,6 @@
{ {pkgs, ...}: {
lib,
pkgs,
...
}:
{
home.sessionVariables = { home.sessionVariables = {
FLAKE = "/home/julian/.dotfiles"; NH_FLAKE = "/home/julian/.dotfiles";
}; };
home.shellAliases = { home.shellAliases = {
@ -14,5 +8,5 @@
"hs" = "nh home switch"; "hs" = "nh home switch";
}; };
home.packages = with pkgs; [ nh ]; home.packages = with pkgs; [nh];
} }

View File

@ -2,13 +2,11 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
# this would need you to config rofi using home-manager # this would need you to config rofi using home-manager
# programs.rofi = { enable = true; }; # programs.rofi = { enable = true; };
home.packages = with pkgs; [ rofi ]; home.packages = with pkgs; [rofi];
home.file = { home.file = {
".config/rofi/config.rasi".source = ./config.rasi; ".config/rofi/config.rasi".source = ./config.rasi;

View File

@ -1,9 +1,4 @@
{ {pkgs, ...}: {
pkgs,
...
}:
{
home.packages = with pkgs; [ home.packages = with pkgs; [
bat bat
du-dust # Like du tree but better du-dust # Like du tree but better

View File

@ -1,10 +1,6 @@
{ {pkgs, ...}: {
lib, imports = [../../gtk];
pkgs,
...
}:
{
services.blueman-applet.enable = true; services.blueman-applet.enable = true;
services.nextcloud-client.enable = true; services.nextcloud-client.enable = true;
services.nextcloud-client.startInBackground = true; services.nextcloud-client.startInBackground = true;
@ -17,14 +13,14 @@
enable = true; enable = true;
extensions = [ extensions = [
# Tampermonkey # Tampermonkey
{ id = "dhdgffkkebhmkfjojejmpbldmpobfkfo"; } {id = "dhdgffkkebhmkfjojejmpbldmpobfkfo";}
]; ];
}; };
home.packages = with pkgs; [ home.packages = with pkgs; [
arandr arandr
calibre # ebook manager and viewer calibre # ebook manager and viewer
digikam # digikam
discord discord
# dvdisaster # dvdisaster
# element-desktop # element-desktop
@ -38,12 +34,12 @@
# geogebra # geogebra
cheese cheese
handbrake handbrake
kitty # Terminal # kitty # Terminal, already available as feature
libnotify libnotify
libreoffice libreoffice
mate.engrampa mate.engrampa
nomacs # Image viewer nomacs # Image viewer
okular # Pdf reader with many features, good for commenting documents kdePackages.okular # Pdf reader with many features, good for commenting documents
pavucontrol pavucontrol
pdfsam-basic # Split, merge, etc for pdfs pdfsam-basic # Split, merge, etc for pdfs
qalculate-gtk # Nice gui calculator qalculate-gtk # Nice gui calculator

View File

@ -1,10 +1,4 @@
{ {pkgs, ...}: {
pkgs,
...
}:
{
home.packages = with pkgs; [ home.packages = with pkgs; [
watchexec # Run command when any file in current dir changes watchexec # Run command when any file in current dir changes
android-tools # adb android-tools # adb
@ -29,18 +23,23 @@
julia-bin julia-bin
(texlive.combine { (texlive.combine {
# for rendering latex in inkscape # for rendering latex in inkscape
inherit (texlive) inherit
(texlive)
scheme-medium scheme-medium
standalone standalone
amsmath amsmath
preview preview
# needed for org mode export
wrapfig
capt-of
biblatex
; ;
}) })
matlab # Using nix-matlab overlay defined in flake matlab # Using nix-matlab overlay defined in flake
maven maven
nodejs nodejs
pkg-config # Often needed to build something pkg-config # Often needed to build something
pwndbg # improved gdb (debugger) # pwndbg # improved gdb (debugger)
python3 python3
rust-analyzer rust-analyzer
rustc rustc
@ -63,6 +62,7 @@
## My scripts ## My scripts
frajul.deploy-to-pianopi frajul.deploy-to-pianopi
frajul.rtklib
(pkgs.writeShellScriptBin "matlab-rsp" '' (pkgs.writeShellScriptBin "matlab-rsp" ''
matlab -desktop -sd "/home/julian/git/uwa-channel-model" -softwareopengl matlab -desktop -sd "/home/julian/git/uwa-channel-model" -softwareopengl

View File

@ -7,8 +7,7 @@
misc.assume_yes = true; misc.assume_yes = true;
misc.no_retry = true; misc.no_retry = true;
pre_commands."Update flake" = # pre_commands."Update flake" = "git -C /home/julian/.dotfiles checkout origin/flake-updates -- flake.lock";
"git -C /home/julian/.dotfiles checkout origin/flake-updates -- flake.lock";
linux.nix_arguments = "--flake /home/julian/.dotfiles"; linux.nix_arguments = "--flake /home/julian/.dotfiles";
linux.home_manager_arguments = [ linux.home_manager_arguments = [

View File

@ -3,9 +3,7 @@
pkgs, pkgs,
config, config,
... ...
}: }: {
{
programs.wezterm = { programs.wezterm = {
enable = true; enable = true;
extraConfig = '' extraConfig = ''

View File

@ -2,8 +2,7 @@
pkgs, pkgs,
inputs, inputs,
... ...
}: }: {
{
programs.zoxide.enable = true; programs.zoxide.enable = true;
programs.zoxide.enableFishIntegration = true; programs.zoxide.enableFishIntegration = true;
@ -27,7 +26,7 @@
programs.yazi.enable = true; programs.yazi.enable = true;
programs.yazi.enableFishIntegration = true; programs.yazi.enableFishIntegration = true;
programs.yazi.settings.manager = { programs.yazi.settings.manager = {
sort_by = "modified"; sort_by = "mtime";
sort_reverse = true; sort_reverse = true;
show_hidden = true; show_hidden = true;
}; };
@ -36,29 +35,29 @@
manager.prepend_keymap = [ manager.prepend_keymap = [
# Override defaults # Override defaults
{ {
on = [ "e" ]; on = ["e"];
run = ''shell --orphan --confirm "pcmanfm &"''; run = ''shell --orphan --confirm "pcmanfm &"'';
desc = "Open gui file manager"; desc = "Open gui file manager";
} }
{ {
on = [ "<C-o>" ]; on = ["<C-o>"];
run = ''shell "$SHELL" --block --confirm''; run = ''shell "$SHELL" --block --confirm'';
desc = "Open shell here"; desc = "Open shell here";
} }
{ {
on = [ "<C-n>" ]; on = ["<C-n>"];
run = ''shell 'dragon -x -i -T "$1"' --confirm''; run = ''shell 'dragon -x -i -T "$1"' --confirm'';
desc = "Dragndrop via dragon"; desc = "Dragndrop via dragon";
} }
{ {
on = [ "<Enter>" ]; on = ["<Enter>"];
run = "plugin --sync smart-enter"; run = "plugin --sync smart-enter";
desc = "Enter the child directory, or open the file"; desc = "Enter the child directory, or open the file";
} }
]; ];
input.prepend_keymap = [ input.prepend_keymap = [
{ {
on = [ "<Esc>" ]; on = ["<Esc>"];
run = "close"; run = "close";
desc = "Cancel input"; desc = "Cancel input";
} }

View File

@ -2,13 +2,12 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: {
{
home.file = { home.file = {
".config/starship.toml".source = ./starship.toml; ".config/starship.toml".source = ./starship.toml;
}; };
home.packages = with pkgs; [ starship ]; home.packages = with pkgs; [starship];
programs.starship = { programs.starship = {
enable = true; enable = true;
@ -28,14 +27,14 @@
enable = true; enable = true;
plugins = [ plugins = [
# list of plugins: https://github.com/unixorn/awesome-zsh-plugins # list of plugins: https://github.com/unixorn/awesome-zsh-plugins
{ name = "agkozak/zsh-z"; } {name = "agkozak/zsh-z";}
{ {
name = "zsh-users/zsh-completions"; name = "zsh-users/zsh-completions";
} }
# make it behave like fish # make it behave like fish
{ name = "zsh-users/zsh-autosuggestions"; } {name = "zsh-users/zsh-autosuggestions";}
{ name = "zsh-users/zsh-history-substring-search"; } {name = "zsh-users/zsh-history-substring-search";}
{ {
name = "zsh-users/zsh-syntax-highlighting"; name = "zsh-users/zsh-syntax-highlighting";
} # must be last sourced plugin } # must be last sourced plugin

View File

@ -1,16 +1,16 @@
{ {
inputs,
lib, lib,
pkgs, pkgs,
config, config,
outputs, outputs,
... ...
}: }: {
{ imports =
imports = [ [
../features/cli ../features/fonts
../features/helix ../features/nix-helper
] ++ (builtins.attrValues outputs.homeManagerModules); ]
++ (builtins.attrValues outputs.homeManagerModules);
nix = { nix = {
package = lib.mkDefault pkgs.nix; package = lib.mkDefault pkgs.nix;
@ -20,10 +20,12 @@
"flakes" "flakes"
"ca-derivations" "ca-derivations"
]; ];
# warn-dirty = false; # TODO: do I want it? also for systems warn-dirty = false; # TODO: do I want it? also for systems
}; };
}; };
colorscheme.name = "catppuccin-mocha";
# systemd.user.startServices = "sd-switch"; # TODO: what is this # systemd.user.startServices = "sd-switch"; # TODO: what is this
programs = { programs = {
@ -36,10 +38,7 @@
homeDirectory = lib.mkDefault "/home/${config.home.username}"; homeDirectory = lib.mkDefault "/home/${config.home.username}";
stateVersion = lib.mkDefault "23.11"; stateVersion = lib.mkDefault "23.11";
sessionPath = [ "$HOME/.local/bin" ]; sessionPath = ["$HOME/.local/bin"];
sessionVariables = {
FLAKE = "$HOME/Documents/NixConfig";
};
}; };
# TODO: colorscheme # TODO: colorscheme
@ -51,5 +50,4 @@
# home.file = { # home.file = {
# ".colorscheme.json".text = builtins.toJSON config.colorscheme; # ".colorscheme.json".text = builtins.toJSON config.colorscheme;
# }; # };
} }

View File

@ -6,9 +6,11 @@
# inherit pkgs; # inherit pkgs;
# inherit lib; # inherit lib;
# }; # };
{
{ lib, pkgs, ... }: lib,
let pkgs,
...
}: let
package-names = with pkgs; { package-names = with pkgs; {
"x-scheme-handler/tg" = telegram-desktop; "x-scheme-handler/tg" = telegram-desktop;
"x-scheme-handler/mailto" = thunderbird; "x-scheme-handler/mailto" = thunderbird;
@ -40,6 +42,7 @@ let
"inode/directory" = pcmanfm; "inode/directory" = pcmanfm;
}; };
in in
lib.mapAttrs (mimeType: package: [ lib.mapAttrs (mimeType: package: [
"${package}/share/applications/${package.pname}.desktop" "${package}/share/applications/${package.pname}.desktop"
]) package-names ])
package-names

View File

@ -0,0 +1,43 @@
# Only apply this to home-manager standalone
{outputs, ...}: {
# Apply overlays
nixpkgs = {
overlays = builtins.attrValues outputs.overlays;
config = {
allowUnfree = true;
allowUnfreePredicate = _: true; # TODO: what is this
permittedInsecurePackages = [
"olm-3.2.16"
];
warn-dirty = false;
};
};
# Setup binary caches
nix.settings = {
substituters = [
"https://nix-community.cachix.org"
"https://cache.nixos.org/"
"https://hyprland.cachix.org"
"http://binarycache.julian-mutter.de"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
];
trusted-users = [
"root"
"@wheel"
];
experimental-features = [
"nix-command"
"flakes"
"ca-derivations"
];
# nix.settings. # warn-dirty = false; # TODO: do I want this
};
}

View File

@ -1,57 +1,56 @@
{ {
# Snowfall Lib provides a customized `lib` instance with access to your flake's library imports = [
# as well as the libraries available from your flake's inputs. ./global
lib,
# An instance of `pkgs` with your overlays and packages applied is also available.
pkgs,
# You also have access to your flake's inputs.
inputs,
# Additional metadata is provided by Snowfall Lib. ./features/fish
namespace, # The namespace used for your flake, defaulting to "internal" if not set. ./features/direnv
home, # The home architecture for this host (eg. `x86_64-linux`). ./features/topgrade
target, # The Snowfall Lib target for this home (eg. `x86_64-home`). ./features/neovim
format, # A normalized name for the home target (eg. `home`). ./features/ghostty
virtual, # A boolean to determine whether this home is a virtual target using nixos-generators. ./features/wezterm
host, # The host name for this home. ./features/yazi
./features/emacs
# All other arguments come from the home home. # ./features/hyprland
config, ./features/i3
...
}:
{
home.username = "julian";
home.homeDirectory = "/home/julian";
modules = { ./features/suites/cli
non-nixos.is-nixos = true; ./features/suites/desktop
shell = { ./features/suites/development
fish.enable = true; ];
direnv.enable = true;
};
topgrade.enable = true;
neovim.enable = true;
# alacritty.enable = true;
kitty.enable = true;
yazi.enable = true;
emacs.enable = true;
i3.enable = true;
nix-helper.enable = true;
desktop.enable = true; hostName = "kardorf";
fonts.enable = true; is-nixos = true;
terminal = "ghostty";
suites = { # --------- ---------
cli.enable = true; # | DVI-D-1 | | DVI-D-2 |
desktop.enable = true; # --------- ---------
development.enable = true; monitors = [
}; {
}; name = "DVI-D-1";
width = 1680;
# Let Home Manager install and manage itself. height = 1050;
programs.home-manager.enable = true; workspaces = [
"1"
# ======================== DO NOT CHANGE THIS ======================== "2"
home.stateVersion = "23.11"; "3"
# ======================== DO NOT CHANGE THIS ======================== "4"
"5"
];
primary = true;
}
{
name = "DVI-D-2";
width = 1680;
height = 1050;
workspaces = [
"6"
"7"
"8"
"9"
"10"
];
}
];
} }

View File

@ -1,43 +1,18 @@
{ {pkgs, ...}: {
# Snowfall Lib provides a customized `lib` instance with access to your flake's library imports = [
# as well as the libraries available from your flake's inputs. ./global
lib,
# An instance of `pkgs` with your overlays and packages applied is also available.
pkgs,
# You also have access to your flake's inputs.
inputs,
# Additional metadata is provided by Snowfall Lib. ./features/fish
namespace, # The namespace used for your flake, defaulting to "internal" if not set. ./features/topgrade
home, ./features/neovim
target, # The Snowfall Lib target for this home (eg. `x86_64-home`). ./features/wezterm
format, # A normalized name for the home target (eg. `home`). ./features/yazi
virtual, # A boolean to determine whether this home is a virtual target using nixos-generators. ./features/gtk
host, # The host name for this home. ];
# All other arguments come from the home home. hostName = "pianonix";
config, is-nixos = true;
... terminal = "wezterm";
}@arguments:
{
home.username = "julian";
home.homeDirectory = "/home/julian";
modules = {
non-nixos.is-nixos = true;
shell = {
fish.enable = true;
};
yazi.enable = true;
topgrade.enable = true;
neovim.enable = true;
wezterm.enable = true;
nix-helper.enable = true;
desktop.enable = true;
fonts.enable = true;
};
services.syncthing.tray.enable = true; services.syncthing.tray.enable = true;
services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
@ -54,17 +29,9 @@
# Autostart link # Autostart link
home.file = { home.file = {
".config/autostart/sheet-organizer.desktop".source = ".config/autostart/sheet-organizer.desktop".source = "${pkgs.sheet-organizer}/share/applications/sheet-organizer.desktop";
"${pkgs.sheet-organizer}/share/applications/sheet-organizer.desktop";
".config/sheet-organizer/config.toml".text = '' ".config/sheet-organizer/config.toml".text = ''
working_directory = "/home/julian/Klavier" working_directory = "/home/julian/Klavier"
''; '';
}; };
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# ======================== DO NOT CHANGE THIS ========================
home.stateVersion = "23.11";
# ======================== DO NOT CHANGE THIS ========================
} }

1
homes/julian/ssh.pub Normal file
View File

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjSZYdoF/51F+ykcBAYVCzCPTF5EEigWBL1APiR0h+H

View File

@ -1,53 +1,30 @@
{ {
# Snowfall Lib provides a customized `lib` instance with access to your flake's library
# as well as the libraries available from your flake's inputs.
lib, lib,
# An instance of `pkgs` with your overlays and packages applied is also available.
pkgs, pkgs,
# You also have access to your flake's inputs.
inputs,
# Additional metadata is provided by Snowfall Lib.
namespace, # The namespace used for your flake, defaulting to "internal" if not set.
home, # The home architecture for this host (eg. `x86_64-linux`).
target, # The Snowfall Lib target for this home (eg. `x86_64-home`).
format, # A normalized name for the home target (eg. `home`).
virtual, # A boolean to determine whether this home is a virtual target using nixos-generators.
host, # The host name for this home.
# All other arguments come from the home home.
config,
... ...
}: }: {
{ imports = [
home.username = "julian"; ../global
home.homeDirectory = "/home/julian";
modules = { ../features/fish
non-nixos.is-nixos = false; ../features/direnv
shell = { ../features/topgrade
fish.enable = true; ../features/neovim
direnv.enable = true; ../features/yazi
}; ../features/emacs
topgrade.enable = true; ../features/nix-helper
neovim.enable = true; ];
yazi.enable = true;
emacs.enable = true;
nix-helper.enable = true; hostName = "aspi";
}; is-nixos = false;
# terminal = "kitty";
home.sessionPath = ["/snap/bin"];
home.packages = home.packages =
lib.lists.concatMap (packages-list-file: import packages-list-file { inherit pkgs; }) lib.lists.concatMap (packages-list-file: import packages-list-file {inherit pkgs;})
[ [
./fonts.nix ./fonts.nix
./packages.nix ./packages.nix
]; ];
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# ======================== DO NOT CHANGE THIS ========================
home.stateVersion = "23.11";
# ======================== DO NOT CHANGE THIS ========================
} }

View File

@ -1,8 +1,6 @@
{ pkgs, ... }: {pkgs, ...}:
with pkgs; [
with pkgs; nerd-fonts.fira-code
[
(nerdfonts.override { fonts = [ "FiraCode" ]; })
font-awesome font-awesome
dejavu_fonts dejavu_fonts
noto-fonts noto-fonts

View File

@ -1,7 +1,5 @@
{ pkgs, ... }: {pkgs, ...}:
with pkgs; [
with pkgs;
[
# Rust setup # Rust setup
rustc rustc
rustfmt rustfmt

View File

@ -1,132 +1,54 @@
{
pkgs,
...
}:
{ {
imports = [ imports = [
# inputs.hardware.nixosModules.common-cpu-amd # TODO something useful for me?
./hardware-configuration.nix ./hardware-configuration.nix
../common/global ../common/global
../common/users/julian ../common/users/julian
../common/optional/binarycaches.nix
# ../common/optional/greetd.nix
../common/optional/pipewire.nix
../common/optional/quietboot.nix
../common/optional/remote-builder.nix ../common/optional/remote-builder.nix
../common/optional/boot-efi.nix ../common/optional/boot-efi.nix
../common/optional/greetd.nix
../common/optional/authentication.nix
../common/optional/pcmanfm.nix ../common/optional/pcmanfm.nix
../common/optional/i3.nix ../common/optional/pipewire.nix
../common/optional/gdm.nix
../common/optional/redshift.nix ../common/optional/gamemode.nix
../common/optional/virtualbox.nix ../common/optional/virtualbox.nix
../common/optional/xdg-portal.nix
../common/optional/polkit.nix # TODO: maybe not needed! ../common/optional/podman.nix
../common/optional/keyring.nix # TODO: maybe not needed! ../common/optional/wireguard.nix
../common/optional/flatpak.nix
../common/optional/avahi.nix
]; ];
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
boot.blacklistedKernelModules = [ "pcspkr" ]; # Disables "beep"
networking.hostName = "aspi"; networking.hostName = "aspi";
networking.networkmanager.enable = true; system.stateVersion = "24.05";
# networking.networkmanager.dns = "systemd-resolved";
services.resolved.enable = true;
time.timeZone = "Europe/Berlin";
sops.secrets = {
"password/aspi".neededForUsers = true; # necessary for setting password
};
hardware.graphics.enable = true;
modules = { modules = {
syncthing = { syncthing = {
enable = true; enable = true;
overrideSettings = false; overrideSettings = false;
}; };
frajulAutoUpgrade = {
enable = true;
flakePath = "/home/julian/.dotfiles";
};
}; };
users.mutableUsers = false;
services.blueman.enable = true; services.blueman.enable = true;
services.upower.enable = true; services.upower.enable = true;
programs.steam.enable = true; programs.steam.enable = true;
programs.dconf.enable = true; # TODO: not working
services.logind.lidSwitch = "lock"; services.logind.lidSwitch = "lock";
services.logind.lidSwitchDocked = "lock"; services.logind.lidSwitchDocked = "lock";
programs.kdeconnect.enable = true; programs.kdeconnect.enable = true;
# Enable touchpad support (enabled default in most desktopManager). # Enable touchpad support
services.libinput.enable = true; services.libinput.enable = true;
# This interface is started on boot / switch
networking.wg-quick.interfaces = {
julian = {
configFile = "/etc/wireguard/julian.conf";
};
};
# List services that you want to enable:
services.openssh.enable = false;
services.flatpak.enable = true;
security.krb5.enable = true;
security.krb5.settings = {
# domain_realm = {
# ".julian-mutter.de" = "julian-mutter.de";
# "julian-mutter.de" = "julian-mutter.de";
# };
libdefaults = {
default_realm = "julian-mutter.de";
# dns_lookup_realm = true;
# dns_lookup_kdc = true;
# ticket_lifetime = "24h";
# renew_lifetime = "7d";
};
realms = {
"julian-mutter.de" = {
kdc = [ "kerberos.julian-mutter.de" ];
admin_server = "kerberos-admin.julian-mutter.de";
default_domain = "julian-mutter.de";
};
};
};
virtualisation.docker.enable = true;
# hardware.nvidia-container-toolkit.enable = true;
# services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia.open = false;
# Do not alway generate man-cache, making builds much faster
documentation.man.generateCaches = false;
# MDNS on local network
services.avahi = {
enable = true;
nssmdns4 = true;
};
# Packages needed as root
environment.systemPackages = with pkgs; [
vim
htop
mc
xorg.xhost
pavucontrol
frajul.pulseaudio-popup
gparted-xhost # needs to be installed as system package so it can be actually opened
xclip
brightnessctl
];
# ======================== DO NOT CHANGE THIS ========================
system.stateVersion = "24.05";
# ======================== DO NOT CHANGE THIS ========================
} }

View File

@ -1,17 +1,22 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{ {
imports = config,
[ (modulesPath + "/installer/scan/not-detected.nix") lib,
]; ...
}: {
boot.initrd.availableKernelModules = [ "vmd" "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" ]; boot.initrd.availableKernelModules = [
boot.initrd.kernelModules = [ "dm-snapshot" ]; "vmd"
boot.kernelModules = [ "kvm-intel" ]; "xhci_pci"
boot.extraModulePackages = [ ]; "ahci"
"nvme"
"usb_storage"
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = ["dm-snapshot"];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
boot.blacklistedKernelModules = ["pcspkr"]; # Disables "beep"
boot.binfmt.emulatedSystems = ["aarch64-linux"];
boot.initrd.luks.devices = { boot.initrd.luks.devices = {
root = { root = {
@ -21,32 +26,42 @@
}; };
}; };
fileSystems."/" = fileSystems."/" = {
{ device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c"; device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=root" "compress=zstd" ]; options = [
}; "subvol=root"
"compress=zstd"
fileSystems."/home" =
{ device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c";
fsType = "btrfs";
options = [ "subvol=home" "compress=zstd" ];
};
fileSystems."/nix" =
{ device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c";
fsType = "btrfs";
options = [ "subvol=nix" "compress=zstd" "noatime" ];
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/7040-F37C";
fsType = "vfat";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/26140b4a-0579-406d-a484-35aa31b32e80"; }
]; ];
};
fileSystems."/home" = {
device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c";
fsType = "btrfs";
options = [
"subvol=home"
"compress=zstd"
];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/bbc45be3-75f5-40c5-8427-2a425de8422c";
fsType = "btrfs";
options = [
"subvol=nix"
"compress=zstd"
"noatime"
];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/7040-F37C";
fsType = "vfat";
};
swapDevices = [
{device = "/dev/disk/by-uuid/26140b4a-0579-406d-a484-35aa31b32e80";}
];
# 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
# (the default) this is the recommended approach. When using systemd-networkd it's # (the default) this is the recommended approach. When using systemd-networkd it's
@ -59,4 +74,5 @@
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
hardware.nvidia.open = false;
} }

View File

@ -1,44 +1,15 @@
# sudo nixos-rebuild switch --flake .#builder --target-host root@192.168.3.118 # sudo nixos-rebuild switch --flake .#builder --target-host root@192.168.3.118
# or # or
# deploy .#builder # deploy .#builder
{ config, pkgs, ... }: {config, ...}: {
imports = [
./hardware-configuration.nix
{ ../common/global
imports = [ ./hardware-configuration.nix ]; ];
# hardware.graphics = {
# enable = true;
# extraPackages = with pkgs; [
# rocmPackages.clr.icd
# linuxPackages.amdgpu-pro
# ];
# };
# boot.kernelParams = [
# "radeon.si_support=0"
# "radeon.cik_support=1"
# "amdgpu.si_support=0"
# "amdgpu.cik_support=1"
# ];
# boot.extraModulePackages = with config.boot.kernelPackages; [ amdgpu-pro ];
# boot.blacklistedKernelModules = [ "radeon" ];
boot.loader.grub.enable = true;
boot.loader.grub.device = "/dev/sda";
# Emulated systems used as alternative to cross-compiling
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
networking.hostName = "builder"; networking.hostName = "builder";
networking.networkmanager.enable = true; system.stateVersion = "23.11";
time.timeZone = "Europe/Berlin";
modules = {
keymap.enable = true;
locales.enable = true;
sops.enable = true;
};
users.users.nix = { users.users.nix = {
isNormalUser = true; isNormalUser = true;
@ -46,6 +17,7 @@
extraGroups = [ extraGroups = [
"networkmanager" "networkmanager"
"wheel" "wheel"
"docker"
]; ];
}; };
@ -59,17 +31,30 @@
substituters = [ substituters = [
"https://nix-community.cachix.org" "https://nix-community.cachix.org"
"https://cache.nixos.org/" "https://cache.nixos.org/"
"https://hyprland.cachix.org"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
]; ];
trusted-public-keys = [ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ];
trusted-users = [ "nix" ]; trusted-users = ["nix"];
max-jobs = "auto"; max-jobs = "auto";
cores = 0; cores = 0;
}; };
system.autoUpgrade = {
enable = true;
flake = "git+https://gitlab.julian-mutter.de/julian/dotfiles";
flags = [
"--recreate-lock-file" # update lock file
];
dates = "02:13";
};
# optimize store by hardlinking store files # optimize store by hardlinking store files
nix.optimise.automatic = true; nix.optimise.automatic = true;
nix.optimise.dates = [ "03:15" ]; nix.optimise.dates = ["03:15"];
# nix.gc.automatic = true; # nix.gc.automatic = true;
# nix.gc.dates = "daily"; # nix.gc.dates = "daily";
@ -84,17 +69,6 @@
max-free = ${toString (100 * 1024 * 1024 * 1024)} max-free = ${toString (100 * 1024 * 1024 * 1024)}
''; '';
environment.systemPackages = with pkgs; [
vim
htop
mc
# # AMD GPU tools
# pciutils
# nvtopPackages.amd
# linuxPackages.amdgpu-pro
];
nix.nrBuildUsers = 64; nix.nrBuildUsers = 64;
# prevent memory to get filled # prevent memory to get filled
@ -208,8 +182,7 @@
}; };
virtualHosts."binarycache.julian-mutter.de" = { virtualHosts."binarycache.julian-mutter.de" = {
locations."/".proxyPass = locations."/".proxyPass = "http://${config.services.nix-serve.bindAddress}:${toString config.services.nix-serve.port}";
"http://${config.services.nix-serve.bindAddress}:${toString config.services.nix-serve.port}";
}; };
clientMaxBodySize = "2G"; clientMaxBodySize = "2G";
@ -224,7 +197,7 @@
url = "https://gitlab.julian-mutter.de"; url = "https://gitlab.julian-mutter.de";
name = "builder"; name = "builder";
tokenFile = config.sops.secrets."gitea_token".path; tokenFile = config.sops.secrets."gitea_token".path;
labels = [ ]; # use default labels labels = []; # use default labels
}; };
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
@ -238,7 +211,7 @@
sops.secrets."gitea_token" = { sops.secrets."gitea_token" = {
owner = config.users.users.nix.name; owner = config.users.users.nix.name;
sopsFile = ../../../secrets/secrets-builder.yaml; sopsFile = ./secrets.yaml;
}; };
# =========== Binary Cache ========== # =========== Binary Cache ==========
@ -248,7 +221,7 @@
}; };
# =========== Binary Cache with attic ========== # =========== Binary Cache with attic ==========
sops.secrets."attic_token".sopsFile = ../../../secrets/secrets-builder.yaml; sops.secrets."attic_token".sopsFile = ./secrets.yaml;
services.atticd = { services.atticd = {
enable = true; enable = true;
@ -256,7 +229,7 @@
settings = { settings = {
listen = "[::]:8080"; listen = "[::]:8080";
jwt = { }; jwt = {};
# Data chunking # Data chunking
# #
@ -283,7 +256,16 @@
}; };
}; };
# ======================== DO NOT CHANGE THIS ======================== services.gitlab-runner.enable = true;
system.stateVersion = "23.11"; # runner for everything else
# ======================== DO NOT CHANGE THIS ======================== #
sops.secrets."gitlab_runner_token".sopsFile = ./secrets.yaml;
services.gitlab-runner.services.default = {
# File should contain at least these two variables:
authenticationTokenConfigFile = config.sops.secrets."gitlab_runner_token".path;
dockerImage = "alpine:latest";
dockerVolumes = [
"/var/run/docker.sock:/var/run/docker.sock"
];
};
} }

View File

@ -1,17 +1,4 @@
# Do not modify this file! It was generated by nixos-generate-config {lib, ...}: {
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = [
"ata_piix" "ata_piix"
"uhci_hcd" "uhci_hcd"
@ -21,8 +8,8 @@
"sr_mod" "sr_mod"
]; ];
# boot.initrd.kernelModules = [ "amdgpu" ]; # GPU support # boot.initrd.kernelModules = [ "amdgpu" ]; # GPU support
boot.kernelModules = [ ]; boot.kernelModules = [];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [];
fileSystems."/" = { fileSystems."/" = {
device = "/dev/disk/by-uuid/f088fe8e-bf3d-4a89-98bd-ead9852d381f"; device = "/dev/disk/by-uuid/f088fe8e-bf3d-4a89-98bd-ead9852d381f";
@ -37,4 +24,27 @@
# networking.interfaces.ens18.useDHCP = lib.mkDefault true; # networking.interfaces.ens18.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
# hardware.graphics = {
# enable = true;
# extraPackages = with pkgs; [
# rocmPackages.clr.icd
# linuxPackages.amdgpu-pro
# ];
# };
# boot.kernelParams = [
# "radeon.si_support=0"
# "radeon.cik_support=1"
# "amdgpu.si_support=0"
# "amdgpu.cik_support=1"
# ];
# boot.extraModulePackages = with config.boot.kernelPackages; [ amdgpu-pro ];
# boot.blacklistedKernelModules = [ "radeon" ];
boot.loader.grub.enable = true;
boot.loader.grub.device = "/dev/sda";
# Emulated systems used as alternative to cross-compiling
boot.binfmt.emulatedSystems = ["aarch64-linux"];
} }

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,16 @@
{
inputs,
config,
...
}: {
system.hydraAutoUpgrade = {
# Only enable if not dirty
enable = inputs.self ? rev;
dates = "*:0/10"; # Every 10 minutes
instance = "http://hydra.julian-mutter.de";
project = "dotfiles";
jobset = "main";
job = "hosts.${config.networking.hostName}";
oldFlakeRef = "self";
};
}

View File

@ -1,68 +1,41 @@
# Common config for all hosts # Common config for all hosts
{ {
inputs, inputs,
outputs, outputs,
pkgs,
... ...
}: }: {
{
imports = imports =
[ [
./fish.nix # fish for admin ./fish.nix # fish for admin
./locale.nix ./locale.nix
./nix.nix ./nix.nix
./openssh.nix
./podman.nix
./sops.nix ./sops.nix
./xserver.nix ./root.nix
] ]
++ [ ++ [
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
] ]
++ (builtins.attrValues outputs.nixosModules); ++ (builtins.attrValues outputs.nixosModules);
# Replaces the (modulesPath + "/installer/scan/not-detected.nix") from default hardware-configuration.nix
# Enables non-free firmware
hardware.enableRedistributableFirmware = true;
# Networking
networking.networkmanager = {
enable = true;
plugins = with pkgs; [
networkmanager-openconnect
];
};
services.resolved.enable = true;
programs.dconf.enable = true;
# HM
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.extraSpecialArgs = { home-manager.extraSpecialArgs = {
inherit inputs outputs; inherit inputs outputs;
}; };
# Apply overlays
nixpkgs = {
overlays = builtins.attrValues outputs.overlays;
config = {
allowUnfree = true;
};
};
nix.settings.auto-optimise-store = true;
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
# Setup binary caches
nix.settings = {
substituters = [
"https://nix-community.cachix.org"
"https://cache.nixos.org/"
"https://hyprland.cachix.org"
"http://binarycache.julian-mutter.de"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
];
trusted-users = [ "@wheel" ]; # needed for devenv to add custom caches
};
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 30d";
};
programs.nix-ld.enable = true;
} }

View File

@ -19,6 +19,8 @@
layout = "de"; layout = "de";
variant = ""; variant = "";
}; };
# Configure console keymap
console.keyMap = "de"; console.keyMap = "de";
time.timeZone = "Europe/Berlin";
} }

View File

@ -1,8 +1,23 @@
{ {
lib, lib,
outputs,
... ...
}: }: {
{ # Apply overlays
nixpkgs = {
# TODO: apply this to hm and nixos without duplicate code
overlays = builtins.attrValues outputs.overlays;
config = {
nvidia.acceptLicense = true;
allowUnfree = true;
allowUnfreePredicate = _: true; # TODO: what is this
warn-dirty = false;
permittedInsecurePackages = [
"olm-3.2.16"
];
};
};
nix.settings.auto-optimise-store = lib.mkDefault true; nix.settings.auto-optimise-store = lib.mkDefault true;
nix.settings.experimental-features = [ nix.settings.experimental-features = [
"nix-command" "nix-command"
@ -11,26 +26,6 @@
]; ];
# warn-dirty = false; # warn-dirty = false;
# Setup binary caches
nix.settings = {
substituters = [
"https://nix-community.cachix.org"
"https://cache.nixos.org/"
"https://hyprland.cachix.org"
"http://binarycache.julian-mutter.de"
];
trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
];
trusted-users = [
"root"
"@wheel"
]; # needed for devenv to add custom caches
};
nix.gc = { nix.gc = {
automatic = true; automatic = true;
dates = "weekly"; dates = "weekly";
@ -45,5 +40,4 @@
# Add each flake input as a registry and nix_path # Add each flake input as a registry and nix_path
# registry = lib.mapAttrs (_: flake: { inherit flake; }) flakeInputs; # registry = lib.mapAttrs (_: flake: { inherit flake; }) flakeInputs;
# nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") flakeInputs; # nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") flakeInputs;
} }

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