feat: jenkins + darwin (and linting)

This commit is contained in:
Swarsel 2024-10-22 18:10:34 +02:00
parent d2c8805e5b
commit 6338497d5f
Signed by: swarsel
GPG key ID: 26A54C31F2A4FD84
42 changed files with 841 additions and 602 deletions

File diff suppressed because it is too large Load diff

21
flake.lock generated
View file

@ -534,6 +534,26 @@
"type": "github" "type": "github"
} }
}, },
"nix-darwin": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1729579044,
"narHash": "sha256-0kEUVl5s8LHbK4/xEePflsdYVwG+RRFSIofSvITYmIU=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "64d9d1ae25215c274c37e3e4016977a6779cf0d3",
"type": "github"
},
"original": {
"owner": "lnl7",
"repo": "nix-darwin",
"type": "github"
}
},
"nix-filter": { "nix-filter": {
"locked": { "locked": {
"lastModified": 1710156097, "lastModified": 1710156097,
@ -1069,6 +1089,7 @@
"impermanence": "impermanence", "impermanence": "impermanence",
"lanzaboote": "lanzaboote", "lanzaboote": "lanzaboote",
"nix-alien": "nix-alien", "nix-alien": "nix-alien",
"nix-darwin": "nix-darwin",
"nix-index-database": "nix-index-database_2", "nix-index-database": "nix-index-database_2",
"nix-on-droid": "nix-on-droid", "nix-on-droid": "nix-on-droid",
"nixgl": "nixgl", "nixgl": "nixgl",

110
flake.nix
View file

@ -14,90 +14,96 @@
}; };
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";
systems.url = "github:nix-systems/default-linux"; systems.url = "github:nix-systems/default-linux";
# user-level configuration # user-level configuration
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# overlay to access bleeding edge emacs # overlay to access bleeding edge emacs
emacs-overlay = { emacs-overlay = {
url = "github:nix-community/emacs-overlay"; url = "github:nix-community/emacs-overlay";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# nix user repository # nix user repository
# i use this mainly to not have to build all firefox extensions # i use this mainly to not have to build all firefox extensions
# myself as well as for the emacs-init package (tbd) # myself as well as for the emacs-init package (tbd)
nur.url = "github:nix-community/NUR"; nur.url = "github:nix-community/NUR";
# provides GL to non-NixOS hosts # provides GL to non-NixOS hosts
nixgl.url = "github:guibou/nixGL"; nixgl.url = "github:guibou/nixGL";
# manages all theming using Home-Manager # manages all theming using Home-Manager
stylix.url = "github:danth/stylix"; stylix.url = "github:danth/stylix";
# nix secrets management # nix secrets management
sops-nix.url = "github:Mic92/sops-nix"; sops-nix.url = "github:Mic92/sops-nix";
# enable secure boot on NixOS # enable secure boot on NixOS
lanzaboote.url = "github:nix-community/lanzaboote"; lanzaboote.url = "github:nix-community/lanzaboote";
# nix for android # nix for android
nix-on-droid = { nix-on-droid = {
url = "github:nix-community/nix-on-droid/release-24.05"; url = "github:nix-community/nix-on-droid/release-24.05";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# generate NixOS images # generate NixOS images
nixos-generators = { nixos-generators = {
url = "github:nix-community/nixos-generators"; url = "github:nix-community/nixos-generators";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# hardware quirks on nix # hardware quirks on nix
nixos-hardware = { nixos-hardware = {
url = "github:NixOS/nixos-hardware/master"; url = "github:NixOS/nixos-hardware/master";
}; };
# dynamic library loading # dynamic library loading
nix-alien = { nix-alien = {
url = "github:thiagokokada/nix-alien"; url = "github:thiagokokada/nix-alien";
}; };
# automatic nintendo switch payload injection # automatic nintendo switch payload injection
nswitch-rcm-nix = { nswitch-rcm-nix = {
url = "github:Swarsel/nswitch-rcm-nix"; url = "github:Swarsel/nswitch-rcm-nix";
}; };
# weekly updated nix-index database # weekly updated nix-index database
nix-index-database = { nix-index-database = {
url = "github:nix-community/nix-index-database"; url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
disko = { disko = {
url = "github:nix-community/disko"; url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
impermanence.url = "github:nix-community/impermanence"; impermanence.url = "github:nix-community/impermanence";
zjstatus = { zjstatus = {
url = "github:dj95/zjstatus"; url = "github:dj95/zjstatus";
}; };
fw-fanctrl = { fw-fanctrl = {
url = "github:TamtamHero/fw-fanctrl/packaging/nix"; url = "github:TamtamHero/fw-fanctrl/packaging/nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nix-darwin = {
url = "github:lnl7/nix-darwin";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = outputs =
@ -105,13 +111,14 @@
, nixpkgs , nixpkgs
, nixpkgs-stable , nixpkgs-stable
, home-manager , home-manager
, nix-darwin
, systems , systems
, ... , ...
}: }:
let let
inherit (self) outputs; inherit (self) outputs;
lib = nixpkgs.lib // home-manager.lib; lib = nixpkgs.lib // home-manager.lib;
forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system}); forEachSystem = f: lib.genAttrs (import systems) (system: f pkgsFor.${system});
pkgsFor = lib.genAttrs (import systems) ( pkgsFor = lib.genAttrs (import systems) (
system: system:
@ -120,7 +127,7 @@
config.allowUnfree = true; config.allowUnfree = true;
} }
); );
# NixOS modules that can only be used on NixOS systems # NixOS modules that can only be used on NixOS systems
nixModules = [ nixModules = [
inputs.stylix.nixosModules.stylix inputs.stylix.nixosModules.stylix
@ -131,27 +138,27 @@
inputs.nswitch-rcm-nix.nixosModules.nswitch-rcm inputs.nswitch-rcm-nix.nixosModules.nswitch-rcm
./profiles/common/nixos ./profiles/common/nixos
]; ];
# Home-Manager modules wanted on non-NixOS systems # Home-Manager modules wanted on non-NixOS systems
homeModules = [ homeModules = [
inputs.stylix.homeManagerModules.stylix inputs.stylix.homeManagerModules.stylix
]; ];
# Home-Manager modules wanted on both NixOS and non-NixOS systems # Home-Manager modules wanted on both NixOS and non-NixOS systems
mixedModules = [ mixedModules = [
inputs.sops-nix.homeManagerModules.sops inputs.sops-nix.homeManagerModules.sops
inputs.nix-index-database.hmModules.nix-index inputs.nix-index-database.hmModules.nix-index
./profiles/common/home ./profiles/common/home
]; ];
in in
{ {
inherit lib; inherit lib;
inherit mixedModules; inherit mixedModules;
nixosModules = import ./modules/nixos; nixosModules = import ./modules/nixos;
homeManagerModules = import ./modules/home; homeManagerModules = import ./modules/home;
packages = forEachSystem (pkgs: import ./pkgs { inherit pkgs; }); packages = forEachSystem (pkgs: import ./pkgs { inherit pkgs; });
devShells = forEachSystem devShells = forEachSystem
(pkgs: (pkgs:
@ -171,7 +178,7 @@
inputs.emacs-overlay.overlay inputs.emacs-overlay.overlay
inputs.nixgl.overlay inputs.nixgl.overlay
]; ];
# NixOS setups - run home-manager as a NixOS module for better compatibility # NixOS setups - run home-manager as a NixOS module for better compatibility
# another benefit - full rebuild on nixos-rebuild switch # another benefit - full rebuild on nixos-rebuild switch
# run rebuild using `nswitch` # run rebuild using `nswitch`
@ -180,8 +187,8 @@
# Make sure to move hardware-configuration to the appropriate location, by default it is found in /etc/nixos/. # Make sure to move hardware-configuration to the appropriate location, by default it is found in /etc/nixos/.
nixosConfigurations = { nixosConfigurations = {
sandbox = nixpkgs.lib.nixosSystem { sandbox = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; }; specialArgs = { inherit inputs; };
modules = [ modules = [
@ -191,7 +198,7 @@
./profiles/sandbox/nixos.nix ./profiles/sandbox/nixos.nix
]; ];
}; };
threed = nixpkgs.lib.nixosSystem { threed = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; }; specialArgs = { inherit inputs; };
modules = nixModules ++ [ modules = nixModules ++ [
@ -205,28 +212,28 @@
} }
]; ];
}; };
fourside = lib.nixosSystem { fourside = lib.nixosSystem {
specialArgs = { inherit inputs outputs; }; specialArgs = { inherit inputs outputs; };
modules = nixModules ++ [ modules = nixModules ++ [
./profiles/fourside ./profiles/fourside
]; ];
}; };
nbl-imba-2 = lib.nixosSystem { nbl-imba-2 = lib.nixosSystem {
specialArgs = { inherit inputs outputs; }; specialArgs = { inherit inputs outputs; };
modules = nixModules ++ [ modules = nixModules ++ [
./profiles/nbl-imba-2 ./profiles/nbl-imba-2
]; ];
}; };
winters = lib.nixosSystem { winters = lib.nixosSystem {
specialArgs = { inherit inputs outputs; }; specialArgs = { inherit inputs outputs; };
modules = [ modules = [
./profiles/server/winters ./profiles/server/winters
]; ];
}; };
#ovm swarsel #ovm swarsel
sync = nixpkgs.lib.nixosSystem { sync = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; }; specialArgs = { inherit inputs; };
@ -235,7 +242,7 @@
./profiles/remote/oracle/sync/nixos.nix ./profiles/remote/oracle/sync/nixos.nix
]; ];
}; };
#ovm swarsel #ovm swarsel
swatrix = nixpkgs.lib.nixosSystem { swatrix = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; }; specialArgs = { inherit inputs; };
@ -250,26 +257,37 @@
# run rebuild using `hmswitch` # run rebuild using `hmswitch`
homeConfigurations = { homeConfigurations = {
"swarsel@home-manager" = inputs.home-manager.lib.homeManagerConfiguration { "swarsel@home-manager" = inputs.home-manager.lib.homeManagerConfiguration {
pkgs = pkgsFor.x86_64-linux; pkgs = pkgsFor.x86_64-linux;
extraSpecialArgs = { inherit inputs outputs; }; extraSpecialArgs = { inherit inputs outputs; };
modules = homeModules ++ mixedModules ++ [ modules = homeModules ++ mixedModules ++ [
./profiles/home-manager ./profiles/home-manager
];
};
};
darwinConfigurations = {
"nbm-imba-166" = inputs.nix-darwin.lib.darwinSystem {
specialArgs = { inherit inputs outputs; };
modules = [
./profiles/nbm-imba-166
]; ];
}; };
}; };
nixOnDroidConfigurations = { nixOnDroidConfigurations = {
mysticant = inputs.nix-on-droid.lib.nixOnDroidConfiguration { mysticant = inputs.nix-on-droid.lib.nixOnDroidConfiguration {
pkgs = pkgsFor.aarch64-linux; pkgs = pkgsFor.aarch64-linux;
modules = [ modules = [
./profiles/mysticant ./profiles/mysticant
]; ];
}; };
}; };
}; };

4
modules/home/darwin.nix Normal file
View file

@ -0,0 +1,4 @@
{ lib, config, ... }:
{
options.swarselsystems.isDarwin = lib.mkEnableOption "darwin host";
}

View file

@ -4,6 +4,7 @@
monitors = import ./monitors.nix; monitors = import ./monitors.nix;
input = import ./input.nix; input = import ./input.nix;
nixos = import ./nixos.nix; nixos = import ./nixos.nix;
darwin = import ./darwin.nix;
waybar = import ./waybar.nix; waybar = import ./waybar.nix;
startup = import ./startup.nix; startup = import ./startup.nix;
wallpaper = import ./wallpaper.nix; wallpaper = import ./wallpaper.nix;

View file

@ -1,4 +1,4 @@
{ lib, config, ... }: { lib, ... }:
let let
inherit (lib) mkOption types; inherit (lib) mkOption types;
in in

View file

@ -23,4 +23,5 @@ in
options.swarselsystems.server.syncthing = lib.mkEnableOption "enable syncthing on server"; options.swarselsystems.server.syncthing = lib.mkEnableOption "enable syncthing on server";
options.swarselsystems.server.restic = lib.mkEnableOption "enable restic backups on server"; options.swarselsystems.server.restic = lib.mkEnableOption "enable restic backups on server";
options.swarselsystems.server.monitoring = lib.mkEnableOption "enable monitoring on server"; options.swarselsystems.server.monitoring = lib.mkEnableOption "enable monitoring on server";
options.swarselsystems.server.jenkins = lib.mkEnableOption "enable jenkins on server";
} }

View file

@ -1,6 +1,6 @@
{ inputs, ... }: { { inputs, ... }: {
additions = final: _prev: import ../pkgs { pkgs = final; }; additions = final: _prev: import ../pkgs { pkgs = final; };
modifications = final: _prev: { modifications = _: _prev: {
vesktop = _prev.vesktop.override { vesktop = _prev.vesktop.override {
withSystemVencord = true; withSystemVencord = true;
}; };
@ -41,7 +41,7 @@
}; };
}; };
zjstatus = final: _prev: { zjstatus = _: _prev: {
zjstatus = inputs.zjstatus.packages.${_prev.system}.default; zjstatus = inputs.zjstatus.packages.${_prev.system}.default;
}; };

View file

@ -1,7 +0,0 @@
{ writeShellApplication, kitty, element-desktop-wayland, discord, spotify-player, sway, jq }:
writeShellApplication {
name = "swarselcheck";
runtimeInputs = [ jq ];
text = builtins.readFile ../../scripts/check.sh;
}

View file

@ -1,4 +1,4 @@
{ writeShellApplication, sway }: { writeShellApplication }:
writeShellApplication { writeShellApplication {
name = "fs-diff"; name = "fs-diff";

View file

@ -1,7 +0,0 @@
{ writeShellApplication, libnotify, pass, fuzzel, wtype }:
writeShellApplication {
name = "pass-fuzzel-otp";
runtimeInputs = [ fuzzel (pass.withExtensions (exts: [ exts.pass-otp ])) ];
text = builtins.readFile ../../scripts/pass-fuzzel-otp.sh;
}

View file

@ -1,4 +1,4 @@
{ writeShellApplication, kitty, element-desktop-wayland, vesktop, spotify-player, sway, jq }: { writeShellApplication, kitty, element-desktop-wayland, vesktop, spotify-player, jq }:
writeShellApplication { writeShellApplication {
name = "swarselcheck"; name = "swarselcheck";

View file

@ -1,7 +1,7 @@
{ lib, config, pkgs, ... }: { lib, config, pkgs, ... }:
{ {
stylix = lib.mkIf (!config.swarselsystems.isNixos) { stylix = lib.mkIf (!config.swarselsystems.isNixos) {
enable = true; enable = true;
base16Scheme = ../../../wallpaper/swarsel.yaml; base16Scheme = ../../../wallpaper/swarsel.yaml;
# base16Scheme = "${pkgs.base16-schemes}/share/themes/shapeshifter.yaml"; # base16Scheme = "${pkgs.base16-schemes}/share/themes/shapeshifter.yaml";
@ -25,7 +25,7 @@
# name = "FiraCode Nerd Font Propo"; # name = "FiraCode Nerd Font Propo";
# name = "Montserrat"; # name = "Montserrat";
}; };
sansSerif = { sansSerif = {
# package = (pkgs.nerdfonts.override { fonts = [ "FiraMono" "FiraCode"]; }); # package = (pkgs.nerdfonts.override { fonts = [ "FiraMono" "FiraCode"]; });
package = pkgs.cantarell-fonts; package = pkgs.cantarell-fonts;
@ -34,18 +34,18 @@
# name = "FiraCode Nerd Font Propo"; # name = "FiraCode Nerd Font Propo";
# name = "Montserrat"; # name = "Montserrat";
}; };
monospace = { monospace = {
package = pkgs.nerdfonts; # has overrides package = pkgs.nerdfonts; # has overrides
name = "FiraCode Nerd Font Mono"; name = "FiraCode Nerd Font Mono";
}; };
emoji = { emoji = {
package = pkgs.noto-fonts-emoji; package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji"; name = "Noto Color Emoji";
}; };
}; };
image = config.swarselsystems.wallpaper; image = config.swarselsystems.wallpaper;
targets = { targets = {
emacs.enable = false; emacs.enable = false;

View file

@ -1,4 +1,4 @@
{ config, pkgs, lib, ... }: { config, lib, ... }:
let let
inherit (config.swarselsystems) monitors; inherit (config.swarselsystems) monitors;
eachMonitor = _name: monitor: { eachMonitor = _name: monitor: {

View file

@ -24,7 +24,7 @@ _:
}; };
}; };
xdg.configFile = { xdg.configFile = {
"tridactyl/tridactylrc".source = ../../../programs/firefox/tridactyl/tridactylrc; "tridactyl/tridactylrc".source = ../../../programs/firefox/tridactyl/tridactylrc;
"tridactyl/themes/base16-codeschool.css".source = ../../../programs/firefox/tridactyl/themes/base16-codeschool.css; "tridactyl/themes/base16-codeschool.css".source = ../../../programs/firefox/tridactyl/themes/base16-codeschool.css;
}; };

View file

@ -1,4 +1,4 @@
{ config, lib, pkgs, ... }: { config, lib, ... }:
{ {
programs.waybar = { programs.waybar = {

View file

@ -1,36 +1,37 @@
{ pkgs, config, ... }: _:
let # { pkgs, config, ... }:
inherit (config.lib.stylix) colors; # let
sesh = pkgs.writeScriptBin "sesh" '' # inherit (config.lib.stylix) colors;
#! /usr/bin/env sh # sesh = pkgs.writeScriptBin "sesh" ''
# #! /usr/bin/env sh
# Taken from https://github.com/zellij-org/zellij/issues/884#issuecomment-1851136980 # # Taken from https://github.com/zellij-org/zellij/issues/884#issuecomment-1851136980
# select a directory using zoxide # # select a directory using zoxide
ZOXIDE_RESULT=$(zoxide query --interactive) # ZOXIDE_RESULT=$(zoxide query --interactive)
# checks whether a directory has been selected # # checks whether a directory has been selected
if [[ -z "$ZOXIDE_RESULT" ]]; then # if [[ -z "$ZOXIDE_RESULT" ]]; then
# if there was no directory, select returns without executing # # if there was no directory, select returns without executing
exit 0 # exit 0
fi # fi
# extracts the directory name from the absolute path # # extracts the directory name from the absolute path
SESSION_TITLE=$(echo "$ZOXIDE_RESULT" | sed 's#.*/##') # SESSION_TITLE=$(echo "$ZOXIDE_RESULT" | sed 's#.*/##')
# get the list of sessions # # get the list of sessions
SESSION_LIST=$(zellij list-sessions -n | awk '{print $1}') # SESSION_LIST=$(zellij list-sessions -n | awk '{print $1}')
# checks if SESSION_TITLE is in the session list # # checks if SESSION_TITLE is in the session list
if echo "$SESSION_LIST" | grep -q "^$SESSION_TITLE$"; then # if echo "$SESSION_LIST" | grep -q "^$SESSION_TITLE$"; then
# if so, attach to existing session # # if so, attach to existing session
zellij attach "$SESSION_TITLE" # zellij attach "$SESSION_TITLE"
else # else
# if not, create a new session # # if not, create a new session
echo "Creating new session $SESSION_TITLE and CD $ZOXIDE_RESULT" # echo "Creating new session $SESSION_TITLE and CD $ZOXIDE_RESULT"
cd $ZOXIDE_RESULT # cd $ZOXIDE_RESULT
zellij attach -c "$SESSION_TITLE" # zellij attach -c "$SESSION_TITLE"
fi # fi
''; # '';
in # in
{ {
programs.zellij = { programs.zellij = {
enable = true; enable = true;

View file

@ -1,4 +1,4 @@
{ config, pkgs, ... }: _:
{ {
services.logind = { services.logind = {
lidSwitch = "suspend"; lidSwitch = "suspend";

View file

@ -6,25 +6,25 @@
extraBackends = [ pkgs.sane-airscan ]; extraBackends = [ pkgs.sane-airscan ];
}; };
# enable discovery and usage of network devices (esp. printers) # enable discovery and usage of network devices (esp. printers)
services.printing = { services.printing = {
enable = true; enable = true;
drivers = [ drivers = [
pkgs.gutenprint pkgs.gutenprint
pkgs.gutenprintBin pkgs.gutenprintBin
]; ];
browsedConf = '' browsedConf = ''
BrowseDNSSDSubTypes _cups,_print BrowseDNSSDSubTypes _cups,_print
BrowseLocalProtocols all BrowseLocalProtocols all
BrowseRemoteProtocols all BrowseRemoteProtocols all
CreateIPPPrinterQueues All CreateIPPPrinterQueues All
BrowseProtocols all BrowseProtocols all
''; '';
}; };
services.avahi = { services.avahi = {
enable = true; enable = true;
nssmdns4 = true; nssmdns4 = true;
openFirewall = true; openFirewall = true;
}; };
} }

View file

@ -1,7 +1,7 @@
{ pkgs, home-manager, config, ... }: { pkgs, home-manager, config, ... }:
{ {
stylix = { stylix = {
enable = true; enable = true;
base16Scheme = ../../../wallpaper/swarsel.yaml; base16Scheme = ../../../wallpaper/swarsel.yaml;
# base16Scheme = "${pkgs.base16-schemes}/share/themes/shapeshifter.yaml"; # base16Scheme = "${pkgs.base16-schemes}/share/themes/shapeshifter.yaml";
@ -25,7 +25,7 @@
# name = "FiraCode Nerd Font Propo"; # name = "FiraCode Nerd Font Propo";
# name = "Montserrat"; # name = "Montserrat";
}; };
sansSerif = { sansSerif = {
# package = (pkgs.nerdfonts.override { fonts = [ "FiraMono" "FiraCode"]; }); # package = (pkgs.nerdfonts.override { fonts = [ "FiraMono" "FiraCode"]; });
package = pkgs.cantarell-fonts; package = pkgs.cantarell-fonts;
@ -34,18 +34,18 @@
# name = "FiraCode Nerd Font Propo"; # name = "FiraCode Nerd Font Propo";
# name = "Montserrat"; # name = "Montserrat";
}; };
monospace = { monospace = {
package = pkgs.nerdfonts; # has overrides package = pkgs.nerdfonts; # has overrides
name = "FiraCode Nerd Font Mono"; name = "FiraCode Nerd Font Mono";
}; };
emoji = { emoji = {
package = pkgs.noto-fonts-emoji; package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji"; name = "Noto Color Emoji";
}; };
}; };
targets.grub.enable = false; # the styling makes grub more ugly targets.grub.enable = false; # the styling makes grub more ugly
image = config.swarselsystems.wallpaper; image = config.swarselsystems.wallpaper;
}; };

View file

@ -1,4 +1,4 @@
{ lib, config, pkgs, ... }: { pkgs, ... }:
{ {
programs.zsh.enable = true; programs.zsh.enable = true;
users.defaultUserShell = pkgs.zsh; users.defaultUserShell = pkgs.zsh;

View file

@ -1,7 +1,7 @@
# 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.
{ config, lib, pkgs, modulesPath, ... }: { config, lib, modulesPath, ... }:
{ {
imports = imports =

View file

@ -0,0 +1,37 @@
{ inputs, outputs, config, pkgs, lib, ... }:
{
imports = [
inputs.home-manager.darwinModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users."leon.schwarzaeugl".imports = [
] ++ (builtins.attrValues outputs.homeManagerModules);
}
] ++ (builtins.attrValues outputs.nixosModules);
nix.settings.experimental-features = "nix-command flakes";
nixpkgs = {
hostPlatform = "x86_64-darwin";
inherit (outputs) overlays;
config = {
allowUnfree = true;
};
};
# Auto upgrade nix package and the daemon service.
services.nix-daemon.enable = true;
services.karabiner-elements.enable = true;
home-manager.users."leon.schwarzaeugl".home.stateVersion = "23.05";
home-manager.users."leon.schwarzaeugl".swarselsystems = {
isDarwin = true;
isLaptop = true;
isNixos = false;
isBtrfs = false;
};
system.stateVersion = 4;
}

View file

@ -54,7 +54,7 @@
profiles = { profiles = {
dc_adm = { dc_adm = {
id = 1; id = 1;
isDefault = false; isDefault = false;
userChrome = builtins.readFile ../../../programs/firefox/chrome/userChrome.css; userChrome = builtins.readFile ../../../programs/firefox/chrome/userChrome.css;
extensions = with pkgs.nur.repos.rycee.firefox-addons; [ extensions = with pkgs.nur.repos.rycee.firefox-addons; [
@ -77,7 +77,7 @@
don-t-fuck-with-paste don-t-fuck-with-paste
plasma-integration plasma-integration
]; ];
search.engines = { search.engines = {
"Nix Packages" = { "Nix Packages" = {
urls = [{ urls = [{
@ -90,7 +90,7 @@
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ]; definedAliases = [ "@np" ];
}; };
"NixOS Wiki" = { "NixOS Wiki" = {
urls = [{ urls = [{
template = "https://nixos.wiki/index.php?search={searchTerms}"; template = "https://nixos.wiki/index.php?search={searchTerms}";
@ -99,7 +99,7 @@
updateInterval = 24 * 60 * 60 * 1000; # every day updateInterval = 24 * 60 * 60 * 1000; # every day
definedAliases = [ "@nw" ]; definedAliases = [ "@nw" ];
}; };
"NixOS Options" = { "NixOS Options" = {
urls = [{ urls = [{
template = "https://search.nixos.org/options"; template = "https://search.nixos.org/options";
@ -107,11 +107,11 @@
{ name = "query"; value = "{searchTerms}"; } { name = "query"; value = "{searchTerms}"; }
]; ];
}]; }];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@no" ]; definedAliases = [ "@no" ];
}; };
"Home Manager Options" = { "Home Manager Options" = {
urls = [{ urls = [{
template = "https://home-manager-options.extranix.com/"; template = "https://home-manager-options.extranix.com/";
@ -119,19 +119,19 @@
{ name = "query"; value = "{searchTerms}"; } { name = "query"; value = "{searchTerms}"; }
]; ];
}]; }];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@hm" "@ho" "@hmo" ]; definedAliases = [ "@hm" "@ho" "@hmo" ];
}; };
"Google".metaData.alias = "@g"; "Google".metaData.alias = "@g";
}; };
search.force = true; # this is required because otherwise the search.json.mozlz4 symlink gets replaced on every firefox restart search.force = true; # this is required because otherwise the search.json.mozlz4 symlink gets replaced on every firefox restart
}; };
cl_adm = { cl_adm = {
id = 2; id = 2;
isDefault = false; isDefault = false;
userChrome = builtins.readFile ../../../programs/firefox/chrome/userChrome.css; userChrome = builtins.readFile ../../../programs/firefox/chrome/userChrome.css;
extensions = with pkgs.nur.repos.rycee.firefox-addons; [ extensions = with pkgs.nur.repos.rycee.firefox-addons; [
@ -154,7 +154,7 @@
don-t-fuck-with-paste don-t-fuck-with-paste
plasma-integration plasma-integration
]; ];
search.engines = { search.engines = {
"Nix Packages" = { "Nix Packages" = {
urls = [{ urls = [{
@ -167,7 +167,7 @@
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ]; definedAliases = [ "@np" ];
}; };
"NixOS Wiki" = { "NixOS Wiki" = {
urls = [{ urls = [{
template = "https://nixos.wiki/index.php?search={searchTerms}"; template = "https://nixos.wiki/index.php?search={searchTerms}";
@ -176,7 +176,7 @@
updateInterval = 24 * 60 * 60 * 1000; # every day updateInterval = 24 * 60 * 60 * 1000; # every day
definedAliases = [ "@nw" ]; definedAliases = [ "@nw" ];
}; };
"NixOS Options" = { "NixOS Options" = {
urls = [{ urls = [{
template = "https://search.nixos.org/options"; template = "https://search.nixos.org/options";
@ -184,11 +184,11 @@
{ name = "query"; value = "{searchTerms}"; } { name = "query"; value = "{searchTerms}"; }
]; ];
}]; }];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@no" ]; definedAliases = [ "@no" ];
}; };
"Home Manager Options" = { "Home Manager Options" = {
urls = [{ urls = [{
template = "https://home-manager-options.extranix.com/"; template = "https://home-manager-options.extranix.com/";
@ -196,19 +196,19 @@
{ name = "query"; value = "{searchTerms}"; } { name = "query"; value = "{searchTerms}"; }
]; ];
}]; }];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@hm" "@ho" "@hmo" ]; definedAliases = [ "@hm" "@ho" "@hmo" ];
}; };
"Google".metaData.alias = "@g"; "Google".metaData.alias = "@g";
}; };
search.force = true; # this is required because otherwise the search.json.mozlz4 symlink gets replaced on every firefox restart search.force = true; # this is required because otherwise the search.json.mozlz4 symlink gets replaced on every firefox restart
}; };
ws_adm = { ws_adm = {
id = 3; id = 3;
isDefault = false; isDefault = false;
userChrome = builtins.readFile ../../../programs/firefox/chrome/userChrome.css; userChrome = builtins.readFile ../../../programs/firefox/chrome/userChrome.css;
extensions = with pkgs.nur.repos.rycee.firefox-addons; [ extensions = with pkgs.nur.repos.rycee.firefox-addons; [
@ -231,7 +231,7 @@
don-t-fuck-with-paste don-t-fuck-with-paste
plasma-integration plasma-integration
]; ];
search.engines = { search.engines = {
"Nix Packages" = { "Nix Packages" = {
urls = [{ urls = [{
@ -244,7 +244,7 @@
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ]; definedAliases = [ "@np" ];
}; };
"NixOS Wiki" = { "NixOS Wiki" = {
urls = [{ urls = [{
template = "https://nixos.wiki/index.php?search={searchTerms}"; template = "https://nixos.wiki/index.php?search={searchTerms}";
@ -253,7 +253,7 @@
updateInterval = 24 * 60 * 60 * 1000; # every day updateInterval = 24 * 60 * 60 * 1000; # every day
definedAliases = [ "@nw" ]; definedAliases = [ "@nw" ];
}; };
"NixOS Options" = { "NixOS Options" = {
urls = [{ urls = [{
template = "https://search.nixos.org/options"; template = "https://search.nixos.org/options";
@ -261,11 +261,11 @@
{ name = "query"; value = "{searchTerms}"; } { name = "query"; value = "{searchTerms}"; }
]; ];
}]; }];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@no" ]; definedAliases = [ "@no" ];
}; };
"Home Manager Options" = { "Home Manager Options" = {
urls = [{ urls = [{
template = "https://home-manager-options.extranix.com/"; template = "https://home-manager-options.extranix.com/";
@ -273,20 +273,20 @@
{ name = "query"; value = "{searchTerms}"; } { name = "query"; value = "{searchTerms}"; }
]; ];
}]; }];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@hm" "@ho" "@hmo" ]; definedAliases = [ "@hm" "@ho" "@hmo" ];
}; };
"Google".metaData.alias = "@g"; "Google".metaData.alias = "@g";
}; };
search.force = true; # this is required because otherwise the search.json.mozlz4 symlink gets replaced on every firefox restart search.force = true; # this is required because otherwise the search.json.mozlz4 symlink gets replaced on every firefox restart
}; };
# i need this profile because xdg-open uses cl_adm profile no matter what i do # i need this profile because xdg-open uses cl_adm profile no matter what i do
cl_adm_real = { cl_adm_real = {
id = 4; id = 4;
isDefault = false; isDefault = false;
userChrome = builtins.readFile ../../../programs/firefox/chrome/userChrome.css; userChrome = builtins.readFile ../../../programs/firefox/chrome/userChrome.css;
extensions = with pkgs.nur.repos.rycee.firefox-addons; [ extensions = with pkgs.nur.repos.rycee.firefox-addons; [
@ -309,7 +309,7 @@
don-t-fuck-with-paste don-t-fuck-with-paste
plasma-integration plasma-integration
]; ];
search.engines = { search.engines = {
"Nix Packages" = { "Nix Packages" = {
urls = [{ urls = [{
@ -322,7 +322,7 @@
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ]; definedAliases = [ "@np" ];
}; };
"NixOS Wiki" = { "NixOS Wiki" = {
urls = [{ urls = [{
template = "https://nixos.wiki/index.php?search={searchTerms}"; template = "https://nixos.wiki/index.php?search={searchTerms}";
@ -331,7 +331,7 @@
updateInterval = 24 * 60 * 60 * 1000; # every day updateInterval = 24 * 60 * 60 * 1000; # every day
definedAliases = [ "@nw" ]; definedAliases = [ "@nw" ];
}; };
"NixOS Options" = { "NixOS Options" = {
urls = [{ urls = [{
template = "https://search.nixos.org/options"; template = "https://search.nixos.org/options";
@ -339,11 +339,11 @@
{ name = "query"; value = "{searchTerms}"; } { name = "query"; value = "{searchTerms}"; }
]; ];
}]; }];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@no" ]; definedAliases = [ "@no" ];
}; };
"Home Manager Options" = { "Home Manager Options" = {
urls = [{ urls = [{
template = "https://home-manager-options.extranix.com/"; template = "https://home-manager-options.extranix.com/";
@ -351,15 +351,15 @@
{ name = "query"; value = "{searchTerms}"; } { name = "query"; value = "{searchTerms}"; }
]; ];
}]; }];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@hm" "@ho" "@hmo" ]; definedAliases = [ "@hm" "@ho" "@hmo" ];
}; };
"Google".metaData.alias = "@g"; "Google".metaData.alias = "@g";
}; };
search.force = true; # this is required because otherwise the search.json.mozlz4 symlink gets replaced on every firefox restart search.force = true; # this is required because otherwise the search.json.mozlz4 symlink gets replaced on every firefox restart
}; };
}; };
}; };

View file

@ -26,10 +26,12 @@
zsh.shellInit = '' zsh.shellInit = ''
export CLAD="$(cat ${config.sops.secrets.clad.path})" export CLAD="$(cat ${config.sops.secrets.clad.path})"
export DCAD="$(cat ${config.sops.secrets.dcad.path})" export DCAD="$(cat ${config.sops.secrets.dcad.path})"
export GOVC_PASSWORD="$(cat ${config.sops.secrets.dcad.path})"
export WSAD="$(cat ${config.sops.secrets.wsad.path})" export WSAD="$(cat ${config.sops.secrets.wsad.path})"
export IMBAD="$(cat ${config.sops.secrets.imbad.path})" export IMBAD="$(cat ${config.sops.secrets.imbad.path})"
export DCUSER="dc_adm_schwarzaeugl@IMP.UNIVIE.AC.AT" export DCUSER="dc_adm_schwarzaeugl@IMP.UNIVIE.AC.AT"
export PACKER_SSH_EXTRA_ARGS='"--scp-extra-args"',"\"'-O'\"" export GOVC_USERNAME="dc_adm_schwarzaeugl@IMP.UNIVIE.AC.AT"
export PACKER_SSH_EXTRA_ARGS='"--scp-extra-args","'-O'"'
''; '';
browserpass.enable = true; browserpass.enable = true;
@ -53,6 +55,7 @@
gnumake gnumake
libisoburn libisoburn
govc govc
terraform
]; ];
@ -60,7 +63,7 @@
openssh = { openssh = {
enable = true; enable = true;
extraConfig = '' extraConfig = ''
''; '';
}; };
syncthing = { syncthing = {

View file

@ -26,6 +26,7 @@
./syncthing.nix ./syncthing.nix
./restic.nix ./restic.nix
./monitoring.nix ./monitoring.nix
./jenkins.nix
]; ];
nix = nix =

View file

@ -1,4 +1,4 @@
{ pkgs, lib, config, ... }: { lib, config, ... }:
{ {
config = lib.mkIf config.swarselsystems.server.immich { config = lib.mkIf config.swarselsystems.server.immich {

View file

@ -0,0 +1,35 @@
{ pkgs, lib, config, ... }:
{
config = lib.mkIf config.swarselsystems.server.jenkins {
services.jenkins = {
enable = true;
withCLI = true;
port = 8088;
packages = [ pkgs.stdenv pkgs.git pkgs.jdk17 config.programs.ssh.package pkgs.nix ];
listenAddress = "127.0.0.1";
home = "/Vault/apps/jenkins";
};
services.nginx = {
virtualHosts = {
"servant.swarsel.win" = {
enableACME = true;
forceSSL = true;
acmeRoot = null;
locations = {
"/" = {
proxyPass = "http://localhost:8088";
extraConfig = ''
client_max_body_size 0;
'';
};
};
};
};
};
};
}

View file

@ -1,4 +1,4 @@
{ config, lib, pkgs, modulesPath, sops, ... }: { config, lib, pkgs, sops, ... }:
let let
matrixDomain = "swatrix.swarsel.win"; matrixDomain = "swatrix.swarsel.win";
baseUrl = "https://${matrixDomain}"; baseUrl = "https://${matrixDomain}";

View file

@ -1,4 +1,4 @@
{ pkgs, lib, config, ... }: { lib, config, ... }:
{ {
config = lib.mkIf config.swarselsystems.server.monitoring { config = lib.mkIf config.swarselsystems.server.monitoring {

View file

@ -1,4 +1,4 @@
{ pkgs, lib, config, ... }: { pkgs, ... }:
{ {
services = { services = {
# add a user with sudo smbpasswd -a <user> # add a user with sudo smbpasswd -a <user>

View file

@ -1,6 +1,6 @@
{ pkgs, lib, config, ... }: { lib, config, ... }:
{ {
config = lib.mkIf config.swarselsystems.server.immich { config = lib.mkIf config.swarselsystems.server.paperless {
users.users.paperless = { users.users.paperless = {
extraGroups = [ "users" ]; extraGroups = [ "users" ];

View file

@ -1,4 +1,4 @@
{ pkgs, lib, config, ... }: { lib, config, ... }:
{ {
config = lib.mkIf config.swarselsystems.server.restic { config = lib.mkIf config.swarselsystems.server.restic {

View file

@ -1,53 +0,0 @@
{ pkgs, lib, config, ... }:
{
# Network shares
# add a user with sudo smbpasswd -a <user>
samba = {
package = pkgs.samba4Full;
extraConfig = ''
workgroup = WORKGROUP
server role = standalone server
dns proxy = no
pam password change = yes
map to guest = bad user
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
follow symlinks = yes
'';
# ^^ `samba4Full` is compiled with avahi, ldap, AD etc support compared to the default package, `samba`
# Required for samba to register mDNS records for auto discovery
# See https://github.com/NixOS/nixpkgs/blob/592047fc9e4f7b74a4dc85d1b9f5243dfe4899e3/pkgs/top-level/all-packages.nix#L27268
enable = true;
# openFirewall = true;
shares.Eternor = {
browseable = "yes";
"read only" = "no";
"guest ok" = "no";
path = "/Vault/Eternor";
writable = "true";
comment = "Eternor";
"valid users" = "@Swarsel";
};
};
avahi = {
publish.enable = true;
publish.userServices = true;
# ^^ Needed to allow samba to automatically register mDNS records without the need for an `extraServiceFile`
nssmdns4 = true;
# ^^ Not one hundred percent sure if this is needed- if it aint broke, don't fix it
enable = true;
};
samba-wsdd = {
# This enables autodiscovery on windows since SMB1 (and thus netbios) support was discontinued
enable = true;
};
};
}

View file

@ -1,4 +1,4 @@
{ pkgs, config, ... }: { config, ... }:
{ {
sops = { sops = {
age.sshKeyPaths = [ "/etc/ssh/sops" ]; age.sshKeyPaths = [ "/etc/ssh/sops" ];

View file

@ -1,4 +1,4 @@
{ pkgs, lib, config, ... }: { lib, config, ... }:
{ {
config = lib.mkIf config.swarselsystems.server.spotifyd { config = lib.mkIf config.swarselsystems.server.spotifyd {
users.groups.spotifyd = { users.groups.spotifyd = {

View file

@ -1,4 +1,4 @@
{ pkgs, lib, config, ... }: { lib, config, ... }:
{ {
config = lib.mkIf config.swarselsystems.server.syncthing { config = lib.mkIf config.swarselsystems.server.syncthing {

View file

@ -1,2 +0,0 @@
{ pkgs, lib, config, ... }:
{ }

View file

@ -0,0 +1,36 @@
{ inputs, outputs, config, pkgs, lib, ... }:
{
imports = [
inputs.home-manager.darwinModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users."leon.schwarzaeugl".imports = [
../../common/home/emacs.nix
] ++ (builtins.attrValues outputs.homeManagerModules);
}
] ++ (builtins.attrValues outputs.nixosModules);
nix.settings.experimental-features = "nix-command flakes";
nixpkgs = {
inherit (outputs) overlays;
config = {
allowUnfree = true;
};
};
# Auto upgrade nix package and the daemon service.
services.nix-daemon.enable = true;
services.karabiner-elements.enable = true;
home-manager.users."leon.schwarzaeugl".swarselsystems = {
isDarwin = true;
isLaptop = true;
isNixos = false;
isBtrfs = false;
};
system.stateVersion = 4;
}

View file

@ -1,4 +1,4 @@
{ inputs, outputs, config, pkgs, lib, ... }: { inputs, outputs, config, ... }:
{ {
imports = [ imports = [
@ -54,6 +54,7 @@
transmission = true; transmission = true;
syncthing = true; syncthing = true;
monitoring = true; monitoring = true;
jenkins = false;
}; };
}; };

View file

@ -1,7 +1,7 @@
# 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.
{ config, lib, pkgs, modulesPath, ... }: { config, lib, modulesPath, ... }:
{ {
imports = imports =

View file

@ -179,17 +179,19 @@ create a new one."
(shell-command "nixpkgs-fmt . > /dev/null"))) (shell-command "nixpkgs-fmt . > /dev/null")))
(defun swarsel/org-babel-tangle-config () (defun swarsel/org-babel-tangle-config ()
(interactive)
(when (string-equal (buffer-file-name) (when (string-equal (buffer-file-name)
swarsel-swarsel-org-filepath) swarsel-swarsel-org-filepath)
;; Dynamic scoping to the rescue ;; Dynamic scoping to the rescue
(let ((org-confirm-babel-evaluate nil)) (let ((org-confirm-babel-evaluate nil))
;; (org-html-export-to-html) ;; (org-html-export-to-html)
(org-babel-tangle) (org-babel-tangle)
(swarsel/run-formatting)))) ;; (swarsel/run-formatting)
)))
(setq org-html-htmlize-output-type nil) (setq org-html-htmlize-output-type nil)
(add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook #'swarsel/org-babel-tangle-config))) ;; (add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook #'swarsel/org-babel-tangle-config)))
(defun org-fold-outer () (defun org-fold-outer ()
(interactive) (interactive)
@ -976,17 +978,19 @@ create a new one."
(setq org-fold-core-style 'overlays) (setq org-fold-core-style 'overlays)
(org-babel-do-load-languages (setq org-src-preserve-indentation nil)
'org-babel-load-languages
'((emacs-lisp . t)
(python . t)
(js . t)
(shell . t)
))
(push '("conf-unix" . conf-unix) org-src-lang-modes) (org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(python . t)
(js . t)
(shell . t)
))
(setq org-export-with-broken-links 'mark) (push '("conf-unix" . conf-unix) org-src-lang-modes)
(setq org-export-with-broken-links 'mark)
(require 'org-tempo) (require 'org-tempo)
(add-to-list 'org-structure-template-alist '("sh" . "src shell")) (add-to-list 'org-structure-template-alist '("sh" . "src shell"))
@ -1526,6 +1530,13 @@ create a new one."
(defalias 'start-lsp-server #'eglot) (defalias 'start-lsp-server #'eglot)
(use-package sideline-flymake
:hook (flymake-mode . sideline-mode)
:init
(setq sideline-flymake-display-mode 'point) ; 'point to show errors only on point
; 'line to show errors on the current line
(setq sideline-backends-right '(sideline-flymake)))
(use-package breadcrumb (use-package breadcrumb
;; :config (breadcrumb-mode) ;; :config (breadcrumb-mode)
) )