diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..ac283ea --- /dev/null +++ b/.clang-format @@ -0,0 +1,225 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: DontAlign +AlignArrayOfStructures: Left +AlignConsecutiveAssignments: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + PadOperators: true +AlignConsecutiveBitFields: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + PadOperators: false +AlignConsecutiveDeclarations: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + PadOperators: false +AlignConsecutiveMacros: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + PadOperators: false +AlignEscapedNewlines: Right +AlignOperands: Align +AlignTrailingComments: + Kind: Always + OverEmptyLines: 0 +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: false +AllowShortEnumsOnASingleLine: true +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: Never +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: MultiLine +AttributeMacros: + - __capability +BinPackArguments: false +BinPackParameters: true +BitFieldColonSpacing: Both +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterExternBlock: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakAfterAttributes: Never +BreakAfterJavaFieldAnnotations: false +BreakArrays: true +BreakBeforeBinaryOperators: None +BreakBeforeConceptDeclarations: Always +BreakBeforeBraces: Attach +BreakBeforeInlineASMColon: OnlyMultiline +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakInheritanceList: BeforeColon +BreakStringLiterals: true +ColumnLimit: 120 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +EmptyLineAfterAccessModifier: Never +EmptyLineBeforeAccessModifier: LogicalBlock +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IfMacros: + - KJ_IF_MAYBE +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + SortPriority: 0 + CaseSensitive: false + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + SortPriority: 0 + CaseSensitive: false + - Regex: '.*' + Priority: 1 + SortPriority: 0 + CaseSensitive: false +IncludeIsMainRegex: '(Test)?$' +IncludeIsMainSourceRegex: '' +IndentAccessModifiers: false +IndentCaseBlocks: false +IndentCaseLabels: false +IndentExternBlock: AfterExternBlock +IndentGotoLabels: true +IndentPPDirectives: None +IndentRequiresClause: true +IndentWidth: 2 +IndentWrappedFunctionNames: false +InsertBraces: false +InsertNewlineAtEOF: false +InsertTrailingCommas: None +IntegerLiteralSeparator: + Binary: 0 + BinaryMinDigits: 0 + Decimal: 0 + DecimalMinDigits: 0 + Hex: 0 + HexMinDigits: 0 +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +LambdaBodyIndentation: Signature +LineEnding: DeriveLF +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 2 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PackConstructorInitializers: BinPack +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakOpenParenthesis: 0 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyIndentedWhitespace: 0 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +PPIndentWidth: -1 +QualifierAlignment: Leave +ReferenceAlignment: Pointer +ReflowComments: true +RemoveBracesLLVM: false +RemoveSemicolon: false +RequiresClausePosition: OwnLine +RequiresExpressionIndentation: OuterScope +SeparateDefinitionBlocks: Leave +ShortNamespaceLines: 1 +SortIncludes: CaseSensitive +SortJavaStaticImport: Before +SortUsingDeclarations: LexicographicNumeric +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceAroundPointerQualifiers: Default +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeParensOptions: + AfterControlStatements: true + AfterForeachMacros: true + AfterFunctionDefinitionName: false + AfterFunctionDeclarationName: false + AfterIfMacros: true + AfterOverloadedOperator: false + AfterRequiresInClause: false + AfterRequiresInExpression: false + BeforeNonEmptyParentheses: false +SpaceBeforeRangeBasedForLoopColon: true +SpaceBeforeSquareBrackets: false +SpaceInEmptyBlock: false +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: Never +SpacesInConditionalStatement: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInLineCommentPrefix: + Minimum: 1 + Maximum: -1 +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Latest +StatementAttributeLikeMacros: + - Q_EMIT +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 8 +UseTab: Never +WhitespaceSensitiveMacros: + - BOOST_PP_STRINGIZE + - CF_SWIFT_NAME + - NS_SWIFT_NAME + - PP_STRINGIZE + - STRINGIZE +... + diff --git a/Makefile b/Makefile index 77ad482..1072c6f 100644 --- a/Makefile +++ b/Makefile @@ -1,43 +1,67 @@ -SRCS = $(wildcard src/*.c) HEADERS = $(wildcard src/*.h) +CSRCS = $(wildcard src/*.c) -PO_DIRS = $(wildcard locale/*/*) -PO_FILES = $(wildcard locale/*/*/*.po) +PO_SRCS = $(wildcard locale/*/*/*.po) +PO_OUTS = $(patsubst locale/%.po,locale/%.mo,$(PO_SRCS)) +PO_DIRS = $(wildcard locale/*/*) -prefix = /usr +prefix = /usr +CC = gcc -dist/xcfg: $(SRCS) $(HEADERS) $(PO_FILES) +all: dist/xcfg $(PO_OUTS) + +dist/xcfg: $(CSRCS) $(HEADERS) mkdir -p dist - gcc $(CFLAGS) $(SRCS) -o $@ -lncurses -lmenu -lm + $(CC) $(CFLAGS) $(CSRCS) -o $@ -lncurses -lmenu -lm + +locale/%.mo: locale/%.po + msgfmt $^ -o $@ + +locale/%.po: locale/xcfg.pot + cp $@ $@.old + if msgmerge $@ $^ -o $@ ; then \ + rm $@.old ; \ + echo "merge success: $@" ; \ + else \ + echo "merge failed: $@" ; \ + mv $@.old $@ ; \ + fi; \ + +locale/xcfg.pot: $(CSRCS) mkdir -p locale - xgettext -k_ -c $(SRCS) -o locale/xcfg.pot - @for po in $(PO_DIRS) ; do \ - mv $$po/xcfg.po $$po/mp.old.po ; \ - if msgmerge $$po/mp.old.po locale/xcfg.pot -o $$po/xcfg.po ; then \ - rm $$po/mp.old.po ; \ - echo "merge success: $$po/xcfg.po" ; \ - else \ - echo "merge failed: $$po/xcfg.po" ; \ - mv $$po/mp.old.po $$po/xcfg.po ; \ - fi; \ - done - @for po in $(PO_DIRS) ; do \ - msgfmt $$po/xcfg.po -o $$po/xcfg.mo ; \ - done + xgettext -k_ -c $^ -o $@ install: - mkdir -p $(DESTDIR)$(prefix)/bin - install -m755 dist/xcfg $(DESTDIR)$(prefix)/bin/xcfg + mkdir -pv $(DESTDIR)/etc/xcfg + mkdir -pv $(DESTDIR)/var/lib/xcfg + mkdir -pv $(DESTDIR)$(prefix)/bin + install -v -m755 dist/xcfg $(DESTDIR)$(prefix)/bin/xcfg + @for cmd in $(CMDS) ; do \ + ln -sfv xcfg $(DESTDIR)$(prefix)/bin/$$cmd ; \ + done @for po in $(PO_DIRS) ; do \ echo "installing locale: $$po/xcfg.mo" ; \ mkdir -pv $(DESTDIR)/usr/share/$$po ; \ cp $$po/xcfg.mo $(DESTDIR)/usr/share/$$po ; \ done +defcfg: + cp -v install/cfg.default $(DESTDIR)/etc/xcfg/cfg + uninstall: - rm $(DESTDIR)$(prefix)/bin/xcfg + rm -v $(DESTDIR)$(prefix)/bin/xcfg + @for cmd in $(CMDS) ; do \ + unlink $(DESTDIR)$(prefix)/bin/$$cmd ; \ + done + +clean: + rm dist/xcfg + rm locale/xcfg.pot + @for po in $(PO_DIRS) ; do \ + rm $$po/xcfg.mo ; \ + done format: - clang-format -i -style=file src/*.c src/*.h + clang-format -i -style=file $(HEADERS) $(CSRCS) -.PHONY: install uninstall format +.PHONY: install defcfg uninstall clean diff --git a/locale/tr/LC_MESSAGES/xcfg.po b/locale/tr/LC_MESSAGES/xcfg.po index 338b9a0..e268807 100644 --- a/locale/tr/LC_MESSAGES/xcfg.po +++ b/locale/tr/LC_MESSAGES/xcfg.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-23 02:27+0300\n" +"POT-Creation-Date: 2024-05-01 13:06+0300\n" "PO-Revision-Date: 2024-02-20 20:36+0300\n" "Last-Translator: \n" "Language-Team: Turkish \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/main.c:49 src/main.c:185 +#: src/main.c:49 src/main.c:183 #, fuzzy msgid "Failed to get the home directory" msgstr "Ev dizini bulmak başarısız oldu" @@ -32,7 +32,7 @@ msgstr "%s dosyasını okumak için açmak başarısız oldu" msgid "Failed to open %s for writing" msgstr "%s dosyasını yazmak için açmak başarısız oldu" -#: src/main.c:100 src/main.c:191 +#: src/main.c:100 src/main.c:189 #, c-format msgid "Failed to write to %s" msgstr "%s dosyasına yazmak başarısız oldu" @@ -55,37 +55,37 @@ msgstr "Nispeten düşük sistem gereksinimleri olan özgür bir masaüstü orta msgid "Tiling window manager based on binary space partitioning" msgstr "İkili alan bölme tabanlı döşeme pencere yöneticisi" -#: src/main.c:140 +#: src/main.c:139 msgid "Improved tiling window manager" msgstr "Geliştirilmiş döşeme pencere yöneticisi" -#: src/main.c:146 +#: src/main.c:144 #, fuzzy msgid "mp is not installed!" msgstr "mp kurulu değil" -#: src/main.c:155 +#: src/main.c:153 msgid "Install doas or sudo to use this script" msgstr "Bu betiği kullanmak için doas ya da sudo kurun" -#: src/main.c:170 +#: src/main.c:168 msgid "Choose a desktop enviroment" msgstr "Bir masaüstü ortamı seçin" -#: src/main.c:176 +#: src/main.c:174 msgid "Add auto-startx to shell configuration?" msgstr "Otomatik-startx kabuk konfigürasyonu ekle?" -#: src/main.c:197 +#: src/main.c:195 msgid "Configuration has been saved!" msgstr "Konfigürasyon kaydedildi!" -#: src/main.c:199 +#: src/main.c:197 #, fuzzy, c-format msgid "Installing %s" msgstr "%s kuruluyor" -#: src/main.c:203 +#: src/main.c:201 #, fuzzy msgid "Installation failed" msgstr "Kurulum başarısız oldu" @@ -97,3 +97,7 @@ msgstr "Evet" #: src/term.c:82 msgid "No" msgstr "Hayır" + +#, fuzzy +#~ msgid "Feiled to get the home directory" +#~ msgstr "Ev dizini bulmak başarısız oldu" diff --git a/src/log.h b/src/log.h index 354d69b..4fe9a73 100644 --- a/src/log.h +++ b/src/log.h @@ -1,8 +1,8 @@ #pragma once -#define C_RED "\x1b[31m" -#define C_BOLD "\x1b[1m" -#define C_BLUE "\x1b[34m" +#define C_RED "\x1b[31m" +#define C_BOLD "\x1b[1m" +#define C_BLUE "\x1b[34m" #define C_GREEN "\x1b[32m" #define C_RESET "\x1b[0m" diff --git a/src/main.c b/src/main.c index 6847588..9a0b997 100644 --- a/src/main.c +++ b/src/main.c @@ -39,7 +39,7 @@ bool add_startx() { bool ret = false; - char *profile = ".bash_profile"; + char *profile = ".bash_profile"; char *shellenv = getenv("SHELL"); if (NULL != shellenv && endswith(shellenv, "zsh")) profile = ".zshrc"; @@ -56,8 +56,8 @@ bool add_startx() { return ret; } - char *line = NULL, *all = NULL; - int indx = 0; + char *line = NULL, *all = NULL; + int indx = 0; size_t sz, len; while ((sz = getline(&line, &len, pf)) != -1) { @@ -82,7 +82,7 @@ bool add_startx() { } char *startx = AUTOSTARTX; - all = realloc(all, indx + strlen(startx) + 10); + all = realloc(all, indx + strlen(startx) + 10); for (int i = 0; i < strlen(startx); i++) { all[indx] = startx[i]; indx++; @@ -119,27 +119,25 @@ int main(int argc, char **argv, char **envp) { struct Desktop desktops[] = { { - .name = "XFCE4", - .desc = _("Lightweight desktop environment for UNIX-like operating " + .name = "XFCE4", + .desc = _("Lightweight desktop environment for UNIX-like operating " "systems"), - .pkg = "xfce4", - .cmd = "startxfce4\n", - }, + .pkg = "xfce4", + .cmd = "startxfce4\n", + }, { - .name = "LXDE", - .desc = _("Free desktop environment with comparatively low resource " + .name = "LXDE", + .desc = _("Free desktop environment with comparatively low resource " "requirements"), - .pkg = "lxde", - .cmd = "startlxde\n", - }, - {.name = "bspwm", + .pkg = "lxde", + .cmd = "startlxde\n", + }, + {.name = "bspwm", .desc = _("Tiling window manager based on binary space partitioning"), - .pkg = "bspwm", - .cmd = "bspwm\n"}, - {.name = "i3", - .desc = _("Improved tiling window manager"), - .pkg = "i3", - .cmd = "i3\n"}}; + .pkg = "bspwm", + .cmd = "bspwm\n"}, + {.name = "i3", .desc = _("Improved tiling window manager"), .pkg = "i3", .cmd = "i3\n"} + }; char *mpi_path = check_path("mp-install"); if (NULL == mpi_path) { @@ -160,7 +158,7 @@ int main(int argc, char **argv, char **envp) { term_init(); - int sz = sizeof(desktops) / sizeof(struct Desktop); + int sz = sizeof(desktops) / sizeof(struct Desktop); ITEM **items = malloc(sizeof(ITEM *) * (sz + 1)); for (int i = 0; i < sz; i++) diff --git a/src/term.c b/src/term.c index 306c524..d4852b5 100644 --- a/src/term.c +++ b/src/term.c @@ -27,7 +27,7 @@ int term_ask(char *text, ITEM **items, int sz) { mvprintw(1, 1, "%s", text); char line[strlen(text) + 5]; for (int i = 0; i < strlen(text); i++) { - line[i] = '='; + line[i] = '='; line[i + 1] = '\0'; } mvprintw(2, 1, "%s", line); @@ -49,7 +49,7 @@ int term_ask(char *text, ITEM **items, int sz) { wrefresh(swin); bool done = false; - int indx = 0, c = 0; + int indx = 0, c = 0; while ((c = wgetch(swin))) { switch (c) { @@ -80,7 +80,7 @@ int term_ask(char *text, ITEM **items, int sz) { bool term_yn(char *text) { char *yn[] = {_("Yes"), _("No"), NULL}; - int sz = sizeof(yn) / sizeof(char *); + int sz = sizeof(yn) / sizeof(char *); ITEM *items[sz + 1]; for (int i = 0; i < sz; i++) diff --git a/src/term.h b/src/term.h index 2ee2fc6..79e03e7 100644 --- a/src/term.h +++ b/src/term.h @@ -2,6 +2,6 @@ #include void term_init(); -int term_ask(char *, ITEM **, int); +int term_ask(char *, ITEM **, int); bool term_yn(char *); void term_finish(); diff --git a/src/util.c b/src/util.c index 31791ca..b05a3d2 100644 --- a/src/util.c +++ b/src/util.c @@ -17,7 +17,9 @@ bool joinhome(char *res, char *path) { return true; } -bool exists(char *path) { return access(path, F_OK) == 0; } +bool exists(char *path) { + return access(path, F_OK) == 0; +} bool endswith(const char *str, const char *suf) { int strl = strlen(str); @@ -31,7 +33,7 @@ bool endswith(const char *str, const char *suf) { char *check_path(char *bin) { char *path = getenv("PATH"); - char *res = NULL; + char *res = NULL; if (NULL == path) return NULL; diff --git a/src/util.h b/src/util.h index 9b27929..5a968fe 100644 --- a/src/util.h +++ b/src/util.h @@ -1,8 +1,8 @@ #pragma once #include -#define AUTOSTARTX \ - "\n#auto-startx \nif [[ \"$(tty)\" == \"/dev/tty1\" ]] && [ -z " \ +#define AUTOSTARTX \ + "\n#auto-startx \nif [[ \"$(tty)\" == \"/dev/tty1\" ]] && [ -z " \ "\"$DISPLAY\" ]; then\nexec startx\nfi\n" typedef struct Desktop { @@ -12,7 +12,7 @@ typedef struct Desktop { char *cmd; } desktop_t; -bool exists(char *); +bool exists(char *); char *check_path(char *); -bool joinhome(char *, char *); -bool endswith(const char *, const char *); +bool joinhome(char *, char *); +bool endswith(const char *, const char *);