This commit is contained in:
Ray Andrew 2024-11-03 15:27:57 -06:00
parent 3a32e50429
commit b2cf19f883
64 changed files with 885 additions and 445 deletions

3
.gitignore vendored
View file

@ -1 +1,4 @@
*.swp *.swp
# Generated by nix-pre-commit-hooks
/.pre-commit-config.yaml

View file

@ -87,6 +87,22 @@
} }
}, },
"flake-compat": { "flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1673956053, "lastModified": 1673956053,
@ -139,6 +155,50 @@
"type": "github" "type": "github"
} }
}, },
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1730302582,
"narHash": "sha256-W1MIJpADXQCgosJZT8qBYLRuZls2KSiKdpnTVdKBuvU=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "af8a16fe5c264f5e9e18bcee2859b40a656876cf",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gnome-shell": { "gnome-shell": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -265,6 +325,22 @@
} }
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": {
"lastModified": 1720386169,
"narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "194846768975b7ad2c4988bdb82572c00222c0d7",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable_2": {
"locked": { "locked": {
"lastModified": 1729691686, "lastModified": 1729691686,
"narHash": "sha256-BAuPWW+9fa1moZTU+jFh+1cUtmsuF8asgzFwejM4wac=", "narHash": "sha256-BAuPWW+9fa1moZTU+jFh+1cUtmsuF8asgzFwejM4wac=",
@ -306,14 +382,16 @@
"root": { "root": {
"inputs": { "inputs": {
"disko": "disko", "disko": "disko",
"git-hooks": "git-hooks",
"home-manager": "home-manager", "home-manager": "home-manager",
"impermanence": "impermanence", "impermanence": "impermanence",
"nix-index-database": "nix-index-database", "nix-index-database": "nix-index-database",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixpkgs-stable": "nixpkgs-stable", "nixpkgs-stable": "nixpkgs-stable_2",
"plasma-manager": "plasma-manager", "plasma-manager": "plasma-manager",
"stylix": "stylix" "stylix": "stylix",
"treefmt-nix": "treefmt-nix"
} }
}, },
"stylix": { "stylix": {
@ -322,7 +400,7 @@
"base16-fish": "base16-fish", "base16-fish": "base16-fish",
"base16-helix": "base16-helix", "base16-helix": "base16-helix",
"base16-vim": "base16-vim", "base16-vim": "base16-vim",
"flake-compat": "flake-compat", "flake-compat": "flake-compat_2",
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"gnome-shell": "gnome-shell", "gnome-shell": "gnome-shell",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
@ -411,6 +489,26 @@
"repo": "tinted-tmux", "repo": "tinted-tmux",
"type": "github" "type": "github"
} }
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1730321837,
"narHash": "sha256-vK+a09qq19QNu2MlLcvN4qcRctJbqWkX7ahgPZ/+maI=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "746901bb8dba96d154b66492a29f5db0693dbfcc",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

View file

@ -1,6 +1,6 @@
{ {
description = "Nixos config flake"; description = "Nixos config flake";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.05"; nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.05";
@ -17,10 +17,19 @@
plasma-manager.url = "github:nix-community/plasma-manager"; plasma-manager.url = "github:nix-community/plasma-manager";
plasma-manager.inputs.nixpkgs.follows = "nixpkgs"; plasma-manager.inputs.nixpkgs.follows = "nixpkgs";
plasma-manager.inputs.home-manager.follows = "home-manager"; plasma-manager.inputs.home-manager.follows = "home-manager";
treefmt-nix.url = "github:numtide/treefmt-nix";
treefmt-nix.inputs.nixpkgs.follows = "nixpkgs";
git-hooks.url = "github:cachix/git-hooks.nix";
git-hooks.inputs.nixpkgs.follows = "nixpkgs";
}; };
outputs = outputs =
inputs@{ nixpkgs, self, ... }: inputs@{
nixpkgs,
self,
treefmt-nix,
...
}:
let let
system = "x86_64-linux"; system = "x86_64-linux";
pkgs = import inputs.nixpkgs { pkgs = import inputs.nixpkgs {
@ -55,9 +64,65 @@
"x86_64-darwin" "x86_64-darwin"
"aarch64-darwin" "aarch64-darwin"
] (system: fn (createCommonArgs system)); ] (system: fn (createCommonArgs system));
treefmtEval = forAllSystems (
{ pkgs, ... }:
treefmt-nix.lib.evalModule pkgs {
projectRootFile = "flake.nix";
programs.nixfmt-rfc-style.enable = true;
settings.global.excludes = [ "flake.lock" ];
}
);
in in
{ {
inherit lib self; inherit lib self;
nixosConfigurations = (import ./src/hosts/default.nix commonArgs); nixosConfigurations = import ./src/hosts/default.nix commonArgs;
checks = forAllSystems (
{
pkgs,
system,
...
}:
{
formatting = treefmtEval.${system}.config.build.check self;
pre-commit-check = inputs.git-hooks.lib.${system}.run {
src = ./.;
excludes = [ "flake.lock" ];
hooks = {
treefmt = {
enable = true;
package = lib.mkOverride 900 treefmtEval.${system}.config.build.wrapper;
};
};
};
}
);
devShells = forAllSystems (
{
pkgs,
system,
...
}:
{
default = pkgs.mkShell {
inherit (self.checks.${system}.pre-commit-check) shellHook;
name = "dotfiles";
buildInputs = self.checks.${system}.pre-commit-check.enabledPackages;
nativeBuildInputs = [
treefmtEval.${system}.config.build.wrapper
];
packages = [
pkgs.sops
pkgs.ssh-to-age
pkgs.nixfmt-rfc-style
];
DIRENV_LOG_FORMAT = "";
};
}
);
formatter = forAllSystems ({ system, ... }: treefmtEval.${system}.config.build.wrapper);
}; };
} }

View file

@ -5,12 +5,10 @@
user, user,
... ...
}: }:
{ {
imports = [ imports = [
./emacs.nix ./emacs.nix
./impermanence.nix ./impermanence.nix
./git.nix
./gui ./gui
./latex.nix ./latex.nix
./shell ./shell
@ -20,7 +18,6 @@
]; ];
config = { config = {
# setup fonts for other distros, run "fc-cache -f" to refresh fonts # setup fonts for other distros, run "fc-cache -f" to refresh fonts
fonts.fontconfig.enable = true; fonts.fontconfig.enable = true;
@ -38,40 +35,40 @@
# mkdir -p ${config.home.homeDirectory}/.local/share/applications/home-manager # mkdir -p ${config.home.homeDirectory}/.local/share/applications/home-manager
# mkdir -p ${config.home.homeDirectory}/.icons # mkdir -p ${config.home.homeDirectory}/.icons
# ln -sf ${config.home.homeDirectory}/.nix-profile/share/icons ${config.home.homeDirectory}/.icons/nix-icons # ln -sf ${config.home.homeDirectory}/.nix-profile/share/icons ${config.home.homeDirectory}/.icons/nix-icons
# # Check if the cached desktop files list exists # # Check if the cached desktop files list exists
# if [ -f ${config.home.homeDirectory}/.cache/current_desktop_files.txt ]; then # if [ -f ${config.home.homeDirectory}/.cache/current_desktop_files.txt ]; then
# current_files=$(cat ${config.home.homeDirectory}/.cache/current_desktop_files.txt) # current_files=$(cat ${config.home.homeDirectory}/.cache/current_desktop_files.txt)
# else # else
# current_files="" # current_files=""
# fi # fi
# # Symlink new desktop entries # # Symlink new desktop entries
# ${pkgs.bash}/bin/bash -c < # ${pkgs.bash}/bin/bash -c <
# for desktop_file in "${config.home.homeDirectory}/.nix-profile/share/applications/*.desktop"; do # for desktop_file in "${config.home.homeDirectory}/.nix-profile/share/applications/*.desktop"; do
# if ! echo "$current_files" | grep -q "$(basename $desktop_file)"; then # if ! echo "$current_files" | grep -q "$(basename $desktop_file)"; then
# echo $desktop_file # echo $desktop_file
# ln -sf "$desktop_file" ${config.home.homeDirectory}/.local/share/applications/home-manager/$(basename $desktop_file) # ln -sf "$desktop_file" ${config.home.homeDirectory}/.local/share/applications/home-manager/$(basename $desktop_file)
# fi # fi
# done # done
# # Update desktop database # # Update desktop database
# ${pkgs.desktop-file-utils}/bin/update-desktop-database ${config.home.homeDirectory}/.local/share/applications # ${pkgs.desktop-file-utils}/bin/update-desktop-database ${config.home.homeDirectory}/.local/share/applications
# ''; # '';
# }; # };
}; };
}; };
programs.home-manager.enable = true; programs.home-manager.enable = true;
services.mpris-proxy.enable = true; services.mpris-proxy.enable = true;
xdg = { xdg = {
enable = true; enable = true;
userDirs = userDirs =
let let
homeDir = config.home.homeDirectory; homeDir = config.home.homeDirectory;
in { in
{
enable = true; enable = true;
download = "${homeDir}/downloads"; download = "${homeDir}/downloads";
documents = "${homeDir}/documents"; documents = "${homeDir}/documents";

View file

@ -1,8 +1,7 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
programs.emacs = { programs.emacs = {
enable = true; enable = true;
package = pkgs.emacs; package = pkgs.emacs;
}; };
} }

View file

@ -1,8 +1,11 @@
{ config, pkgs, ... }: {
config,
pkgs,
...
}:
{ {
custom.persist = { custom.persist = {
home.directories = [ home.directories = [
".config/1Password" ".config/1Password"
]; ];
}; };

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
programs.chromium = { programs.chromium = {
enable = true; enable = true;

View file

@ -1,5 +1,8 @@
{ pkgs, config, ... }: {
pkgs,
config,
...
}:
{ {
imports = [ imports = [
./1password.nix ./1password.nix
@ -39,7 +42,6 @@
}; };
}; };
qt = { qt = {
enable = true; enable = true;
# platformTheme.name = "adwaita"; # platformTheme.name = "adwaita";

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
discord discord

View file

@ -1,26 +1,29 @@
{ config, pkgs, lib, user, ... }: {
config,
pkgs,
lib,
user,
...
}:
let let
vendorPath = ".config/.mozilla"; vendorPath = ".config/.mozilla";
configPath = "${vendorPath}/firefox"; configPath = "${vendorPath}/firefox";
in in
{ {
programs.firefox = { programs.firefox = {
enable = true; enable = true;
package = pkgs.firefox-bin.overrideAttrs (o: { package = pkgs.firefox-bin.overrideAttrs (o: {
buildCommand = buildCommand =
o.buildCommand o.buildCommand
+ '' + ''
wrapProgram "$executablePath" \ wrapProgram "$executablePath" \
--set 'HOME' '${config.xdg.configHome}' \ --set 'HOME' '${config.xdg.configHome}' \
--append-flags "${ --append-flags "${
lib.concatStringsSep " " ( lib.concatStringsSep " " [
[ "--name firefox"
"--name firefox" "-P ${user}"
"-P ${user}" # "--profile ${config.xdg.configHome}/.mozilla/${user}"
# "--profile ${config.xdg.configHome}/.mozilla/${user}" ]
]
)
}" }"
''; '';
}); });

View file

@ -1,5 +1,8 @@
{ pkgs, config, ... }: {
pkgs,
config,
...
}:
{ {
programs.foot = { programs.foot = {
enable = true; enable = true;

View file

@ -1,9 +1,13 @@
{ lib, pkgs, config, ... }: {
lib,
pkgs,
config,
...
}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
pop-launcher pop-launcher
gnomeExtensions.pop-shell gnomeExtensions.pop-shell
gnomeExtensions.tray-icons-reloaded gnomeExtensions.tray-icons-reloaded
gnomeExtensions.hibernate-status-button gnomeExtensions.hibernate-status-button
gnomeExtensions.appindicator gnomeExtensions.appindicator
@ -16,8 +20,8 @@
}; };
"org/gnome/shell" = { "org/gnome/shell" = {
disable-user-extensions = false; disable-user-extensions = false;
enabled-extensions = [ enabled-extensions = [
"pop-shell@system76.com" "pop-shell@system76.com"
"keyd" "keyd"
"appindicatorsupport@rgcjonas.gmail.com" "appindicatorsupport@rgcjonas.gmail.com"
# "just-perfection-desktop@just-perfection" # "just-perfection-desktop@just-perfection"
@ -30,22 +34,25 @@
]; ];
}; };
"org/gnome/desktop/wm/preferences" = { "org/gnome/desktop/wm/preferences" = {
num-workspaces = 10; num-workspaces = 10;
}; };
"org/gnome/desktop/wm/keybindings" = { "org/gnome/desktop/wm/keybindings" = {
minimize = []; minimize = [ ];
lock = []; lock = [ ];
switch-to-workspace-left = []; switch-to-workspace-left = [ ];
switch-to-workspace-right = []; switch-to-workspace-right = [ ];
maximize = [ "<Super>f" ]; maximize = [ "<Super>f" ];
unmaximize = [ "<Super><Shift>f" ]; unmaximize = [ "<Super><Shift>f" ];
move-to-monitor-up = []; move-to-monitor-up = [ ];
move-to-monitor-down = []; move-to-monitor-down = [ ];
move-to-monitor-left = []; move-to-monitor-left = [ ];
move-to-monitor-right = []; move-to-monitor-right = [ ];
move-to-workspace-down = []; move-to-workspace-down = [ ];
move-to-workspace-up = []; move-to-workspace-up = [ ];
close = [ "<Super><Shift>q" "<Alt>F4" ]; close = [
"<Super><Shift>q"
"<Alt>F4"
];
switch-to-workspace-1 = [ "<Super>1" ]; switch-to-workspace-1 = [ "<Super>1" ];
switch-to-workspace-2 = [ "<Super>2" ]; switch-to-workspace-2 = [ "<Super>2" ];
switch-to-workspace-3 = [ "<Super>3" ]; switch-to-workspace-3 = [ "<Super>3" ];
@ -68,24 +75,27 @@
move-to-workspace-10 = [ "<Super><Shift>0" ]; move-to-workspace-10 = [ "<Super><Shift>0" ];
}; };
"org/gnome/shell/keybindings" = { "org/gnome/shell/keybindings" = {
toggle-quick-settings = []; toggle-quick-settings = [ ];
switch-to-application-1 = []; switch-to-application-1 = [ ];
switch-to-application-2 = []; switch-to-application-2 = [ ];
switch-to-application-3 = []; switch-to-application-3 = [ ];
switch-to-application-4 = []; switch-to-application-4 = [ ];
switch-to-application-5 = []; switch-to-application-5 = [ ];
switch-to-application-6 = []; switch-to-application-6 = [ ];
switch-to-application-7 = []; switch-to-application-7 = [ ];
switch-to-application-8 = []; switch-to-application-8 = [ ];
switch-to-application-9 = []; switch-to-application-9 = [ ];
show-screenshot-ui = [ "Print" "<Super>o" ]; show-screenshot-ui = [
"Print"
"<Super>o"
];
}; };
"org/gnome/settings-daemon/plugins/media-keys" = { "org/gnome/settings-daemon/plugins/media-keys" = {
video-out = [ ]; video-out = [ ];
rotate-video-lock-static = [ "XF88RotationLockToggle" ]; rotate-video-lock-static = [ "XF88RotationLockToggle" ];
custom-keybindings = [ custom-keybindings = [
"/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/terminal/" "/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/terminal/"
]; ];
}; };
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/terminal" = { "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/terminal" = {
binding = "<Super>Return"; binding = "<Super>Return";
@ -94,32 +104,32 @@
name = "Open Terminal"; name = "Open Terminal";
}; };
"org/gnome/mutter/keybindings" = { "org/gnome/mutter/keybindings" = {
toggle-tiled-left = []; toggle-tiled-left = [ ];
toggle-tiled-right = []; toggle-tiled-right = [ ];
switch-monitor = [ "XF86Display" ]; switch-monitor = [ "XF86Display" ];
}; };
"org/gnome/shell/extensions/pop-shell" = { "org/gnome/shell/extensions/pop-shell" = {
activate-launcher = [ "<Super>Space" ]; activate-launcher = [ "<Super>Space" ];
toggle-floating = [ "<Super>p" ]; toggle-floating = [ "<Super>p" ];
tile-enter = ["<Super>r"]; tile-enter = [ "<Super>r" ];
tile-by-default = true; tile-by-default = true;
tile-orientation = [ "<Super>v" ]; tile-orientation = [ "<Super>v" ];
toggle-stacking-global = [ "<Super>s" ]; toggle-stacking-global = [ "<Super>s" ];
};
"org/gnome/desktop/background" = {
picture-uri-dark = "file://${pkgs.nixos-artwork.wallpapers.nineish-dark-gray.src}";
};
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
show-battery-percentage = true;
clock-format = "12h";
};
"org/gnome/settings-daemon/plugins/power" = {
ambient-enabled = false;
};
"org/gtk/Settings/FileChooser" = {
clock-format = "12h";
}; };
"org/gnome/desktop/background" = {
picture-uri-dark = "file://${pkgs.nixos-artwork.wallpapers.nineish-dark-gray.src}";
};
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
show-battery-percentage = true;
clock-format = "12h";
};
"org/gnome/settings-daemon/plugins/power" = {
ambient-enabled = false;
};
"org/gtk/Settings/FileChooser" = {
clock-format = "12h";
};
}; };
custom.persist = { custom.persist = {

View file

@ -1,5 +1,9 @@
{ pkgs, config, lib, ... }: {
pkgs,
config,
lib,
...
}:
let let
bar = { bar = {
position = "bottom"; position = "bottom";
@ -35,14 +39,16 @@ in
blocks = [ blocks = [
{ {
block = "sound"; block = "sound";
click = [{ click = [
button = "left"; {
cmd = lib.getExe' pkgs.pwvucontrol "pwvucontrol"; button = "left";
}]; cmd = lib.getExe' pkgs.pwvucontrol "pwvucontrol";
}
];
} }
{ {
block = "net"; block = "net";
format = " $icon {$signal_strength|Wired connection} "; format = " $icon {$signal_strength|Wired connection} ";
} }
{ {
block = "weather"; block = "weather";

View file

@ -1,5 +1,11 @@
{ inputs, lib, pkgs, config, stdenv, ... }: {
inputs,
lib,
pkgs,
config,
stdenv,
...
}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
kdePackages.krohnkite kdePackages.krohnkite
@ -29,7 +35,7 @@
"Screensaver" "Screensaver"
"Meta+Ctrl+Alt+L" "Meta+Ctrl+Alt+L"
]; ];
}; };
kwin = { kwin = {
"Window Close" = [ "Window Close" = [
"Alt+F4" "Alt+F4"
@ -43,8 +49,8 @@
]; ];
}; };
plasmashell = { plasmashell = {
"activate task manager entry 1" = []; "activate task manager entry 1" = [ ];
"activate task manager entry 2" = []; "activate task manager entry 2" = [ ];
}; };
}; };
@ -66,7 +72,7 @@
scripts.polonium.enable = false; scripts.polonium.enable = false;
}; };
configFile ={ configFile = {
kwinrc = { kwinrc = {
Desktops.Number = { Desktops.Number = {
value = 1; value = 1;
@ -83,4 +89,3 @@
}; };
}; };
} }

View file

@ -1,16 +1,15 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
xdg.configFile."keyd/app.conf" = { xdg.configFile."keyd/app.conf" = {
text = '' text = ''
[firefox] [firefox]
control.p = up control.p = up
control.n = down control.n = down
control.e = end control.e = end
control.a = home control.a = home
control.shift.p = macro(C-S-p) control.shift.p = macro(C-S-p)
''; '';
}; };
home.file.".local/share/gnome-shell/extensions/keyd" = { home.file.".local/share/gnome-shell/extensions/keyd" = {

View file

@ -1,5 +1,8 @@
{ pkgs, config, ... }: {
pkgs,
config,
...
}:
{ {
programs.kitty = { programs.kitty = {
enable = true; enable = true;

View file

@ -1,12 +1,15 @@
{ config, pkgs, ... }: {
config,
pkgs,
...
}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
skypeforlinux skypeforlinux
]; ];
custom.persist = { custom.persist = {
home.directories = [ home.directories = [
".config/skypeforlinux" ".config/skypeforlinux"
]; ];
}; };

View file

@ -1,12 +1,15 @@
{ config, pkgs, ... }: {
config,
pkgs,
...
}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
slack slack
]; ];
custom.persist = { custom.persist = {
home.directories = [ home.directories = [
".config/Slack" ".config/Slack"
]; ];
}; };

View file

@ -1,14 +1,16 @@
{ pkgs, config, ... }: {
pkgs,
config,
...
}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
spotify spotify
]; ];
custom.persist = { custom.persist = {
home.directories = [ home.directories = [
".config/spotify" ".config/spotify"
]; ];
}; };
} }

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
teams-for-linux teams-for-linux

View file

@ -1,5 +1,8 @@
{ config, pkgs, ... }: {
config,
pkgs,
...
}:
{ {
programs.vscode = { programs.vscode = {
enable = true; enable = true;
@ -8,7 +11,7 @@
stylix.targets.vscode.enable = false; stylix.targets.vscode.enable = false;
custom.persist = { custom.persist = {
home.directories = [ home.directories = [
".config/Code" ".config/Code"
]; ];
}; };

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
programs.wezterm = { programs.wezterm = {
enable = true; enable = true;

View file

@ -1,8 +1,5 @@
_: _: {
{
programs.zathura = { programs.zathura = {
enable = true; enable = true;
}; };
} }

View file

@ -1,14 +1,20 @@
{ config, pkgs, ... }: {
config,
pkgs,
...
}:
let let
zoom = pkgs.zoom-us.overrideAttrs (attrs: { zoom = pkgs.zoom-us.overrideAttrs (attrs: {
nativeBuildInputs = (attrs.nativeBuildInputs or []) ++ [ pkgs.bbe ]; nativeBuildInputs = (attrs.nativeBuildInputs or [ ]) ++ [ pkgs.bbe ];
postFixup = '' postFixup =
''
cp $out/opt/zoom/zoom . cp $out/opt/zoom/zoom .
bbe -e 's/\0manjaro\0/\0nixos\0\0\0/' < zoom > $out/opt/zoom/zoom bbe -e 's/\0manjaro\0/\0nixos\0\0\0/' < zoom > $out/opt/zoom/zoom
'' + (attrs.postFixup or "") + '' ''
+ (attrs.postFixup or "")
+ ''
sed -i 's|Exec=|Exec=env XDG_CURRENT_DESKTOP="gnome" |' $out/share/applications/Zoom.desktop sed -i 's|Exec=|Exec=env XDG_CURRENT_DESKTOP="gnome" |' $out/share/applications/Zoom.desktop
''; '';
}); });
in in
{ {
@ -17,7 +23,7 @@ in
]; ];
custom.persist = { custom.persist = {
home.directories = [ home.directories = [
".zoom" ".zoom"
]; ];
home.files = [ home.files = [

View file

@ -1,8 +1,12 @@
# note: this file exists just to define options for home-manager, # note: this file exists just to define options for home-manager,
# impermanence is not actually used in standalone home-manager as # impermanence is not actually used in standalone home-manager as
# it doesn't serve much utility on legacy distros # it doesn't serve much utility on legacy distros
{ lib, user, config, ... }: {
lib,
user,
config,
...
}:
let let
cfg = config.custom.persist; cfg = config.custom.persist;
in in
@ -35,14 +39,14 @@ in
}; };
}; };
}; };
config = { config = {
# home.persistence = { # home.persistence = {
# "/persist/home/${user}" = { # "/persist/home/${user}" = {
# files = cfg.home.files; # files = cfg.home.files;
# directories = cfg.home.directories; # directories = cfg.home.directories;
# allowOther = false; # allowOther = false;
# }; # };
# "/cache/home/${user}" = { # "/cache/home/${user}" = {
# files = cfg.home.cache.files; # files = cfg.home.cache.files;
# directories = cfg.home.cache.directories; # directories = cfg.home.cache.directories;

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
texlive.combined.scheme-full texlive.combined.scheme-full

View file

@ -1,23 +1,27 @@
{ lib, pkgs, config, ... }: {
lib,
pkgs,
config,
...
}:
{ {
programs.bash.enable = true; programs.bash.enable = true;
programs.bash.enableVteIntegration = true; programs.bash.enableVteIntegration = true;
programs.bash.bashrcExtra = lib.mkAfter '' programs.bash.bashrcExtra = lib.mkAfter ''
if [ "$term" != "dumb" ] || [ -n "$inside_emacs" ]; then if [ "$term" != "dumb" ] || [ -n "$inside_emacs" ]; then
prompt_color="1;32m" prompt_color="1;32m"
if [ -n "$inside_emacs" ]; then if [ -n "$inside_emacs" ]; then
# emacs term mode doesn't support xterm title escape sequence (\e]0;) # emacs term mode doesn't support xterm title escape sequence (\e]0;)
PS1="\n\[\033[$prompt_color\][\h \w]\\$\[\033[0m\] " PS1="\n\[\033[$prompt_color\][\h \w]\\$\[\033[0m\] "
else else
PS1="\[\e[32m\][\[\e[m\]\[\e[31m\]\u\[\e[m\]\[\e[33m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\]:\[\e[36m\]\w\[\e[m\]\[\e[32m\]]\[\e[m\]\[\e[33m\]\\$\[\e[m\] " PS1="\[\e[32m\][\[\e[m\]\[\e[31m\]\u\[\e[m\]\[\e[33m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\]:\[\e[36m\]\w\[\e[m\]\[\e[32m\]]\[\e[m\]\[\e[33m\]\\$\[\e[m\] "
# PS1="\n\[\033[$prompt_color\][\[\e]0;\h: \w\a\]\u@\h:\w]\\$\[\033[0m\] " # PS1="\n\[\033[$prompt_color\][\[\e]0;\h: \w\a\]\u@\h:\w]\\$\[\033[0m\] "
fi fi
if test "$term" = "xterm"; then if test "$term" = "xterm"; then
PS1="\[\033]2;\h:\u:\w\007\]$PS1" PS1="\[\033]2;\h:\u:\w\007\]$PS1"
fi fi
fi fi
''; '';
custom.persist = { custom.persist = {
home.files = [ home.files = [

View file

@ -1,14 +1,63 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
{ {
imports = [ imports = [
./bash.nix ./bash.nix
./direnv.nix ./direnv.nix
./fzf.nix ./git.nix
./lazygit.nix ./lazygit.nix
./nix.nix
./ripgrep.nix ./ripgrep.nix
./shell.nix ./shell.nix
./tmux ./tmux
./zoxide.nix ./zoxide.nix
]; ];
config = {
home.packages =
with pkgs;
[
fd
fx
jq
sd
ugrep
]
++ (lib.attrValues config.custom.shell.packages);
programs = {
bat = {
enable = true;
extraPackages = [
(pkgs.symlinkJoin {
name = "batman";
paths = [ pkgs.bat-extras.batman ];
postBuild = ''
mkdir -p $out/share/bash-completion/completions
echo 'complete -F _comp_cmd_man batman' > $out/share/bash-completion/completions/batman
mkdir -p $out/share/fish/vendor_completions.d
echo 'complete batman --wraps man' > $out/share/fish/vendor_completions.d/batman.fish
mkdir -p $out/share/zsh/site-functions
cat << EOF > $out/share/zsh/site-functions/_batman
#compdef batman
_man "$@"
EOF
'';
meta.mainProgram = "batman";
})
];
};
fzf = {
enable = true;
enableBashIntegration = config.programs.bash.enable;
enableFishIntegration = config.programs.fish.enable;
};
};
};
} }

View file

@ -1,8 +0,0 @@
{ config, ... }:
{
programs.fzf = {
enable = true;
enableBashIntegration = config.programs.bash.enable;
};
}

View file

@ -1,5 +1,9 @@
{ lib, pkgs, config, ... }: {
lib,
pkgs,
config,
...
}:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
git git

View file

@ -1,11 +1,11 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
programs.lazygit = { programs.lazygit = {
enable = true; enable = true;
settings = { settings = {
reporting = "off"; reporting = "off";
startupPopupVersion = 1; # startupPopupVersion = 1;
disableStartupPopups = true;
}; };
}; };
} }

46
src/home/shell/nix.nix Normal file
View file

@ -0,0 +1,46 @@
{
pkgs,
lib,
...
}:
let
nixpkgs-review = pkgs.nixpkgs-review.override { withNom = true; };
in
{
home = {
packages = with pkgs; [
nh
nixd
nix-output-monitor
nix-tree
nixpkgs-review
nvfetcher
];
shellAliases = {
nfl = "nix flake lock";
nfu = "nix flake update";
nfui = "nix flake lock --update-input";
nsh = "nix-shell --command fish -p";
nshp = "nix-shell --pure --command fish -p";
};
};
custom.shell.packages = {
# outputs the current nixos generation
nix-current-generation = ''
# previous desktop versions: 1196
sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | grep current | awk '{print $1}'
'';
};
programs = {
nix-index.enable = true;
};
custom.persist = {
home = {
cache.directories = [ ".cache/nix-index" ];
};
};
}

View file

@ -1,5 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
{ {
options.custom = with lib; { options.custom = with lib; {
shell = { shell = {

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
tmux tmux
@ -13,5 +12,5 @@
home.directories = [ home.directories = [
".tmux" ".tmux"
]; ];
}; };
} }

View file

@ -1,5 +1,4 @@
{ config, ... }: { config, ... }:
{ {
home.shellAliases = { home.shellAliases = {
z = "zoxide query -i"; z = "zoxide query -i";

View file

@ -1,6 +1,9 @@
{ config, pkgs, ... }: {
config,
{ pkgs,
...
}:
{
programs.ssh = { programs.ssh = {
enable = false; enable = false;
}; };
@ -10,7 +13,7 @@
]; ];
custom.persist = { custom.persist = {
home.directories = [ home.directories = [
".ssh" ".ssh"
]; ];
}; };

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
vim-full vim-full

View file

@ -1,5 +1,9 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
{ {
options.custom = with lib; { options.custom = with lib; {
wm = { wm = {

View file

@ -1,18 +1,19 @@
{ config {
, pkgs config,
, lib pkgs,
, menu lib,
, terminal menu,
, light ? lib.getExe' pkgs.brightnessctl "brightnessctl" terminal,
, playerctl ? lib.getExe' pkgs.playerctl "playerctl" light ? lib.getExe' pkgs.brightnessctl "brightnessctl",
, sound ? "pactl" playerctl ? lib.getExe' pkgs.playerctl "playerctl",
, alt ? "Mod1" sound ? "pactl",
, modifier ? "Mod4" alt ? "Mod1",
, extraWindowOptions ? { } modifier ? "Mod4",
, extraFocusOptions ? { } extraWindowOptions ? { },
, extraModes ? { } extraFocusOptions ? { },
, extraConfig ? "" extraModes ? { },
, workspaces ? [ extraConfig ? "",
workspaces ? [
{ {
ws = 1; ws = 1;
name = "1"; name = "1";
@ -53,17 +54,24 @@
ws = 0; ws = 0;
name = "10"; name = "10";
} }
] ],
, ... ...
}: }:
let let
powerManagementMode = " : Screen [l]ock, [e]xit, [s]uspend, [h]ibernate, [R]eboot, [S]hutdown"; powerManagementMode = " : Screen [l]ock, [e]xit, [s]uspend, [h]ibernate, [R]eboot, [S]hutdown";
resizeMode = " : [h] , [j] , [k] , [l] "; resizeMode = " : [h] , [j] , [k] , [l] ";
# Helpers # Helpers
mapDirection = { prefixKey ? null, leftCmd, downCmd, upCmd, rightCmd }: mapDirection =
with lib.strings; { {
prefixKey ? null,
leftCmd,
downCmd,
upCmd,
rightCmd,
}:
with lib.strings;
{
# Arrow keys # Arrow keys
"${optionalString (prefixKey != null) "${prefixKey}+"}Left" = leftCmd; "${optionalString (prefixKey != null) "${prefixKey}+"}Left" = leftCmd;
"${optionalString (prefixKey != null) "${prefixKey}+"}Down" = downCmd; "${optionalString (prefixKey != null) "${prefixKey}+"}Down" = downCmd;
@ -76,7 +84,11 @@ let
"${optionalString (prefixKey != null) "${prefixKey}+"}l" = rightCmd; "${optionalString (prefixKey != null) "${prefixKey}+"}l" = rightCmd;
}; };
mapDirectionDefault = { prefixKey ? null, prefixCmd }: mapDirectionDefault =
{
prefixKey ? null,
prefixCmd,
}:
(mapDirection { (mapDirection {
inherit prefixKey; inherit prefixKey;
leftCmd = "${prefixCmd} left"; leftCmd = "${prefixCmd} left";
@ -85,21 +97,32 @@ let
rightCmd = "${prefixCmd} right"; rightCmd = "${prefixCmd} right";
}); });
mapWorkspacesStr = with builtins; mapWorkspacesStr =
with builtins;
with lib.strings; with lib.strings;
{ workspaces, prefixKey ? null, prefixCmd }: {
(concatStringsSep "\n" (map workspaces,
({ ws, name }: prefixKey ? null,
'' prefixCmd,
bindsym ${optionalString (prefixKey != null) "${prefixKey}+"}${ }:
toString ws (concatStringsSep "\n" (
} ${prefixCmd} "${name}"'') map (
workspaces)); {
ws,
name,
}:
''bindsym ${
optionalString (prefixKey != null) "${prefixKey}+"
}${toString ws} ${prefixCmd} "${name}"''
) workspaces
));
in in
{ {
inherit modifier terminal; inherit modifier terminal;
helpers = { inherit mapDirection mapDirectionDefault mapWorkspacesStr; }; helpers = {
inherit mapDirection mapDirectionDefault mapWorkspacesStr;
};
config = { config = {
inherit modifier terminal; inherit modifier terminal;
@ -116,7 +139,7 @@ in
"${modifier}+Shift+c" = "reload"; "${modifier}+Shift+c" = "reload";
"${modifier}+Shift+r" = "restart"; "${modifier}+Shift+r" = "restart";
"${modifier}+Shift+q" = "kill"; "${modifier}+Shift+q" = "kill";
"${modifier}+Shift+e" = "exit"; # "${modifier}+Shift+e" = "exit";
"${alt}+F4" = "kill"; "${alt}+F4" = "kill";
"${modifier}+h" = "focus left"; "${modifier}+h" = "focus left";
@ -143,10 +166,10 @@ in
"XF86MonBrightnessUp" = "exec --no-startup-id ${light} s +10%"; "XF86MonBrightnessUp" = "exec --no-startup-id ${light} s +10%";
"XF86MonBrightnessDown" = "exec --no-startup-id ${light} s 10%-"; "XF86MonBrightnessDown" = "exec --no-startup-id ${light} s 10%-";
"XF86AudioPlay" = "exec --no-startup-id ${playerctl} play-pause"; "XF86AudioPlay" = "exec --no-startup-id ${playerctl} play-pause";
"XF86AudioPause" = "exec --no-startup-id ${playerctl} play-pause"; "XF86AudioPause" = "exec --no-startup-id ${playerctl} play-pause";
"XF86AudioNext" = "exec --no-startup-id ${playerctl} next"; "XF86AudioNext" = "exec --no-startup-id ${playerctl} next";
"XF86AudioPrev" = "exec --no-startup-id ${playerctl} previous"; "XF86AudioPrev" = "exec --no-startup-id ${playerctl} previous";
}; };
modes = modes =
@ -157,12 +180,14 @@ in
}; };
in in
{ {
${resizeMode} = (mapDirection { ${resizeMode} =
leftCmd = "resize shrink width 10px or 10ppt"; (mapDirection {
downCmd = "resize grow height 10px or 10ppt"; leftCmd = "resize shrink width 10px or 10ppt";
upCmd = "resize shrink height 10px or 10ppt"; downCmd = "resize grow height 10px or 10ppt";
rightCmd = "resize grow width 10px or 10ppt"; upCmd = "resize shrink height 10px or 10ppt";
}) // exitMode; rightCmd = "resize grow width 10px or 10ppt";
})
// exitMode;
${powerManagementMode} = { ${powerManagementMode} = {
l = "mode default, exec loginctl lock-session"; l = "mode default, exec loginctl lock-session";
e = "mode default, exec loginctl terminate-session $XDG_SESSION_ID"; e = "mode default, exec loginctl terminate-session $XDG_SESSION_ID";
@ -171,7 +196,8 @@ in
"Shift+r" = "mode default, exec systemctl reboot"; "Shift+r" = "mode default, exec systemctl reboot";
"Shift+s" = "mode default, exec systemctl poweroff"; "Shift+s" = "mode default, exec systemctl poweroff";
} // exitMode; } // exitMode;
} // extraModes; }
// extraModes;
workspaceAutoBackAndForth = true; workspaceAutoBackAndForth = true;
workspaceLayout = "tabbed"; workspaceLayout = "tabbed";
@ -182,14 +208,16 @@ in
titlebar = false; titlebar = false;
} // extraWindowOptions; } // extraWindowOptions;
focus = { followMouse = false; } // extraFocusOptions; focus = {
}; followMouse = false;
} // extraFocusOptions;
};
# Until this issue is fixed we need to map workspaces directly to config file # Until this issue is fixed we need to map workspaces directly to config file
# https://github.com/nix-community/home-manager/issues/695 # https://github.com/nix-community/home-manager/issues/695
extraConfig = extraConfig =
let let
workspaceStr = (builtins.concatStringsSep "\n" [ workspaceStr = builtins.concatStringsSep "\n" [
(mapWorkspacesStr { (mapWorkspacesStr {
inherit workspaces; inherit workspaces;
prefixKey = modifier; prefixKey = modifier;
@ -200,7 +228,7 @@ in
prefixKey = "${modifier}+Shift"; prefixKey = "${modifier}+Shift";
prefixCmd = "move container to workspace number"; prefixCmd = "move container to workspace number";
}) })
]); ];
in in
'' ''
${workspaceStr} ${workspaceStr}

View file

@ -1,6 +1,9 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
let let
pactl = lib.getExe' pkgs.pulseaudio "pactl"; pactl = lib.getExe' pkgs.pulseaudio "pactl";
maim = lib.getExe' pkgs.maim "maim"; maim = lib.getExe' pkgs.maim "maim";
@ -31,22 +34,23 @@ in
xsession.windowManager.i3 = { xsession.windowManager.i3 = {
enable = true; enable = true;
extraConfig = commonOptions.extraConfig; extraConfig = commonOptions.extraConfig;
config = lib.mkMerge ([ config = lib.mkMerge [
commonOptions.config commonOptions.config
{ {
# modifier = "Mod4"; # modifier = "Mod4";
# terminal = "kitty"; # terminal = "kitty";
keybindings = { keybindings = {
"XF86AudioRaiseVolume" = "exec --no-startup-id ${pactl} set-sink-volume @DEFAULT_SINK@ +1%"; "${commonOptions.modifier}+Shift+e" = "exec \"i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'\"";
"XF86AudioLowerVolume" = "exec --no-startup-id ${pactl} set-sink-volume @DEFAULT_SINK@ -1%"; "XF86AudioRaiseVolume" = "exec --no-startup-id ${pactl} set-sink-volume @DEFAULT_SINK@ +1%";
"XF86AudioMute" = "exec --no-startup-id ${pactl} set-sink-mute @DEFAULT_SINK@ toggle"; "XF86AudioLowerVolume" = "exec --no-startup-id ${pactl} set-sink-volume @DEFAULT_SINK@ -1%";
"XF86AudioMicMute" = "exec --no-startup-id ${pactl} set-source-mute @DEFAULT_SOURCE@ toggle"; "XF86AudioMute" = "exec --no-startup-id ${pactl} set-sink-mute @DEFAULT_SINK@ toggle";
"${commonOptions.modifier}+o" = "exec --no-startup-id ${maim} -s ~/pictures/screenshots/$(date +%Y-%m-%d-%H-%M-%S).png"; "XF86AudioMicMute" = "exec --no-startup-id ${pactl} set-source-mute @DEFAULT_SOURCE@ toggle";
"${commonOptions.modifier}+o" = "exec --no-startup-id ${maim} -s ~/pictures/screenshots/$(date +%Y-%m-%d-%H-%M-%S).png";
"${commonOptions.modifier}+Shift+o" = "exec --no-startup-id ${maim} -s | ${clipboard-copy} -selection clipboard -t image/png"; "${commonOptions.modifier}+Shift+o" = "exec --no-startup-id ${maim} -s | ${clipboard-copy} -selection clipboard -t image/png";
"PRINT" = "exec --no-startup-id ${maim} -s | ${clipboard-copy} -selection clipboard -t image/png"; "PRINT" = "exec --no-startup-id ${maim} -s | ${clipboard-copy} -selection clipboard -t image/png";
}; };
} }
]); ];
}; };
stylix.targets.i3.enable = true; stylix.targets.i3.enable = true;
}; };

View file

@ -1,5 +1,9 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
let let
swayosd = lib.getExe' config.services.swayosd.package "swayosd-client"; swayosd = lib.getExe' config.services.swayosd.package "swayosd-client";
pactl = lib.getExe' pkgs.pulseaudio "pactl"; pactl = lib.getExe' pkgs.pulseaudio "pactl";
@ -32,20 +36,21 @@ in
wayland.windowManager.sway = { wayland.windowManager.sway = {
enable = true; enable = true;
extraConfig = commonOptions.extraConfig; extraConfig = commonOptions.extraConfig;
config = lib.mkMerge ([ config = lib.mkMerge [
commonOptions.config commonOptions.config
{ {
keybindings = { keybindings = {
"XF86AudioRaiseVolume" = "exec --no-startup-id '${swayosd} --output-volume=raise'"; "${commonOptions.modifier}+Shift+e" = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'";
"XF86AudioLowerVolume" = "exec --no-startup-id '${swayosd} --output-volume=lower'"; "XF86AudioRaiseVolume" = "exec --no-startup-id '${swayosd} --output-volume=raise'";
"XF86AudioMute" = "exec --no-startup-id '${swayosd} --output-volume=mute-toggle"; "XF86AudioLowerVolume" = "exec --no-startup-id '${swayosd} --output-volume=lower'";
"XF86AudioMicMute" = "exec --no-startup-id '${pactl} set-source-mute @DEFAULT_SOURCE@ toggle'"; "XF86AudioMute" = "exec --no-startup-id '${swayosd} --output-volume=mute-toggle";
"${commonOptions.modifier}+o" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" ~/pictures/screenshots/$(date +%Y-%m-%d-%H-%M-%S).png"; "XF86AudioMicMute" = "exec --no-startup-id '${pactl} set-source-mute @DEFAULT_SOURCE@ toggle'";
"${commonOptions.modifier}+o" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" ~/pictures/screenshots/$(date +%Y-%m-%d-%H-%M-%S).png";
"${commonOptions.modifier}+Shift+o" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" -t png - | ${clipboard-copy}"; "${commonOptions.modifier}+Shift+o" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" -t png - | ${clipboard-copy}";
"PRINT" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" -t png - | ${clipboard-copy}"; "PRINT" = "exec --no-startup-id ${grim} -g \"\$(${slurp})\" -t png - | ${clipboard-copy}";
}; };
} }
]); ];
}; };
stylix.targets.sway.enable = true; stylix.targets.sway.enable = true;
}; };

View file

@ -1,7 +1,13 @@
{ config, lib, pkgs, inputs, user, ... }:
{ {
imports = []; config,
lib,
pkgs,
inputs,
user,
...
}:
{
imports = [ ];
networking.hostName = "pickwick"; networking.hostName = "pickwick";
networking.hostId = builtins.substring 0 8 (builtins.hashString "md5" config.networking.hostName); networking.hostId = builtins.substring 0 8 (builtins.hashString "md5" config.networking.hostName);
@ -44,14 +50,13 @@
}; };
gnome = { gnome = {
enable = true; enable = true;
stylix = true; stylix = true;
}; };
kde = { kde = {
enable = false; enable = false;
stylix = true; stylix = true;
}; };
}; };
system.stateVersion = "24.11"; system.stateVersion = "24.11";
} }

View file

@ -1,7 +1,7 @@
{ {
device ? throw "Set this to your disk device, e.g. /dev/sda", device ? throw "Set this to your disk device, e.g. /dev/sda",
... ...
}: }:
{ {
disko.devices = { disko.devices = {
nodev = { nodev = {
@ -47,26 +47,32 @@
"defaults" "defaults"
"umask=0077" "umask=0077"
]; ];
extraArgs = [ "-n" "BOOT" ]; extraArgs = [
"-n"
"BOOT"
];
}; };
}; };
swap = { swap = {
size = "108G"; size = "108G";
content = { content = {
type = "swap"; type = "swap";
discardPolicy = "both"; discardPolicy = "both";
resumeDevice = true; resumeDevice = true;
extraArgs = [ "--label" "SWAP" ]; extraArgs = [
}; "--label"
}; "SWAP"
zfs = { ];
};
};
zfs = {
size = "100%"; size = "100%";
content = { content = {
type = "zfs"; type = "zfs";
pool = "zroot"; pool = "zroot";
}; };
}; };
}; };
}; };
}; };
zpool = { zpool = {
@ -81,8 +87,8 @@
rootFsOptions = { rootFsOptions = {
compression = "zstd"; compression = "zstd";
acltype = "posixacl"; acltype = "posixacl";
xattr = "sa"; xattr = "sa";
mountpoint = "none"; mountpoint = "none";
encryption = "aes-256-gcm"; encryption = "aes-256-gcm";
keyformat = "passphrase"; keyformat = "passphrase";
keylocation = "prompt"; keylocation = "prompt";
@ -105,7 +111,7 @@
persist = { persist = {
type = "zfs_fs"; type = "zfs_fs";
options.mountpoint = "legacy"; options.mountpoint = "legacy";
mountpoint = "/persist"; mountpoint = "/persist";
}; };
tmp = { tmp = {
type = "zfs_fs"; type = "zfs_fs";

View file

@ -1,16 +1,29 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ inputs, config, lib, pkgs, modulesPath, ... }:
{ {
imports = [ inputs,
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
(import ./disko.nix { device = "/dev/nvme0n1"; }) (import ./disko.nix { device = "/dev/nvme0n1"; })
inputs.nixos-hardware.nixosModules.framework-13-7040-amd inputs.nixos-hardware.nixosModules.framework-13-7040-amd
]; ];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "usbhid" "sd_mod" ]; boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"thunderbolt"
"usb_storage"
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = [ "dm-snapshot" ]; boot.initrd.kernelModules = [ "dm-snapshot" ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];

View file

@ -1,6 +1,11 @@
{ config, pkgs, inputs, lib, ... }: {
config,
{ pkgs,
inputs,
lib,
...
}:
{
home.packages = with pkgs; [ home.packages = with pkgs; [
fw-ectool fw-ectool
]; ];

View file

@ -1,62 +1,67 @@
{ lib, pkgs, ... }: {
lib,
pkgs,
...
}:
lib.extend (
_: libprev: {
custom = rec {
# taken from https://github.com/iynaix/dotfiles/blob/main/lib.nix
# writeShellApplication with support for completions
writeShellApplicationCompletions =
{
name,
bashCompletion ? null,
zshCompletion ? null,
fishCompletion ? null,
...
}@shellArgs:
let
inherit (pkgs) writeShellApplication writeTextFile symlinkJoin;
# get the needed arguments for writeShellApplication
app = writeShellApplication (lib.intersectAttrs (lib.functionArgs writeShellApplication) shellArgs);
completions =
lib.optional (bashCompletion != null) (writeTextFile {
name = "${name}.bash";
destination = "/share/bash-completion/completions/${name}.bash";
text = bashCompletion;
})
++ lib.optional (zshCompletion != null) (writeTextFile {
name = "${name}.zsh";
destination = "/share/zsh/site-functions/_${name}";
text = zshCompletion;
})
++ lib.optional (fishCompletion != null) (writeTextFile {
name = "${name}.fish";
destination = "/share/fish/vendor_completions.d/${name}.fish";
text = fishCompletion;
});
in
if lib.length completions == 0 then
app
else
symlinkJoin {
inherit name;
inherit (app) meta;
paths = [ app ] ++ completions;
};
lib.extend (_: libprev: { # taken from https://github.com/iynaix/dotfiles/blob/main/lib.nix
custom = rec { # produces an attrset shell package with completions from either a string / writeShellApplication attrset / package
# taken from https://github.com/iynaix/dotfiles/blob/main/lib.nix mkShellPackages = lib.mapAttrs (
# writeShellApplication with support for completions name: value:
writeShellApplicationCompletions = if lib.isString value then
{ pkgs.writeShellApplication {
name, inherit name;
bashCompletion ? null, text = value;
zshCompletion ? null, }
fishCompletion ? null, # packages
... else if lib.isDerivation value then
}@shellArgs: value
let # attrs to pass to writeShellApplication
inherit (pkgs) writeShellApplication writeTextFile symlinkJoin; else
# get the needed arguments for writeShellApplication writeShellApplicationCompletions (value // { inherit name; })
app = writeShellApplication (lib.intersectAttrs (lib.functionArgs writeShellApplication) shellArgs); );
completions = };
lib.optional (bashCompletion != null) (writeTextFile { }
name = "${name}.bash"; )
destination = "/share/bash-completion/completions/${name}.bash";
text = bashCompletion;
})
++ lib.optional (zshCompletion != null) (writeTextFile {
name = "${name}.zsh";
destination = "/share/zsh/site-functions/_${name}";
text = zshCompletion;
})
++ lib.optional (fishCompletion != null) (writeTextFile {
name = "${name}.fish";
destination = "/share/fish/vendor_completions.d/${name}.fish";
text = fishCompletion;
});
in
if lib.length completions == 0 then
app
else
symlinkJoin {
inherit name;
inherit (app) meta;
paths = [ app ] ++ completions;
};
# taken from https://github.com/iynaix/dotfiles/blob/main/lib.nix
# produces an attrset shell package with completions from either a string / writeShellApplication attrset / package
mkShellPackages = lib.mapAttrs (
name: value:
if lib.isString value then
pkgs.writeShellApplication {
inherit name;
text = value;
}
# packages
else if lib.isDerivation value then
value
# attrs to pass to writeShellApplication
else
writeShellApplicationCompletions (value // { inherit name; })
);
};
})

View file

@ -1,5 +1,9 @@
{ config, pkgs, user, ... }: {
config,
pkgs,
user,
...
}:
{ {
programs._1password.enable = true; programs._1password.enable = true;
programs._1password-gui = { programs._1password-gui = {

View file

@ -1,5 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
{ {
options.custom = with lib; { options.custom = with lib; {
bluetooth = { bluetooth = {

View file

@ -4,7 +4,6 @@
pkgs, pkgs,
... ...
}: }:
{ {
imports = [ imports = [
./1password.nix ./1password.nix
@ -60,20 +59,23 @@
}; };
}; };
config = { config = {
environment = { environment = {
systemPackages = with pkgs; [ systemPackages =
curl with pkgs;
eza [
neovim curl
yazi eza
ripgrep neovim
htop yazi
vim ripgrep
wget htop
htop-vim vim
keyd wget
] ++ (lib.attrValues config.custom.shell.packages); htop-vim
keyd
]
++ (lib.attrValues config.custom.shell.packages);
}; };
}; };
} }

View file

@ -1,5 +1,4 @@
{ config, ...}: { config, ... }:
{ {
services = { services = {
xserver = { xserver = {
@ -26,4 +25,10 @@
}; };
security.polkit.enable = true; security.polkit.enable = true;
custom.persist = {
root.directories = [
"/var/lib/AccountsService/users"
];
};
} }

View file

@ -1,5 +1,9 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
{ {
options.custom = with lib; { options.custom = with lib; {
fingerprint = { fingerprint = {
@ -11,6 +15,7 @@
services.fprintd.enable = true; services.fprintd.enable = true;
security.pam.services.login.fprintAuth = false; security.pam.services.login.fprintAuth = false;
security.pam.services.sudo.fprintAuth = false; security.pam.services.sudo.fprintAuth = false;
security.pam.services.i3lock.fprintAuth = false;
custom.persist = { custom.persist = {
root.directories = [ root.directories = [
"/var/lib/fprint" "/var/lib/fprint"

View file

@ -1,5 +1,9 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
{ {
options.custom = with lib; { options.custom = with lib; {
nerdfonts = { nerdfonts = {
@ -7,22 +11,22 @@
type = types.package; type = types.package;
default = pkgs.nerdfonts.override { default = pkgs.nerdfonts.override {
fonts = config.custom.nerdfonts.fonts; fonts = config.custom.nerdfonts.fonts;
}; };
}; };
fonts = mkOption { fonts = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
description = "Nerdfonts package"; description = "Nerdfonts package";
default = [ default = [
"FiraCode" "FiraCode"
"DroidSansMono" "DroidSansMono"
"SourceCodePro" "SourceCodePro"
"SpaceMono" "SpaceMono"
"Iosevka" "Iosevka"
"IosevkaTerm" "IosevkaTerm"
"Inconsolata" "Inconsolata"
"InconsolataGo" "InconsolataGo"
"UbuntuMono" "UbuntuMono"
]; ];
}; };
}; };
}; };

View file

@ -1,5 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
{ {
options.custom = with lib; { options.custom = with lib; {
gnome = { gnome = {
@ -19,7 +23,6 @@
cheese cheese
epiphany epiphany
simple-scan simple-scan
yelp
evince evince
geary geary
gnome-tour gnome-tour
@ -27,6 +30,12 @@
gnome-music gnome-music
gnome-maps gnome-maps
gnome-disk-utility gnome-disk-utility
gnome-characters
tali # poker game
iagno # go game
hitori # sudoku game
atomix # puzzle game
yelp # Help view
]; ];
}) })
{ {

View file

@ -86,7 +86,7 @@ in
directories = [ directories = [
"/var/log" # systemd journal is stored in /var/log/journal "/var/log" # systemd journal is stored in /var/log/journal
"/var/lib/nixos" # for persisting user uids and gids "/var/lib/nixos" # for persisting user uids and gids
"/etc/NetworkManager/system-connections" "/etc/NetworkManager/system-connections"
] ++ cfg.root.directories; ] ++ cfg.root.directories;
users.${user} = { users.${user} = {
@ -95,8 +95,8 @@ in
[ [
".cache/dconf" ".cache/dconf"
".config/dconf" ".config/dconf"
] ]
++ cfg.home.directories ++ cfg.home.directories
++ hmPersistCfg.home.directories ++ hmPersistCfg.home.directories
); );
}; };

View file

@ -1,5 +1,9 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
{ {
options.custom = with lib; { options.custom = with lib; {
kde = { kde = {

View file

@ -1,10 +1,13 @@
{ config, lib, ... }: {
config,
lib,
...
}:
let let
commonSettings = { commonSettings = {
main = { main = {
capslock = "layer(capslock)"; capslock = "layer(capslock)";
insert = "S-insert"; insert = "S-insert";
}; };
meta = { meta = {
w = "macro(C-w)"; w = "macro(C-w)";
@ -14,7 +17,7 @@ let
}; };
in in
{ {
users.groups.keyd = {}; users.groups.keyd = { };
services.keyd = { services.keyd = {
enable = true; enable = true;
keyboards = { keyboards = {
@ -24,39 +27,39 @@ in
}; };
framework = { framework = {
ids = [ "0001:0001:a38e6885" ]; ids = [ "0001:0001:a38e6885" ];
settings = lib.mkMerge ([ settings = lib.mkMerge [
commonSettings commonSettings
{ {
main = { main = {
leftalt = "layer(meta)"; leftalt = "layer(meta)";
leftmeta = "layer(alt)"; leftmeta = "layer(alt)";
}; };
} }
]); ];
}; };
normal = { normal = {
ids = [ "413c:2107:eb8bfad1" ]; ids = [ "413c:2107:eb8bfad1" ];
settings = lib.mkMerge ([ settings = lib.mkMerge [
commonSettings commonSettings
{ {
main = { main = {
leftalt = "layer(meta)"; leftalt = "layer(meta)";
leftmeta = "layer(alt)"; leftmeta = "layer(alt)";
}; };
} }
]); ];
}; };
}; };
}; };
systemd.services.keyd.serviceConfig.CapabilityBoundingSet = [ systemd.services.keyd.serviceConfig.CapabilityBoundingSet = [
"CAP_SETGID" "CAP_SETGID"
]; ];
environment.etc."libinput/local-overrides.quirks".text = lib.mkIf config.custom.touchpad.enable '' environment.etc."libinput/local-overrides.quirks".text = lib.mkIf config.custom.touchpad.enable ''
[Serial Keyboards] [Serial Keyboards]
MatchUdevType=keyboard MatchUdevType=keyboard
MatchName=keyd virtual keyboard MatchName=keyd virtual keyboard
AttrKeyboardIntegration=internal AttrKeyboardIntegration=internal
''; '';
} }

View file

@ -37,19 +37,18 @@ in
"D! /nix/var/nix/profiles/per-user/root 1755 root root 1d" "D! /nix/var/nix/profiles/per-user/root 1755 root root 1d"
]; ];
custom.shell.packages = custom.shell.packages = {
{ # list all installed packages
# list all installed packages nix-list-packages = {
nix-list-packages = { text =
text = let
let allPkgs = map (p: p.name) (
allPkgs = map (p: p.name) ( config.environment.systemPackages ++ config.users.users.${user}.packages ++ config.hm.home.packages
config.environment.systemPackages ++ config.users.users.${user}.packages ++ config.hm.home.packages );
); in
in ''sort -ui <<< "${lib.concatLines allPkgs}"'';
''sort -ui <<< "${lib.concatLines allPkgs}"'';
};
}; };
};
nix = nix =
let let

View file

@ -1,5 +1,8 @@
{ pkgs, config, ... }: {
pkgs,
config,
...
}:
{ {
stylix = { stylix = {
enable = true; enable = true;
@ -12,7 +15,7 @@
serif = config.stylix.fonts.sansSerif; serif = config.stylix.fonts.sansSerif;
sansSerif = { sansSerif = {
package = pkgs.dejavu_fonts; package = pkgs.dejavu_fonts;
name = "DejaVu Sans"; name = "DejaVu Sans";
}; };
# sansSerif = { # sansSerif = {
# package = config.custom.nerdfonts.package; # package = config.custom.nerdfonts.package;

View file

@ -1,7 +1,10 @@
{ pkgs, lib, config, ... }:
{ {
pkgs,
lib,
config,
...
}:
{
options.custom = with lib; { options.custom = with lib; {
touchpad = { touchpad = {
enable = mkEnableOption "Enable touchpad"; enable = mkEnableOption "Enable touchpad";

View file

@ -4,7 +4,6 @@
user, user,
... ...
}: }:
{ {
config = lib.mkMerge [ config = lib.mkMerge [
{ {

View file

@ -1,5 +1,9 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
{ {
options.custom = with lib; { options.custom = with lib; {
wm = { wm = {
@ -20,10 +24,12 @@
dmenu dmenu
i3status i3status
i3lock i3lock
i3blocks
]; ];
}; };
}; };
programs.xss-lock = {
enable = true;
};
hm.custom.wm.i3.enable = true; hm.custom.wm.i3.enable = true;
hm.custom.i3status-rust.enable = true; hm.custom.i3status-rust.enable = true;
}; };

View file

@ -1,5 +1,9 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
{ {
options.custom = with lib; { options.custom = with lib; {
wm = { wm = {

View file

@ -1,13 +1,12 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
xdg.portal = { xdg.portal = {
enable = true; enable = true;
# xdgOpenUsePortal = true; # xdgOpenUsePortal = true;
wlr.enable = true; wlr.enable = true;
extraPortals = with pkgs; [ extraPortals = with pkgs; [
# xdg-desktop-portal-kde # xdg-desktop-portal-kde
# xdg-desktop-portal-gnome # xdg-desktop-portal-gnome
xdg-desktop-portal-gtk xdg-desktop-portal-gtk
]; ];
# config = { # config = {

View file

@ -1,11 +1,15 @@
{ config, pkgs, lib, ... }: {
config,
pkgs,
lib,
...
}:
{ {
boot.supportedFilesystems.zfs = true; boot.supportedFilesystems.zfs = true;
boot.zfs = { boot.zfs = {
devNodes ="/dev/disk/by-partuuid"; devNodes = "/dev/disk/by-partuuid";
package = pkgs.zfs_unstable; package = pkgs.zfs_unstable;
requestEncryptionCredentials = true; requestEncryptionCredentials = true;
}; };
# boot.kernelPackages = # boot.kernelPackages =
# assert lib.assertMsg (lib.versionOlder pkgs.zfs_unstable.version "2.3") # assert lib.assertMsg (lib.versionOlder pkgs.zfs_unstable.version "2.3")